Sending and receiving information

All requests are prefaced with $CQ. A client may send or receive requests:

$CQ(requester):(requestee):(command)

Responses follow the format below:

$CR(requestee):(requester):(command):(data)

Commands

ACC - Aircraft configuration (VATSIM only)

Returns the current configuration (i.e. flaps, landing gear, lights etc.) of the requested callsign's aircraft. Requests and responses are formatted in JSON.

ACC data is received for all aircraft within visibility range, even if not requested.

It may also be sent by a client uninitiated at any time (e.g. if the user extends/retracts flaps). In such a case, the ACC packet is addressed to @94836.

IVAO does not appear to have an equivalent command.

Note: the formatted fields below contain only the (data) field.

Request:

{"request":"full"} 

All ACC requests from other users contain this exact JSON string .

Sample response:

For some reason, ACC responses are prefixed with $CQ, and not $CR (as would be expected for a response):

{
    "config":{
        "is_full_data":true,
        "lights":{
            "strobe_on":false,
            "landing_on":false,
            "taxi_on":true,
            "beacon_on":true,
            "nav_on":true,
            "logo_on":false
        },
        "engines":{
            "1":{
                "on":true
            },
            "2":{
                "on":true
            }
        },
        "gear_down":false,
        "flaps_pct":0,
        "spoilers_out":false,
        "on_ground":true
    }
}

Line breaks have been inserted for readability. They are not present in the actual packets.

If the ACC packet is being sent by the client uninitiated, then JSON fields may be omitted as desired.

ATIS - ATIS

Returns the requested callsign's voice server URL and ATIS message. This is only applicable for ATC stations.

Each controller has an "ATIS" field associated with it. This field is essentially a user-defined information box. It does not contain the airfield ATIS, unless it belongs to an ATIS station (see below).

On VATSIM, actual airfield ATISes are implemented by means of an additional online station with the callsign ICAO_ATIS. Its ATIS field contains the actual ATIS, and a computer-generated voice is broadcast on Its voice channel to simulate voice ATIS.

Request:

$CQ(requester):(requestee):ATIS

Response:

$CR(requestee):(requester):ATIS:V:(voice server address, without "http://")
...
$CR(requestee):(requester):ATIS:T:(line of ATIS text)
$CR(requestee):(requester):ATIS:T:(line of ATIS text)
...
$CR(requestee):(requester):ATIS:E:(total number of lines, including this line)

C? - Tuned frequency [IVAO only]

Returns the radio frequency the user is tuned to.

Request:

$CQ(requestee):(requester):C?

Response:

$CR(requestee):(requester):C?:(frequency)

The frequency is formatted as xxx.yyy (e.g. 122.800)

CAPS - Client capabilities

Returns a list of the client's capabilities. It is unclear as to what these capabilities are, as pilots and ATC stations appear to return the exact same values.

Both clients and SERVER will request CAPS information.

Request:

$CQ(requestee):(requester):CAPS

Response:

$CR(requestee):(requester):CAPS:ATCINFO=1:SECPOS=1:MODELDESC=1:ONGOINGCOORD=1

RN - Real name

Returns the real name of the user logged in as the requested callsign.

Request:

$CQ(requester):(requestee):RN

Response:

ATC:

$CR(requestee):(requester):RN:(real name):(ATC sector file):(rating)

Pilot:

$CR(requestee):(requester):RN:(real name ICAO)::(rating) 

Server-only commands

The following commands are only sent/received by the server. The sending/receiving station is represented as DATA or SERVER:

INF - Client system information

Request:

$CQDATA:(recipient):INF 

Response:

#TM(callsign):DATA:(client string) PID=(CID) ((Real name ICAO)) IP=(IP address) SYS_UID=(uid) FSVER=(sim) LT=(lat) LO=(lon) AL=(alt) 
  • SYS_UID is a 9-digit number. It appears to be a negative value.
  • FSVER represents the flight simulator being used (e.g. Prepar3dV3). It is left blank (but not omitted) if the client is ATC.
  • LA,LO, and AL appear to be floating-point numbers

Text messages

All messages are prefixed with #TM:

#TM(sender):(recipient):(message contents)

If (sender) and (recipient) are online callsigns, then this command acts as a private message.

Special recipients

The following recipients are treated differently:

Recipient Meaning
@xxyyy Sends the message over the frequency 1xx.yyy MHz, instead of PM.
* Broadcast message, received by everyone on the network.

IVAO and VATSIM restrict this functionality to supervisors and administrators, but it is unknown if this is enforced server-side.

If (sender) and (recipient) are not online callsigns, then the text message represents additional background functionality that the average user does not see or deal with. It is used by VATSIM to hack in additional functionality (see below), without making major modifications to the protocol.

Escaping of message contents

VATSIM appears to correctly escape message contents, as including colons in message text does not seem to cause unexpected behaviour.

However, this does not seem to be the case in IVAO. To correctly escape colons, use :: as the escape sequence.

Flight plan acknowledgement (VATSIM)

#TM(own callsign):FP:(flightplan callsign) GET

Once the client receives a flight plan, it shall acknowledge it using the above command. The reason for this is unknown.

The server will then acknowledge with the following:

#PCserver:(own callsign):CCP:BC:(flightplan callsign):0

Server messages

#TMserver:(callsign):(message)

These are essentially text messages that are sent from a callsign named server.

These are usually seen on initial login.

Flight plans

A pilot may file a flight plan as follows:

IVAO

IVAO's flightplan format is more detailed, and is based on the ICAO international flight plan [PDF, page 2].

Please refer to IVAO documents [PDF] on what to include in each field.

$FP(callsign):SERVER:(VFR/IFR):(acft):(spd):(origin):(sched dep):1000:(crz alt):(dest):(EET):(FOB):0:0::(remarks):(alt airport):S:0:
Placeholder details
(VFR/IFR) V or I
(acft) Aircraft and equipment, in the format #/(model)/(turb)-(equip)/(xpdr) (e.g. 1/B738/M-SDE2E3FGHIRWXY/LB1). Please refer to the IVAO documents [PDF] for further details.
(spd) Cruising airspeed, in knots. Prefixed with K (km/h) N (knots), or M (Mach). K /N are always 4-digit, and M is 3 digits without the decimal (e.g. M082 = Mach 0.82)
(sched dep) Scheduled departure; e.g. 2215 or 10:15pm Z
(crz alt) Cruising level. Prefixed with F (flight level in feet), S (metric flight level in x10 metres), A (altitude in x100 feet), M (altitude in x10 metres), or VFR (VFR flight with no specific altitude)
(EET) Estimated enroute time; e.g. 1:37
(FOB) Fuel on board; e.g. 2:30

Further clarification is required on some fields.

VATSIM

VATSIM's flightplan format is simpler, and is based on the FAA domestic flight plan [PDF].

$FP(callsign):*A:(VFR/IFR):(acft type):(spd):(origin):(sched dep):(sched dep):(alt):(dest):(EET):(FOB):(alt airport):(remarks)
Placeholder details
(VFR/IFR) V or I
(acft type) includes FAA prefixes/suffixes, if present; e.g. H/B77W/L
(spd) Ground speed, in knots
(sched dep) Scheduled departure; e.g. 2215 or 10:15pm Z
(EET) Estimated enroute time; e.g. 1:37
(FOB) Fuel on board; e.g. 2:30

Flight plan packets are sent to all other clients on the server, even if not requested.

On VATSIM, once such a packet has been received, the client acknowledges it (see "Receipt of flight plan (VATSIM)" under "Text messages" on this page).