Historical flight status API

The flight already left.
Know exactly what happened.

A historical flight status API: query any past flight by number and date and get actual block times, aircraft and arrival delay — resolved into a single, boring, dependable record.

VY6615 · LGW→AGP · Landed +25mTK1990 · LHR→IST · Landed +4mBA2573 · BOD→LGW · Landed +81mU27552 · AMS→SEN · Landed +48mU22465 · LTN→LIS · Landed +52mMK53 · LGW→MRU · Landed +37mEW474 · CGN→LGW · Landed +4mVY6628 · BCN→LGW · Landed +74mVY6634 · LGW→BIO · Landed +58mBA2591 · VRN→LGW · Landed +27mVY6615 · LGW→AGP · Landed +25mTK1990 · LHR→IST · Landed +4mBA2573 · BOD→LGW · Landed +81mU27552 · AMS→SEN · Landed +48mU22465 · LTN→LIS · Landed +52mMK53 · LGW→MRU · Landed +37mEW474 · CGN→LGW · Landed +4mVY6628 · BCN→LGW · Landed +74mVY6634 · LGW→BIO · Landed +58mBA2591 · VRN→LGW · Landed +27mVY6615 · LGW→AGP · Landed +25mTK1990 · LHR→IST · Landed +4mBA2573 · BOD→LGW · Landed +81mU27552 · AMS→SEN · Landed +48mU22465 · LTN→LIS · Landed +52mMK53 · LGW→MRU · Landed +37mEW474 · CGN→LGW · Landed +4mVY6628 · BCN→LGW · Landed +74mVY6634 · LGW→BIO · Landed +58mBA2591 · VRN→LGW · Landed +27mVY6615 · LGW→AGP · Landed +25mTK1990 · LHR→IST · Landed +4mBA2573 · BOD→LGW · Landed +81mU27552 · AMS→SEN · Landed +48mU22465 · LTN→LIS · Landed +52mMK53 · LGW→MRU · Landed +37mEW474 · CGN→LGW · Landed +4mVY6628 · BCN→LGW · Landed +74mVY6634 · LGW→BIO · Landed +58mBA2591 · VRN→LGW · Landed +27mVY6615 · LGW→AGP · Landed +25mTK1990 · LHR→IST · Landed +4mBA2573 · BOD→LGW · Landed +81mU27552 · AMS→SEN · Landed +48mU22465 · LTN→LIS · Landed +52mMK53 · LGW→MRU · Landed +37mEW474 · CGN→LGW · Landed +4mVY6628 · BCN→LGW · Landed +74mVY6634 · LGW→BIO · Landed +58mBA2591 · VRN→LGW · Landed +27mVY6615 · LGW→AGP · Landed +25mTK1990 · LHR→IST · Landed +4mBA2573 · BOD→LGW · Landed +81mU27552 · AMS→SEN · Landed +48mU22465 · LTN→LIS · Landed +52mMK53 · LGW→MRU · Landed +37mEW474 · CGN→LGW · Landed +4mVY6628 · BCN→LGW · Landed +74mVY6634 · LGW→BIO · Landed +58mBA2591 · VRN→LGW · Landed +27m

Live console

Real archived records, replayed exactly as the endpoint returns them.

Query your own flight

Read-only replay of archived records · sign in to run a query

VY6615
2026-08-24DELAYED

Departure

LGW

LGW (LGW)

Scheduled09:10Z
Estimated
Actual09:53Z
Delay43 min late
Block time2:42
Cached record+0h 25min

Arrival

AGP

AGP (AGP)

Scheduled12:10Z
Estimated
Actual
Delay25 min late

Aircraft

A320 EC-MES

Registration

EC-MES

Record

Historical

0 ms · 2026-08-28 15:33Z

Process

Three steps, zero ambiguity

Step 01

Name the flight

Enter the carrier code and number — LH400, BA249, UA935. The parser normalizes spacing and case for you.

Step 02

Pick the date

Any past departure date. The query resolves against the historical archive, not the live schedule.

Step 03

Read the record

Actual departure and arrival, block time, aircraft and delay — returned as one immutable record.

Built like an instrument panel

01

Every leg, on record

Scheduled versus actual on both ends, aircraft, registration and carrier for each historical departure and arrival.

02

One query shape

Flight number plus a date. No airport codes, no carrier lookup tables, no pagination games.

03

Sealed resolve

You send a number and a date. You get a settled record. How we produce it stays ours — not a vendor list, not a walkthrough.

04

Built for audits

Settled records are frozen in Postgres with delay math included, ready for claims, invoicing and reconciliation.

API

One request, one record

The console on this page is the product. Send the same query with your key and you get one resolved record back — no SDK, no vendor accounts, no pagination.

Idempotent historical queries
Delay math resolved server-side
Typed FlightStatusResponse payload

lookup.sh

# resolve a settled flight
curl -sS 'https://flight-api.dev/api/v1/flights/status\
  ?flightNumber=LH400&flightDate=2026-03-12'\
  -H 'x-api-key: flt_…'

# → 200
{
  "selected": { "status": "delayed", "delayMinutes": 74 },
  "meta": { "cached": true }
}

Popular queries

Routes people look up most

1,240

Carriers

9,800

Airports

10 yrs

History

Sealed

Resolver

FAQ

Fine print, upfront

How far back does the archive go?

Roughly 10 years of departures and arrivals, across 1,240 carriers and 9,800 airports. Once a flight is more than three UTC days old and ended in a disruption, we freeze the record — so the answer you query today matches what you queried last quarter.

How is a record resolved?

A closed resolver we own. One request, one record. Internals are not part of the contract and do not ship in the payload.

What counts as a delay?

We compute drift on both ends: actual versus scheduled for departure and arrival. The headline delay is the arrival drift in minutes, which is what most compensation and audit rules reference.

Is this for live tracking?

No — deliberately. Flights inside the three-day settle window are resolved live but never cached, and a flight still in the air returns a clean not_found until the record finalizes.

Ready when you are

Start with one flight.

Create an account, mint a key and resolve your first record in a single request.

Get access