Organized Track System
Required roles:
AIS PIB API— Roles
Base endpoint:https://ais-pib-api.ibosoft.net.tr:2087/ots-tracks
Reference documents: ICAO NAT Doc 007 North Atlantic Operations and Airspace Manual, V.2023-1 (January 2023)
Attribution: showibonav.aerowherever this data is displayed
Data sources: FAA NOTAM Management Service, Ibosoft AIS Navdata.
Last updated: 17 OCT 2026About the reference documents: Related Documents and Resources
Depending on your use, the original data sources may also need to be credited.
The North Atlantic organized track system (NAT OTS) and the Pacific organized track system (PACOTS) as GeoJSON: each track as a line with its properties, and each track point as a labelled point. Updated every 30 minutes, on the hour and half hour.
NAT tracks come from the NAT track message; PACOTS tracks from the NOTAMs of Oakland (KZAK) and Fukuoka (RJJJ) — see NOTAM API. The two systems are updated independently. Positions of named points (5-letter fixes and aerodromes) come from the navigation data; a track with a point that cannot be found is left out.
Endpoints
{system} is nat-ots or pacots-ots.
| Endpoint | Description |
|---|---|
GET /ots-tracks/{system}/status |
Last fetch and last change (UTC) |
GET /ots-tracks/{system}/geojson |
Current tracks (GeoJSON) |
GET /ots-tracks/{system}/history |
Stored snapshots |
GET /ots-tracks/{system}/history/{snapshot} |
Tracks of one snapshot (GeoJSON) |
A new snapshot (YYYYMMDD_HHMM) is stored only when the tracks change; the last 24 snapshots of each system are kept.
How tracks are built
Every 30 minutes (at :00 and :30) both systems are fetched, independently and in parallel; a failure of one does not affect the other. A failed fetch is retried up to 5 times, one minute apart. The new result is compared with the last snapshot: last_fetched always moves on, last_updated and a new snapshot only when the tracks have changed.
Track points
Each point in a track's route is read as follows:
| Point in the message | Position |
|---|---|
Coordinate (62/20, 5730/20, 29N170W) |
Calculated from the text |
5-letter name (fix, e.g. ERAKA) |
Designated point of that name in the navigation data |
4-letter name (aerodrome, e.g. PHNL) |
Aerodrome with that ICAO location indicator in the navigation data |
Anything else (ATS routes such as OTR5, other words) |
Skipped |
If a fix or aerodrome is not found in the navigation data, the whole track is left out (it is not drawn with a gap or a guessed point). A track also needs at least two positioned points. The points are joined in message order; a line crossing ±180° is split there.
NAT OTS
The NAT track message is read part by part (a message can have several parts, e.g. PART 1 OF 3):
- the validity line (
valid) and the flight level band (fl-range) from the header of each part; - each track line — a track letter followed by its points (
C ERAKA 60/20 61/30 … URTAK); the lines after it until the next track giveEAST LVLS,WEST LVLS,EUR RTSandNAR; directionfrom the direction words inEUR RTS:EAST,WEST, both (BOTH) or none ("");- the REMARKS section (ends at "END OF PART"); remarks are published once, in the last part, and are copied to every track of every part of the same message.
PACOTS
The current international NOTAMs of Oakland (KZAK, series A) and Fukuoka (RJJJ, series Q) are read from item E. Two formats are recognized:
- TDM (Oakland) —
TRK <letter>followed by validity times and the points; the route ends atRTS/orRMK/, and the text afterRMK/isrmk. One NOTAM can hold several tracks.directionis empty. - Text format (Fukuoka) —
EASTBOUND/WESTBOUND …(→directionEAST/WEST), thenTRACK <n>.blocks with route lines (FLEX ROUTE :,JAPAN ROUTE :, …) andRMK :. Only the FLEX and JAPAN routes are drawn, each as its own track (track-label1 (FLEX),1 (JAPAN)); other route lines (e.g. to an aerodrome, NAR) are not.
location, notam-no, start-date and end-date come from the NOTAM.
Response
/status
{"source": "nat-ots", "last_fetched": "2026-04-18T15:30:00Z", "last_updated": "2026-04-18T13:00:00Z"}
| Field | Description |
|---|---|
last_fetched |
Last successful fetch, whether or not anything changed |
last_updated |
Last time the tracks changed |
/history
{"source": "nat-ots", "snapshots": ["20260417_1300", "20260417_1500", "20260418_1300"]}
Oldest first.
/geojson, /history/{snapshot}
A GeoJSON FeatureCollection (application/geo+json) with two kinds of feature per track:
- Track (
feature-type: "track") — aLineString, or aMultiLineStringwhen the track crosses the antimeridian (split exactly at ±180°, so there is no gap on the map). - Waypoint (
feature-type: "waypoint") — aPointfor each track point, withlabelandtrack-label.
Points given as coordinates are labelled in one format:
| System | In the message | label |
|---|---|---|
| NAT | 62/20 |
N62W20 |
| NAT | 5730/20 (degrees and minutes) |
N57.5W20 |
| PACOTS | 29N170W |
N29W170 |
| PACOTS | 42N160E |
N42E160 |
NAT points are always north and west. Minutes are shown as decimal degrees (57.5; no .0).
NAT track
{
"type": "Feature",
"geometry": {"type": "LineString", "coordinates": [[-10.0, 57.0], "…"]},
"properties": {
"feature-type": "track",
"track-label": "C",
"waypoints": ["ERAKA", "N60W20", "N61W30", "N61W40", "N60W50", "URTAK"],
"east-lvls": "NIL",
"west-lvls": "340 350 360 370",
"eur-rts": "WEST NIL",
"direction": "WEST",
"nar": "N882A N890B",
"originator": "EGGXZOZX",
"valid": "APR 17/1130Z TO APR 17/1900Z",
"fl-range": "FL340-390",
"msgno": "162026",
"rmk": ""
}
}
direction:EAST,WEST,BOTHor"", from the direction word in the EUR RTS line.rmk: a NAT message can come in parts (PART 1 OF 3 …); the remarks are published only in the last part and are copied to every track.
PACOTS track
Two message formats give the same properties:
{
"type": "Feature",
"geometry": {"type": "MultiLineString", "coordinates": [[[170.0, 29.0], "…"], [[-180.0, 32.0], "…"]]},
"properties": {
"feature-type": "track",
"track-label": "A",
"waypoints": ["DANNO", "FLYHM", "N29W170", "N32E180", "N35E170", "SEALS"],
"rmk": "TRK B NOT AVAILABLE",
"direction": "",
"location": "ZAK",
"notam-no": "A1875/26",
"start-date": "04/17/2026 1900",
"end-date": "04/18/2026 0800"
}
}
In the Fukuoka text format, track-label is <number> (FLEX) or <number> (JAPAN) (e.g. "1 (FLEX)") and direction is EAST or WEST; only FLEX and JAPAN routes are drawn.
Waypoint
{
"type": "Feature",
"geometry": {"type": "Point", "coordinates": [-20.0, 62.0]},
"properties": {"feature-type": "waypoint", "label": "N62W20", "track-label": "C"}
}
Errors
| Code | Meaning |
|---|---|
404 |
No data yet, or snapshot not found |