Real-time tracking API

Position API

A Node.js / TypeScript API for the latest known position of vessels (AIS / MarineTraffic) and aircraft (ADS-B Exchange). JSON responses, no API key required.

Features

Everything you need to locate a moving target.

🚒 Vessel positions

Latest location for any ship by MMSI, sourced from MarineTraffic AIS.

✈️ Aircraft positions

Latest location for any aircraft by ICAO hex address via ADS-B Exchange.

πŸ—ΊοΈ Area & port queries

List vessels in a region, near a coordinate, or inside a named port.

πŸ€– Agent-ready

A /llms.txt spec lets LLMs call the API correctly.

API endpoints

All endpoints are read-only HTTP GET and return JSON.

Vessel & aircraft

GET /ais/mt/:mmsi/location/latest

Latest position for a vessel by MMSI (MarineTraffic).

curl http://localhost:5000/ais/mt/211879870/location/latest
GET /adsb/adsbe/:icao/location/latest

Latest position for an aircraft by ICAO hex address (ADS-B Exchange).

curl http://localhost:5000/adsb/adsbe/abc123/location/latest

Response shape

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
  }
}

On failure, error holds a message and data is null. altitude is present for aircraft only.

Getting started

Run it locally in under a minute.

  1. Clone & install β€” npm install (Node.js v18+).
  2. Configure β€” cp .env.template .env and adjust as needed.
  3. Run β€” npm start for production, or npm run dev for auto-reload.
  4. Call it β€” the server listens on port 5000 by default.