API · v1

Flight Tracking API

Real-time flight tracking in a single request — live status, schedule, route and aircraft for any flight worldwide, in a clean, well-structured JSON format.

Resolve a flight number to its live status, route, schedule, aircraft and gate information, returned as a simple JSON array. Typical response time is ~0.8 s. Get an API key to track your usage, or evaluate without one.

Base URL & authentication

https://flights.the-lab.ae

Your API key is passed as the first path segment:

/airline/<api_key>?num=...&name=...&date=...
API keys are optional. Requests are served with or without one — but when you supply a key issued from your console, each call is counted against that key's credits so you can see exactly what you use. Create a free key →

Response format

Every tracking response is a JSON array of four objects — departure, arrival, aircraft and status — in that order. Times are given both as a human string local to the airport and as an ISO-8601 timestamp with the airport's UTC offset. Fields that are not yet published are returned as null, never omitted, so the shape is always stable.

Flight tracking

GET/airline/<api_key>

Track a single flight for a given date.

Query parameters

ParamRequiredDescription
numrequiredFlight number, digits only (e.g. 72 for EK72).
namerequiredAirline code, IATA (EK) or ICAO (UAE).
dateoptionalTarget date, YYYYMMDD. Defaults to the active/next instance.
depapoptionalDeparture airport IATA. Disambiguates when the same flight number departs from different origins, including a multi-leg flight — selects the leg departing this airport.
Some flight numbers cover more than one leg — e.g. EK205 flies DXB → MXP → JFK. Identify a leg by its departure airport: depap=DXB returns DXB → MXP, and depap=MXP returns MXP → JFK.

Example request

curl "https://flights.the-lab.ae/airline/YOUR_KEY?num=72&name=EK&date=20260720"

Example response

[
  { "departure": {
      "offGroundTime": null,
      "outGateTime": null,
      "gate": null,
      "departureDateTime": "2026-07-20T11:30:00+02:00",
      "duration": "7 hr",
      "airport": "Charles de Gaulle",
      "airportCity": "Paris",
      "airportCode": "CDG",
      "airportCountryCode": "FR",
      "airportSlug": "CDG-Paris-France",
      "scheduledTime": "11:20, Jul 20",
      "estimatedTime": "11:30, Jul 20",
      "terminal": "2C"
  }},
  { "arrival": {
      "timeRemaining": null,
      "onGroundTime": null,
      "inGateTime": null,
      "gate": null,
      "baggage": null,
      "arrivalDateTime": "2026-07-20T20:20:00+04:00",
      "airport": "Dubai Int'l",
      "airportCity": "Dubai",
      "airportCode": "DXB",
      "airportCountryCode": "AE",
      "airportSlug": "DXB-Dubai-United-Arab-Emirates",
      "scheduledTime": "20:20, Jul 20",
      "estimatedTime": "20:20, Jul 20",
      "terminal": "3"
  }},
  { "aircraft": { "id": null, "code": "388", "name": "Airbus A380-800" } },
  { "status": "Delayed" }
]

Response object

A JSON array. Elements 1 and 2 are the departure and arrival legs; the aircraft and status objects follow.

departure / arrival

FieldTypeDescription
scheduledTimestringScheduled time, local to the airport — "HH:MM, Mon DD".
estimatedTimestringEstimated time, local.
departureDateTime
arrivalDateTime
stringISO-8601 with the airport's UTC offset.
outGateTime / inGateTimestring·nullActual gate out / in, when available.
offGroundTime
onGroundTime
string·nullActual wheels-up / wheels-down.
timeRemainingstring·nullTime to arrival while en route.
durationstring·nullScheduled block time (departure only).
airport / airportCitystringAirport name and city.
airportCodestringIATA code.
airportCountryCodestringISO-2 country code.
airportSlugstringURL-friendly CODE-City-Country.
terminal / gatestring·nullTerminal / gate, when published.
baggagestring·nullArrival baggage belt (arrival only).

aircraft

FieldTypeDescription
codestring·nullType code (e.g. 388, 77W).
namestring·nullFull type name (e.g. Airbus A380-800).
idnullPresent for compatibility; not populated.

Status values

The status field reflects the live state of the flight:

ValueMeaning
ScheduledFuture flight on schedule, or an upcoming date served from the projected schedule.
In AirDeparted and currently airborne.
ArrivedLanded.
DelayedEstimated departure is 15+ minutes behind schedule (before departure).
CancelledFlight cancelled.
DivertedDiverted from its planned destination.
Other airline dispositions (e.g. Rescheduled) are passed through as reported. A future/upcoming date served from the projected schedule always returns Scheduled, since there is no live data yet.

Dates & data

The same endpoint answers for past, present and future dates — the data behind it adapts:

WhenWhat you get
Today / near-termLive status and times — actual gate-out/off, estimates, gate and terminal.
PastThe final record: actual departure/arrival times and terminal status (Arrived, Cancelled, Diverted…). Completed flights are cached, so repeat lookups are instant.
UpcomingThe scheduled times. For dates beyond the published window, the recurring schedule is projected from recent history (weekday-aware) and returned as Scheduled. If a flight does not operate on the requested day, a 400 is returned (see Errors).
Projected upcoming times are an estimate of the recurring schedule and may differ by a few minutes from a later timetable change; the route, aircraft and weekday pattern are accurate.

Health

GET/health
{ "status": "ok", "service": "flights.the-lab.ae", "ts": 1784540431 }

Errors

Errors return a small JSON object with a message and success: false, and an appropriate HTTP code.

CodeWhen
400Missing num/name, the flight/date could not be resolved, or the flight does not operate on the requested date.
401Unknown API key (only when enforcement is enabled).
404Unknown path.

Bad flight/date:

{
  "message": "Either your date is wrong or airline code is wrong. Please verify the flight number and date.",
  "success": false
}

Requested a date the flight does not operate:

{
  "message": "No scheduled flight found for this flight number on that date.",
  "success": false
}

Notes & limits

Live results are cached briefly (~60 s per flight) and completed past flights are cached permanently, so repeat lookups are near-instant.

Keep request volume proportional to real user searches rather than continuous polling. Fields that are not published are returned as null, never omitted, so the response shape is always stable. Times are local to each airport, plus an ISO-8601 timestamp with the airport's UTC offset. Typical latency ~0.8 s. CORS is open (Access-Control-Allow-Origin: *).

flights.the-lab.ae · Flight Tracking API v1console