✈︎ flightradar API

Open, read-only ADS-B flight data for the Helsinki-Vantaa (EFHK) approach corridor over Soukanlahti. CORS-open JSON, no key. Aggregated from community ADS-B feeds every ~25 s. There's also a daily GPS-interference overlay and an ADS-B ground-truth endpoint for sensor-fusion comparison. Map at flightradar.jaime.win.

Try: /api/health /api/stats /api/points /api/gps SKILL.md

Health

checking…
checking…

Endpoints

PathReturns
/api/healthLiveness + data freshness. 503 if the DB read fails or data is >30 min stale.
/api/statsAirborne counts, time span, altitude & speed ceilings, home + airport coords.
/api/pointsHeatmap points {points:[[lat,lon,w],…], count} (≤200k).
/api/tracksPer-flight polylines {tracks:[[[lat,lon],…]]}.
/api/rawFull rows {count, next, rows}, keyset-paginated via next → after.
/api/detectionsADS-B ground-truth in a sensor-fusion shape (metres/ENU) for a time frame. GET/POST.
/api/gpsGeoJSON GPS-interference hexes (gpsjam.org). ?day=YYYY-MM-DD optional.

Filters (shared by /points, /tracks, /raw)

ParamMeaning
altmin altmaxBarometric altitude, feet.
spdmin spdmaxGround speed, knots.
phaseclimb | descend | level (vertical rate, ±1 m/s dead-band).
callsignCase-insensitive prefix, e.g. FIN.
from toAbsolute window, unix seconds.
sinceRolling window, hours back from the newest row.
Units: filters take feet/knots, but the returned columns are metric. baro_alt/geo_alt come in metres, velocity/vrate in m/s. A jet at 40 000 ft reads baro_alt≈12192.

Examples

# Descending Finnair arrivals below 8000 ft, last 24 h
curl 'https://api.flightradar.jaime.win/api/points?callsign=FIN&phase=descend&altmax=8000&since=24'

# Bulk export; follow `next` until null
curl 'https://api.flightradar.jaime.win/api/raw?since=24&limit=50000'

ADS-B ground-truth: /api/detections

Returns the real aircraft (with identity) for a time frame, shaped like an RF sensor-fusion platform's response, so you can line ADS-B truth up against a sensor's own detections offline and score accuracy. This API only exposes ADS-B; it doesn't ingest sensor tracks, so the comparison runs in your tooling. Altitude comes in metres (WGS84), velocity m/s, radius km. Omit timestamp for the newest frame. Center the area on the airport, since the home point has no traffic.

# Aircraft within 15 km of the airport now, with local ENU
curl -X POST https://api.flightradar.jaime.win/api/detections \
  -H 'Content-Type: application/json' \
  -d '{"area":{"type":"radius","center":{"latitude":60.3172,"longitude":24.9633},"radius":15},"include_enu":true,"enu_reference":{"latitude":60.3172,"longitude":24.9633,"altitude":0}}'

Sample agent interaction (live, running now against this API)

An agent answering "how busy is the approach, and what's overhead right now?". Each step below runs a real request against this API as the page loads.

goal Quantify approach traffic over the corridor, then list what's near the airport now.