Guides · September 12, 2026 · 4 min read

Flight status codes explained: S, A, L, C, D, R and what phase they map to

The letter codes that airline status feeds use, what each one hides, how FlightByte turns them into a phase you can branch on, and how the same moments are named by aviationstack, AeroDataBox and AeroAPI.

Most airline status feeds describe a flight with a single letter. The letters are compact, stable, and older than JSON, and each one covers more ground than it looks. This guide is what they mean, what they leave out, and how a phase fills the gap.

The codes

CodeNameWhat it actually covers
SScheduledPublished and not yet departed. Includes flights that are delayed, boarding, or pushing back in a minute; S says nothing about any of that.
AActiveLeft the gate. Covers taxiing out, airborne, and on approach: the whole span between pushback and touchdown.
LLandedOn the ground at the destination. Covers taxiing in, at the gate, and bags on the belt.
CCancelledNot operating. Can be reversed, and occasionally is.
DDivertedLanded, or landing, somewhere other than the planned destination.
RRedirectedRe-routed to a different destination before landing, without the "emergency" flavour of a diversion. Rare.
UUnknownThe feed has no usable status. Common far ahead of departure and for flights the feed does not track live.
NONot operationalThe number exists in the schedule but did not operate on this date.
DNData neededThe feed is waiting on a source. Treated as cancelled in practice: nothing will arrive.

Three of these are ambiguous in a way that matters to anyone writing a notification. S includes "delayed". A includes "still on the taxiway" and "an hour from landing". L includes "not at the gate yet" and "bags on belt 7 twenty minutes ago". The code is where the aircraft was last filed, not what a passenger is experiencing.

What a phase adds

A phase is the code plus the times. FlightByte derives it like this:

CodePhaseDecided by
Sscheduled
AdepartedNo actual runway departure time yet: left the gate, not airborne.
Aen_routeAn actual runway departure time exists.
LlandedNo actual gate arrival time yet.
LarrivedAn actual gate arrival time exists.
C, DNcancelled
Ddiverted
Rredirected
U, NOunknownUnless the feed's live state says the aircraft is airborne, which yields en_route.

A boarding phase is reserved for feeds that report gate activity; most flights go from scheduled straight to departed.

Delay is deliberately not a phase. A flight forty minutes late is still scheduled, with status.delayed: true and departure.delayMinutes: 40. Two questions, two fields.

{
  "status": {
    "code": "A",
    "label": "Active",
    "phase": "departed",
    "delayed": true,
    "cancelled": false,
    "diverted": false,
    "departureGateDelayMinutes": 22
  }
}

code and label are the upstream's words, kept for display and debugging. phase is the enum; branch on it. See Flight phase for the full list and Flights → Phases in the reference.

The transitions worth an event

Most integrations do not care about every phase, only about four moments. FlightByte names them so a subscription can ask for just those:

EventFires when the phase becomes
flight.departeddeparted or en_route from anything earlier
flight.arrivedarrived
flight.cancelledcancelled
flight.diverteddiverted
flight.reinstatedanything from cancelled
status.changedanything else, including landed

To be told about touchdown specifically, subscribe to status.changed and read flight.status.phase in the delivery; the 20-minute guide does exactly that.

The same moments, in other vendors' words

If you are migrating, or reading two feeds at once, this is the table to keep open.

MomentFlightByte phaseaviationstackAeroDataBoxAeroAPI
Published, not departedscheduledscheduledExpected, CheckIn, Boarding, GateClosed"Scheduled"
Late, not departedscheduled + delayedscheduledDelayed"Delayed"
Left the gatedepartedactiveDeparted"Taxiing / Left Gate"
Airborneen_routeactiveEnRoute, Approaching"En Route"
On the runwaylandedlandedArrived"Landed / Taxiing"
At the gatearrivedlandedArrived"Arrived / Gate Arrival"
CancelledcancelledcancelledCanceled, CanceledUncertain"Cancelled"
DiverteddiverteddivertedDiverted"Diverted"
Nothing usableunknown—Unknown—

Two things the table shows. aviationstack's active and landed have the same two-in-one problem as A and L, so a migration from it gains a distinction it never had. AeroAPI's status is a sentence, useful to display and fragile to branch on; its actual_off and actual_on times are the reliable signal, which is the same trick the phase derivation uses.

A rule for any feed

Whatever the vocabulary, the actual times are the truth. A status that says "active" with no actual take-off time is a flight on the taxiway; a status that says "landed" with an actual gate time is a flight whose passengers are already walking. Branch on the times when the words are ambiguous, and let the phase do it for you when it can.

More guides

Get started

Watch your first flight tonight.

Nine dollars, a hundred flights, every event, signed. The receiver above is the whole integration.

A free key in a minute, no card. On a paid plan? Request a key