Every airport and every airline has two codes, issued by two organisations for two audiences.
| IATA | ICAO | |
|---|---|---|
| Issued by | International Air Transport Association, the airlines' trade body | International Civil Aviation Organization, the UN agency |
| Airport | Three letters: IST, LHR, JFK | Four letters, the first one or two say where in the world: LTFM, EGLL, KJFK |
| Airline | Two characters, sometimes a digit: TK, BA, 3U | Three letters: THY, BAW, CSC |
| Flight ident | TK1848 | THY1848 |
| Where you see it | Tickets, boarding passes, airport boards, booking sites | Flight plans, air traffic control, ADS-B feeds, tracking sites |
IATA codes are the ones passengers know, and the ones FlightByte takes as input. ICAO codes are unambiguous in a way IATA codes are not: two-letter airline codes are reused after an airline folds, and a few are shared between carriers in different regions, which is why tracking-oriented APIs prefer the ICAO ident.
In FlightByte
Lookups and subscriptions take the IATA airline code and flight number: TK and 1848. The origin and destination leg selectors take an IATA airport code, and also accept the code the data upstream uses when it differs (Istanbul Airport is IST to IATA and appears as ISL in some feeds; both resolve to the same leg). Airport objects in the snapshot carry both codes, and the carrier carries both plus its name:
{
"carrier": { "iata": "TK", "icao": "THY", "name": "Turkish Airlines" },
"departure": { "airport": { "iata": "ATH", "icao": "LGAV", "name": "Athens International Airport" } }
}Store the ICAO codes when you need a key that will not be reused; show the IATA ones to people. Details of the lookup path are in Flights → Looking a flight up.