Skip to main content
Base URL: https://data.flightportrait.com No API key, no account. Rate limits are per IP over a 600 second window; a 429 carries Retry-After in seconds. Wait that long. Data is ODbL 1.0. Credit “FlightPortrait network feeders” and link back. Licenses. Terms.
New here: API quickstart, three calls in four languages.

The rules of the road

  • A live snapshot older than 60 seconds returns 503, never an empty sky. A missing history artifact returns 503 too, never a 404 that would claim the aircraft was not seen.
  • Every error is {"error": "<code>", "detail": "<text>"}. The codes: not_found, not_observed, invalid_request, rate_limited, stale_snapshot, artifact_unavailable, unavailable, method_not_allowed, internal_error.
  • Operations marked stable in the spec only ever gain fields. Operations marked map exist for the map and can change with it.
  • /v1/aircraft and /v2/point speak readsb’s wire dialect (hex, t, r, gs). Everything else uses full words (reg, type, org, dst).
  • Everything is observation, with one marked exception: /v1/estimated serves positions placed by the estimator, each with "estimated": true and its last observed position, and never mixes them into /v1/aircraft or history. Gaps mean the network’s sources did not hear it, nothing more.

A polite client

Poll /v1/aircraft every 10 seconds or slower; the edge caches for 10 seconds, so polling faster returns the same body. History and reference responses cache for an hour. Budgets are per route and generous for any client that is not scraping. Spec: openapi.json. Feed the network.