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: show ibonav.aero wherever this data is displayed
Data sources: FAA NOTAM Management Service, Ibosoft AIS Navdata.
Last updated: 17 OCT 2026

About 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 give EAST LVLS, WEST LVLS, EUR RTS and NAR;
  • direction from the direction words in EUR 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 at RTS/ or RMK/, and the text after RMK/ is rmk. One NOTAM can hold several tracks. direction is empty.
  • Text format (Fukuoka) — EASTBOUND / WESTBOUND … (→ direction EAST / WEST), then TRACK <n>. blocks with route lines (FLEX ROUTE :, JAPAN ROUTE :, …) and RMK :. Only the FLEX and JAPAN routes are drawn, each as its own track (track-label 1 (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:

  1. Track (feature-type: "track") — a LineString, or a MultiLineString when the track crosses the antimeridian (split exactly at ±180°, so there is no gap on the map).
  2. Waypoint (feature-type: "waypoint") — a Point for each track point, with label and track-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, BOTH or "", 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