Latest known position of vessels (AIS / MarineTraffic) and aircraft (ADS-B Exchange). JSON, no API key. Live β hosted instance below.
All endpoints are read-only HTTP GET and return JSON β no query parameters, headers or keys. Vessels are keyed by MMSI (9-digit Maritime Mobile Service Identity); aircraft by ICAO 24-bit hex address. A machine-readable spec for agents lives at /llms.txt.
The chart page never calls this API directly: the browser hits the tile server's
/tiles/vessel/positions proxy, and the tile server's background poller also fetches the whole whale fleet
every minute, 24/7, for sighting inference. Both paths call
/legacy/getLastPositionFromVF/{mmsi} on the hosted server above. Live counters from
/tiles/vessel/stats, refreshed every 30 s:
curl "http://20260602-vessel-position-api.206.116.247.141.sslip.io/ais/mt/211879870/location/latest"
curl "http://20260602-vessel-position-api.206.116.247.141.sslip.io/adsb/adsbe/abc123/location/latest"
Every position endpoint returns the same envelope:
{
"error": null,
"data": {
"timestamp": "2026-06-02T12:34:56Z",
"latitude": 53.5413,
"longitude": 9.9846,
"course": 187.4,
"speed": 12.1,
"source": "marinetraffic",
"source_type": "ais",
"altitude": null
}
}
| Field | Meaning |
|---|---|
error | Message string on failure, otherwise null (then data is null). |
timestamp | UTC time of the report β always check this before treating a position as current. |
latitude / longitude | Decimal degrees. |
course / speed | Course over ground (Β°) and speed (knots). |
source / source_type | e.g. marinetraffic / ais, or adsbexchange / adsb. |
altitude | Present for aircraft only; null for vessels. |