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=...
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
Track a single flight for a given date.
Query parameters
| Param | Required | Description |
|---|---|---|
| num | required | Flight number, digits only (e.g. 72 for EK72). |
| name | required | Airline code, IATA (EK) or ICAO (UAE). |
| date | optional | Target date, YYYYMMDD. Defaults to the active/next instance. |
| depap | optional | Departure airport IATA. Disambiguates when the same flight number departs from different origins, including a multi-leg flight — selects the leg departing this airport. |
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
| Field | Type | Description |
|---|---|---|
| scheduledTime | string | Scheduled time, local to the airport — "HH:MM, Mon DD". |
| estimatedTime | string | Estimated time, local. |
| departureDateTime arrivalDateTime | string | ISO-8601 with the airport's UTC offset. |
| outGateTime / inGateTime | string·null | Actual gate out / in, when available. |
| offGroundTime onGroundTime | string·null | Actual wheels-up / wheels-down. |
| timeRemaining | string·null | Time to arrival while en route. |
| duration | string·null | Scheduled block time (departure only). |
| airport / airportCity | string | Airport name and city. |
| airportCode | string | IATA code. |
| airportCountryCode | string | ISO-2 country code. |
| airportSlug | string | URL-friendly CODE-City-Country. |
| terminal / gate | string·null | Terminal / gate, when published. |
| baggage | string·null | Arrival baggage belt (arrival only). |
aircraft
| Field | Type | Description |
|---|---|---|
| code | string·null | Type code (e.g. 388, 77W). |
| name | string·null | Full type name (e.g. Airbus A380-800). |
| id | null | Present for compatibility; not populated. |
Status values
The status field reflects the live state of the flight:
| Value | Meaning |
|---|---|
| Scheduled | Future flight on schedule, or an upcoming date served from the projected schedule. |
| In Air | Departed and currently airborne. |
| Arrived | Landed. |
| Delayed | Estimated departure is 15+ minutes behind schedule (before departure). |
| Cancelled | Flight cancelled. |
| Diverted | Diverted from its planned destination. |
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:
| When | What you get |
|---|---|
| Today / near-term | Live status and times — actual gate-out/off, estimates, gate and terminal. |
| Past | The final record: actual departure/arrival times and terminal status (Arrived, Cancelled, Diverted…). Completed flights are cached, so repeat lookups are instant. |
| Upcoming | The 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). |
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.
| Code | When |
|---|---|
| 400 | Missing num/name, the flight/date could not be resolved, or the flight does not operate on the requested date. |
| 401 | Unknown API key (only when enforcement is enabled). |
| 404 | Unknown 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
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: *).
