Developer documentation
The same live feed behind every Mach 2, for your own code. Read the aircraft over any point on earth, follow a single flight gate-to-gate, and pull a live departure board — one key, plain JSON over HTTPS, no SDK required.
The feed pairs the airplanes.live ADS-B network with our route engine — a data layer the two of us developed together. You get positions at radio speed and routes already resolved; how the sausage is made stays our problem, not yours.
Authentication
Every request carries a bearer key in the Authorization header — including playground calls on this page. Email us for a trial key (self-serve keys in the owner portal are coming); paid plans get production keys per app or environment so you can revoke them independently.
$ curl https://data.flighttrackerled.com/v1/flights/overhead \ -H "Authorization: Bearer ftl_live_9x2kq7hd41m8"
Keys are shown once at creation. Treat them like passwords: call the API from your server, never from client-side code — a key in a browser bundle is a key you’ve published. A missing or revoked key returns 401 unauthorized.
Rate limits
Every key gets 60 requests per minute. Overhead snapshots are rebuilt about every 5 seconds server-side, so polling faster just returns the same snapshot — a 5–10 second interval is the sweet spot.
X-RateLimit-LimitYour per-minute ceiling (60).X-RateLimit-RemainingRequests left in the current window.X-RateLimit-ResetUnix time the window resets.Past the limit you get a 429 with retry_after in seconds. Need a higher ceiling? The Fleet plan lifts it to 300 requests per minute, pooled across your keys.
Plans & pricing
The API is licensed for commercial use — two flat plans, no metering surprises, cancel monthly. Every plan includes all three endpoints, the playground, and keys managed in the owner portal.
Builder
- Commercial license for one product
- All endpoints — overhead, flights, departures
- 60 requests / minute
- 2 production keys
- Email support
Fleet
- Everything in Builder
- 300 requests / minute, pooled
- Up to 10 keys across apps & environments
- 99.9% uptime target
- Priority support · new endpoints first
Building something bigger — resale, embedded hardware, or a use the plans don’t cover? Write us and we’ll work it out.
GET/v1/flights/overhead
Overhead scanner
The live aircraft over a point, exactly as the Mach 2 sees them. Give it a coordinate and a radius, get every aircraft inside the circle — ident, resolved route, altitude, ground speed, and distance from your point, nearest first.
Query parameters
latnumberREQUIREDLatitude of the center point, −90 to 90.lonnumberREQUIREDLongitude of the center point, −180 to 180.radius_miintegeroptionalScan radius in statute miles, 1–100. Default 15.alt_min_ftintegeroptionalIgnore aircraft below this barometric altitude.alt_max_ftintegeroptionalIgnore aircraft above this altitude.dirstringoptionalHeading filter, e.g. 240-300 — only aircraft tracking within the arc.Response
countAircraft in the snapshot.freshness_sAge of the snapshot in seconds — usually under 5.flights[].identCallsign or registration.flights[].routeResolved origin → destination, or local for pattern work.flights[].alt_ftBarometric altitude, feet.flights[].gs_ktGround speed, knots.flights[].dist_miDistance from your point, statute miles.flights[].sourcenetwork, or local_adsb when the reading came off your own receiver (v1.5.4+).GET/v1/flights/{ident}
Track a flight
One flight, gate to gate. Pass a flight number (UA970, DL2214) or a tail number (N425PC) and follow it from pushback to arrival — schedule against actuals, live position, and how far along it is.
Response
identNormalized callsign.statusscheduled · taxiing · enroute · landed · cancelledaircraftICAO type designator, e.g. B77W.originiata, scheduled and actual departure times.destinationiata and current eta.positionLat/lon, altitude, ground speed — live while enroute.progress_pctHow far along the route, 0–100.A flight that isn’t operating today returns 404 not_found — check the ident, or try the registration instead.
GET/v1/airports/{iata}/departures
Departure board
The Departure Board scene, as JSON: upcoming departures for an airport with schedule, gate, and live status — ready to render on anything from a dashboard to a lobby screen.
Query parameters
airlinestringoptionalICAO airline filter, e.g. UAL.limitintegeroptionalRows to return, 1–50. Default 10, soonest first.Response
airportEchoed IATA code.departures[].identFlight callsign.departures[].destDestination IATA.departures[].schedScheduled departure, airport-local time.departures[].gateGate, when the airport publishes one.departures[].statuson_time · boarding · delayed · departed · cancelledPlayground
Fire a real overhead scan — the exact request the docs describe, against the live API, using the key from the sidebar. No key yet? Ask for a trial key, or run it keyless to see a clearly-marked simulated response.
Whatever the playground returns also lights up the LED panel at the bottom of the page.
# Press “Send request” to scan the sky around that point.
Errors
Errors are JSON with a stable code and a human message; the HTTP status matches the code. Retry 429 and 503 after the wait — everything else means the request needs fixing.
400invalid_requestA parameter is missing or out of range — the message names it.401unauthorizedMissing, malformed, or revoked API key.404not_foundFlight not active today, or unknown airport code.429rate_limitedOver 60 req/min — wait retry_after seconds.503snapshot_unavailableThe upstream feed is rebuilding — retry in a few seconds.Changelog
Added source on overhead aircraft — local_adsb entries come straight off your own receiver at ~1-second freshness.
New /airports/{iata}/departures endpoint with gate and status fields — the Departure Board, as JSON.
Heading filters (dir) on overhead scans; progress_pct on tracked flights.
2,048 pixels, same as the box on your desk — and it’s rendering the last API response on this page, the way a Mach 2 would. Run the playground and watch it pick up your flights; click the panel to cycle LED colors. Data by airplanes.live × FlightTrackerLED · © 2026