VATSIM Traffics

Required roles: AIS PIB API — Roles
Base endpoint: https://ais-pib-api.ibosoft.net.tr:2087/vatsim-traffics
Reference documents: none
Attribution: show ibonav.aero wherever this data is displayed
Data sources: VATSIM, VAT-Spy Data Project.
Last updated: 17 OCT 2026

Depending on your use, the original data sources may also need to be credited.

Live traffic of the VATSIM virtual network: aircraft and their trails, controllers (centres and flight service with their sector boundaries, linked ATIS stations), ATIS stations, and aerodromes with inbound/outbound flights — all filterable by bounding box.

This is virtual-network data for flight simulation only; it is not real-world traffic. The traffic is refreshed every 15 seconds (only when VATSIM has published new data); the boundary and aerodrome data at 00:02 and 12:02 UTC.


Endpoints

Endpoint Description
GET /vatsim-traffics/update-time Time of the current traffic data (light; poll this)
GET /vatsim-traffics/aircraft Pilots
GET /vatsim-traffics/trails Trail of one aircraft
GET /vatsim-traffics/atc ATIS stations and controllers
GET /vatsim-traffics/airports Aerodromes with flights (inbound/outbound)

Poll /update-time and reload the lists only when the time changes.

Parameters

bbox (/aircraft, /atc, /airports)

bbox=minLat,minLon,maxLat,maxLon (optional). minLon > maxLon means a box crossing the antimeridian. An invalid value gives 400; it never falls back to "everything".

Aircraft, ATIS stations, controllers without a boundary and aerodromes are filtered by their position; centres and flight service with a boundary by the intersection of the boundary envelope with the box.

/trails

Parameter Description
cid VATSIM CID
callsign Callsign

Both are needed; otherwise the list is empty.

How controllers are linked

VATSIM gives no positions or boundaries for controllers, and no link between controllers and ATIS stations; these are built as follows.

  • Position: taken from the controller's radio transceiver.
  • Sector boundary (centre and flight service only): the callsign without its suffix (ANK_10_CTR → ANK_10) is shortened step by step, longest first, and each prefix is looked up in the VAT-Spy data — first as a FIR callsign prefix, then as a FIR ICAO location indicator (all boundaries of that FIR), then as a UIR (the union of its FIRs). The first match wins; boundaries with the same identifier (e.g. domestic and oceanic) are returned together. Other positions have no official boundary (sector: null).
  • ATIS (delivery, ground, tower, approach/departure only; not observers): the aerodrome is the first part of the callsign (ESGG_N_APP → ESGG; EDDF_A_ATIS → EDDF). If it is not an ICAO location indicator, the IATA/local identifier of a real VAT-Spy aerodrome is used (LAX_TWR → KLAX); identifiers that are ambiguous or stand for a group of aerodromes are not used. Without a match there is no ATIS — nothing is guessed. An approach serving several aerodromes gets only the ATIS of the aerodrome in its callsign. Order: arrival ATIS (_A_), departure ATIS (_D_), others.

Response

/update-time

{"updatedAt": "2026-03-28T06:17:23.000000Z"}

null until the first data has arrived.

/aircraft

{"updatedAt": "2026-03-28T06:17:23.000000Z", "count": 42, "aircraft": ["…"]}

Example: GET /vatsim-traffics/aircraft?bbox=35,25,45,45

/trails

{
  "updatedAt": "2026-03-28T06:17:23.000000Z",
  "count": 1,
  "trails": [{"cid": 1234567, "callsign": "BAW123", "points": [[51.477, -0.461, 37000, 90, 480, 1743180000.0]]}]
}

Each point is [lat, lon, altitude_ft, heading_deg, speed_kt, unix_timestamp]. A trail is kept for up to 24 hours; one with fewer than 2 points is not returned. A trail survives 2 missed updates (30 seconds); a new callsign of the same CID starts a new trail.

/atc

{
  "updatedAt": "2026-03-28T06:17:23.000000Z",
  "controllerCount": 45,
  "atcCount": 3,
  "atcs": ["…"],
  "controllers": ["…"]
}
Field Description
atcs ATIS stations (with transceiver position)
controllers Controllers (with transceiver position), each with sector and atis
controllerCount Number of controllers and ATIS stations on the whole network (not filtered)

sector is a MultiPolygon coordinate array ([[[[lon, lat], …], hole …], …]) or null; atis is the list of linked ATIS stations [{callsign, atis_code, text_atis, frequency}], or [].

/airports

{
  "updatedAt": "2026-10-05T22:56:28.000000Z",
  "count": 1,
  "airports": [{
    "icao": "KATL", "name": "Hartsfield-Jackson Atlanta Intl GA", "latitude": 33.6367, "longitude": -84.4279,
    "inbound": [{"callsign": "AAL1080", "departure": "KMIA", "aircraft": "B738"}],
    "outbound": [{"callsign": "DAL1", "arrival": "EGLL", "aircraft": "A339", "deptime": "2135"}]
  }]
}

Only real aerodromes in the VAT-Spy data with at least one connected flight (prefiled flight plans are not counted). deptime is the flight plan departure time as given by VATSIM (HHMM, UTC). VATSIM has no flight state.

VATSIM objects (reference)

Pilot

{
  "cid": 1234567,
  "callsign": "BAW123",
  "latitude": 51.477, "longitude": -0.461,
  "altitude": 37000, "heading": 90, "groundspeed": 480,
  "transponder": "1234",
  "logon_time": "2026-03-28T05:00:00.000000Z",
  "flight_plan": {
    "aircraft": "B777/H-SDE1FGHIJ1M1RWX/L", "aircraft_short": "B777",
    "departure": "EGLL", "arrival": "KJFK", "alternate": "KBOS",
    "flight_rules": "I", "cruise_tas": "480", "altitude": "FL370",
    "deptime": "0500", "enroute_time": "0720", "fuel_time": "0900",
    "route": "…", "remarks": "…"
  }
}

aircraft (B744/H-SDE2FGHIJ1M1RWX/L): aircraft type designator / wake turbulence category (L, M, H, J) - equipment / transponder.

Controller

{
  "cid": 7654321,
  "callsign": "EGLL_APP",
  "frequency": "119.725",
  "facility": 5,
  "text_atis": ["London Heathrow Approach", "Feedback at …"],
  "logon_time": "2026-03-28T04:00:00.000000Z",
  "latitude": 51.477, "longitude": -0.461,
  "sector": null,
  "atis": [
    {"callsign": "EGLL_A_ATIS", "atis_code": "B", "text_atis": ["…"], "frequency": "128.075"},
    {"callsign": "EGLL_D_ATIS", "atis_code": "L", "text_atis": ["…"], "frequency": "113.750"}
  ]
}

A controller's text_atis is not an ATIS: it is the controller's own free-text information (callsign, coverage, notes, closing time, links; may be empty or null), under the same field name in the VATSIM data.

ATIS

{
  "cid": 9876543,
  "callsign": "EGLL_ATIS",
  "frequency": "113.750",
  "atis_code": "B",
  "text_atis": ["LONDON HEATHROW ATIS INFO BRAVO", "…"],
  "logon_time": "2026-03-28T03:00:00.000000Z",
  "latitude": 51.477, "longitude": -0.461
}

facility

Value Position
0 OBS (observer — not shown)
1 FSS (flight service — with boundary)
2 DEL (delivery)
3 GND (ground)
4 TWR (tower)
5 APP (approach / departure)
6 CTR (centre — with boundary)

Errors

Code Meaning
400 Invalid bbox