Skip to content
Documentation · Limits and errors

Limits and errors

API limits per plan (per minute, per month, radius, how far back the flight history goes), how they're counted, the X-FIA-* headers, and what to do about 400-429 errors and Cloudflare blocks.

Updated

PlanPrice (before tax)Requests/minuteRequests/monthMaximum radiusFlight historyTracksOverflightsEmergenciesArea alertsWatched aircraft
Freefree30300,000500 km7 days7 days————
Starter€9/month601,000,0001,000 km14 days30 days10 km, 6 h24 h1—
Pro€49/month30010,000,000no limit30 days90 days50 km, 24 h7 days5—
Fleet€149/month30010,000,000no limit90 dayssince 202250 km, 24 h7 days525

The Free plan also has a cap of 100 requests per minute per IP.

How requests count

  • Every request counts as one, whatever the endpoint, including those made by MCP tools. A lookup of up to 50 aircraft in one request counts as one too.
  • Limits are per key: requests from all your servers and devices count together, from any IP.
  • The Free plan also has a limit of 100 requests per minute per IP.
  • The monthly counter resets on the 1st.
  • A request refused for a limit is not counted, and nothing is billed beyond the plan.
  • How far back the flight history go depends on the plan too (table above). A Free key with the feeder perk gets Pro’s 30 days.
  • How many aircraft the account can watch for takeoff and landing alerts depends on the plan too (table above). Managing them (/v2/watch) and the webhooks (/v2/webhooks) is not counted: at most 20 calls a minute per key.
  • The extras depend on the plan too (table above): how far back the tracks go, overflights, emergencies and notable aircraft, the runway in use and how many area alerts. Overflights, emergencies and the runway start from Starter. A Free key with the feeder perk has Pro’s features.

Every answer reports your state in its headers:

HeaderValue
X-FIA-Planthe key’s plan (free, starter, pro, fleet, feeder)
X-FIA-Limit-Per-Minthe plan’s requests per minute
X-FIA-Quota-Monththe plan’s requests per month
X-FIA-Used-Monththe ones used this month

Errors

The body is always JSON with an error field. On 401, 403 and 429 there is also help, the link to the answer in the FAQ; the observed-flights 403 has docs and plans instead, and the watched-aircraft errors have docs (and plans on the 403 of /v2/watch).

CodeWhenWhat to do
400invalid parameters (lat/lon/dist must be numeric, icao must be a 6-character hex address, date must be YYYY-MM-DD)fix the request
400an invalid list option: an unknown name in fields (with allowed and presets), a with other than route, more than 50 comma-separated values, a /box with edges out of range or in the wrong order, since not in Unix secondsfix the request; it is not counted
401missing or invalid X-Api-Keycheck the header and the key; a regenerated key replaces the old one
403radius above the plan’s maximum, with max_radius_km; also a /box whose half-diagonal is above itshrink the radius or the box, split the area into several requests, or upgrade
403code: "flights-depth": flight history further back than the plan allows, with max_days and requested_daysask for more recent days, or choose a plan that goes further back
403code: "plan-feature": a feature the plan does not include, with feature (overflights, events, runways) and planchoose a plan that includes it (table above); not counted
403code: "tracks-depth": tracks further back than the plan allows, with max_days and requested_daysask for a more recent day or choose a plan with longer tracks; not counted
403code: "events-depth": emergencies and notable aircraft further back than the plan allows, with max_hours and requested_hoursshorten since or choose a plan that goes further back; not counted
400code: "aircraft-invalid": an aircraft in /v2/watch that is not an ICAO address, a registration or a callsignfix it; nothing in the request is added
403code: "watch-plan-required": watching aircraft, or a takeoff and landing webhook, on a plan without watched aircraftchoose Fleet; listing and removing work on any plan
409code: "watch-limit": more watched aircraft than the plan allows, with max, count and addingremove some first, or get in touch for more; nothing in the request is added
409code: "area-webhook-limit": more area alerts than the plan allows, with max_arearemove one first or choose a plan with more alerts
404not found: the aircraft isn’t seen right now; tried, hint and, when there is one, last_seen say whycheck the form of the callsign, or look at its flight history
429too many requests per minute (header Retry-After) or the month’s quota is used up (with resets)wait Retry-After seconds; for the quota, next month or a bigger plan
503service temporarily unavailable; on the runway in use, runway data is not available yet until its data is loadedretry with a growing delay

Blocked by Cloudflare

If you get an HTML page instead of JSON (“Sorry, you have been blocked”, “Attention Required”, code 1010 or 1020), the request was stopped before the API.

  1. Always send X-Api-Key: requests to /v2/ without a key are refused upstream.

  2. Use a User-Agent of your own, e.g. your app’s name.

  3. If it goes on, write to [email protected] with:

    • the CF-Ray ID at the bottom of the error page;
    • the date and time (UTC);
    • the endpoint.

    With those we can find the rule that stopped you.