ICAO 24-bit address explained. How the ICAO24 hex code works, how to decode aircraft transponder codes, country allocation blocks, Mode S address structure and how to look up aircraft by hex code in a flight data API.
The ICAO 24-bit aircraft address is a globally unique identifier assigned to every civil aircraft in the world. Defined by the International Civil Aviation Organization, it consists of 24 binary bits — written as a 6-character hexadecimal value such as A9D286, 400936 or 3C6745. Every transponder-equipped aircraft broadcasts this code as part of its Mode S and ADS-B transmissions, and every flight tracking system uses it to correlate live position data with aircraft records.
Unlike the tail number painted on the aircraft, which can change if the aircraft is re-registered, the ICAO24 hex code is permanent for the lifetime of the registration. Unlike the flight number, which changes with every leg, the hex code identifies the physical airframe regardless of which route it is flying. This makes the ICAO24 the most reliable identifier for connecting an aircraft to its operational data, its maintenance history and its real-time position.
For developers working with ADS-B data feeds, aviation tracking platforms, MLAT receivers or flight data APIs, the ICAO24 hex is often the primary key in the aircraft database. This guide explains how the 24-bit address system works, how country allocations are structured, and how to look up aircraft by hex code through the AirLabs platform.
"The ICAO 24-bit address is the closest thing aviation has to a universal aircraft serial number. Every transponder broadcasts it, every tracking system reads it, and unlike tail numbers it cannot be changed by simply repainting the aircraft."
The address is 24 binary bits, which yields 2^24 = 16,777,216 possible combinations. Written in hexadecimal (the most common representation), it is always exactly 6 characters using digits 0–9 and letters A–F. Leading zeros are preserved — 004D2A is a valid address, as is FFFFFF.
The total address space is divided into blocks assigned to individual countries. When an aircraft is registered in a country, the national civil aviation authority assigns it a hex code from its allocated block. This means the first few characters of the hex code reveal the country of registration — even before you look up any other identifier.
For example, a hex code starting with A is registered in the United States. A hex code starting with 40 to 43 is registered in the United Kingdom. A hex code starting with 3C to 3F is registered in Germany. The full allocation table covers every ICAO contracting state, with larger countries receiving larger blocks proportional to their fleet size.
The address itself is broadcast continuously by the aircraft's Mode S transponder, included in every ADS-B Out message, and used by ground-based and satellite-based tracking systems to identify which aircraft is generating each position report. When you see a flight tracker map showing dozens of aircraft moving in real time, every dot on that map is keyed by an ICAO24 hex code in the underlying data.
The hex code's first characters identify the country of registration. Here are the allocation blocks for some of the largest aviation markets:
| Country | Hex Range | First Characters | Examples |
| United States | A00001–AFFFFF | Starts with A |
A9D286, AAB812 |
| United Kingdom | 400000–43FFFF | Starts with 40–43 |
400936, 4234C2 |
| France | 380000–3BFFFF | Starts with 38–3B |
3946C7, 39B5E1 |
| Germany | 3C0000–3FFFFF | Starts with 3C–3F |
3C6745, 3D5F22 |
| Spain | 340000–37FFFF | Starts with 34–37 |
3441A0 |
| Italy | 300000–33FFFF | Starts with 30–33 |
31C8D5 |
| Canada | C00000–C3FFFF | Starts with C0–C3 |
C04123 |
| Australia | 7C0000–7FFFFF | Starts with 7C–7F |
7C7B5A |
| Japan | 840000–87FFFF | Starts with 84–87 |
86B6D4 |
| China | 780000–7BFFFF | Starts with 78–7B |
7805C3 |
| Russia | 100000–1FFFFF | Starts with 10–1F |
152C18 |
| Brazil | E40000–E7FFFF | Starts with E4–E7 |
E4123F |
| United Arab Emirates | 896000–896FFF | Starts with 896 |
8964D2 |
| India | 800000–83FFFF | Starts with 80–83 |
80A4E0 |
This allocation is published and maintained by ICAO in Annex 10 to the Chicago Convention. For developers, the practical implication is that any application that handles hex codes can derive country of registration directly from the hex prefix without making a database lookup — though for full aircraft details a proper data source is still needed.
The AirLabs Fleets Database returns both the hex field and the flag field (ISO 2-letter country code) in every aircraft record, so applications can rely on the explicit country code rather than parsing the hex prefix:
{
"hex": "A9D286",
"reg_number": "N732AN",
"flag": "US",
"airline_iata": "AA"
}
The flag: "US" matches the A prefix of the hex code — as expected, since this is a US-registered aircraft.
Every aircraft has multiple identifiers, and developers building aviation applications need to understand which is appropriate for which use case:
| Identifier | What It Identifies | Permanence | Example |
| ICAO 24-bit hex | The physical airframe | Lifetime of registration | A9D286 |
| Tail number (registration) | The physical airframe | Until re-registered | N732AN |
| Manufacturer Serial Number (MSN) | The physical airframe | Permanent — never changes | 31549 |
| IATA flight number | A scheduled service | Per flight, per day | BA117 |
| ICAO flight code | A scheduled service | Per flight, per day | BAW117 |
The first three identifiers all refer to the same physical aircraft, but they differ in permanence. The MSN is the most permanent — assigned at the factory and never changes throughout the aircraft's life. The hex code is permanent for the registration; if the aircraft is sold to an operator in another country and re-registered, the hex code changes to a code from the new country's allocation block. The tail number can also change when the aircraft is re-registered.
For real-time tracking systems, the hex code is the natural identifier because it is what the aircraft actually broadcasts. ADS-B receivers do not see tail numbers in the air — they receive hex codes, then look up associated metadata from a database. This makes the hex code the primary key in any ADS-B data pipeline.
For tail number lookup and tail number history, see our guide on Aircraft Tail Numbers Database.
The AirLabs Fleets Database supports lookup by hex code as a primary identifier. A single API call returns the complete aircraft record:
GET https://airlabs.co/api/v9/fleets?hex=A9D286&api_key={KEY}
[{
"hex": "A9D286",
"reg_number": "N732AN",
"flag": "US",
"airline_icao": "AAL",
"airline_iata": "AA",
"icao": "B77W",
"iata": "77W",
"model": "Boeing 777-300ER pax",
"engine": "jet",
"engine_count": "2",
"manufacturer": "BOEING",
"type": "landplane",
"category": "H",
"built": 2015,
"age": 11,
"msn": "31549",
"line": "1257"
}]
In a single response, the hex code is resolved to the registration number, country, operating airline, aircraft type, manufacturer, engine specification, manufacturing year, age and serial number. This is exactly the information an ADS-B tracker, MLAT receiver or aviation analytics platform needs to enrich raw position data.
The Real-Time Flights API also accepts the hex code as a filter — useful when you have a hex from an ADS-B feed and need to find the current flight that aircraft is operating:
GET https://airlabs.co/api/v9/flights?hex=A9D286&api_key={KEY}
[{
"hex": "A9D286",
"reg_number": "N732AN",
"flag": "US",
"lat": 40.6413,
"lng": -73.7781,
"alt": 10972,
"dir": 270,
"speed": 845,
"flight_iata": "AA100",
"flight_icao": "AAL100",
"dep_iata": "JFK",
"arr_iata": "LHR",
"airline_iata": "AA",
"aircraft_icao": "B77W",
"status": "en-route"
}]
This returns the current operational state of the aircraft: where it is right now (latitude, longitude, altitude), what direction it is flying, what flight number it is operating, and the route. The combination of the Fleets Database (static aircraft details) and the Real-Time Flights API (live operational data), both keyed by hex code, provides the complete picture for any aircraft.
The hex code is the universal aircraft identifier across aviation data systems. Each industry uses it differently:
Open and commercial ADS-B aggregators collect transponder broadcasts from thousands of ground-based receivers. Every position report comes tagged with the source aircraft's ICAO24 hex. To convert raw ADS-B traffic into useful information, these networks must resolve hex codes to aircraft details through a database. The Fleets Database provides exactly this lookup — the hex field is indexed for fast retrieval.
Multilateration (MLAT) systems calculate aircraft positions by comparing the time-of-arrival of transponder signals at multiple receivers. They produce position fixes tagged with the transponder's ICAO24 hex. The same lookup pattern applies — resolve the hex code to aircraft details to make the position data useful in applications.
Aviation enthusiasts use software-defined radios (SDR) and personal ADS-B receivers to track aircraft overhead. The receiver picks up hex codes from broadcasts. Hobbyist tracking applications then look up each hex in a database to display the aircraft model, airline and registration to the user. The AirLabs API serves this lookup well for personal projects and hobbyist platforms.
Airline maintenance systems, MRO providers and ground operations often use the hex code as a primary key when correlating operational data from multiple sources. Because the hex code is broadcast by the aircraft itself, it is more reliable than human-entered tail numbers or flight numbers that may have data entry errors.
Academic researchers and aviation safety analysts use historical ADS-B data tagged by hex code to study flight patterns, network topology, fuel burn estimates and incident reconstructions. The hex code provides the consistent identifier needed to follow specific airframes across years of operational data.
Several patterns appear repeatedly in production code that handles ICAO24 hex codes:
Before making an API call with a hex code, validate the format. A valid hex code is exactly 6 hexadecimal characters. Reject input that does not match this format early. The address 000000 is reserved and should be filtered out — it appears in some ADS-B feeds as a placeholder when the receiver could not decode the transponder ID.
Hex codes are sometimes uppercase (A9D286), sometimes lowercase (a9d286). Both are equivalent. AirLabs accepts both, but standardizing to uppercase in your application makes log inspection easier.
If you only have a hex code and want the country of registration without making an API call, the prefix-to-country mapping is well-defined by ICAO. For most applications it is simpler to use the flag field returned by the Fleets Database — it is explicit and avoids edge cases where small countries have non-aligned hex ranges.
The most common operation is converting a hex code to a tail number for display. The Fleets Database returns both fields in every record, so a single API call does the resolution. Cache the result locally — the hex-to-tail mapping is stable for the duration of the registration and rarely changes.
To convert a hex code into "what flight is this aircraft operating right now", call the Real-Time Flights API with the hex filter. If the aircraft is airborne, you get the flight number, route and position. If it is on the ground and not transmitting, the response will not include it — handle this case in your application logic.
In production tracking systems, the typical pattern is to ingest hex codes from ADS-B feeds, resolve them to aircraft details via the Fleets Database, and display tail numbers and aircraft types to users. The hex remains the database key, but the display layer shows the more user-friendly tail number and model name. This pattern is used by virtually every aviation tracking platform.
If you are building an ADS-B tracking application, an aviation data pipeline, an MLAT receiver platform or any system that handles raw aircraft transponder identifiers, the ICAO24 hex code is your primary key — and the AirLabs API provides the lookup layer that resolves it into useful aircraft details.
Our Developer API allows you to create a custom experience for your users and increase the value of your product:
hex lookup returning registration number, model, manufacturer, engine, age and country.hex filter to find live flights by transponder ID._fields to return only the data your application needs.You can try it right now without any obligation! Get a free flight API plan and see for yourself that we have exactly the data you need!
If you need more information, don't hesitate to contact us. We are always happy to chat with our customers and are sure to find a customized solution for each request.
Explore AirLabs, or create an account instantly and start using API.
Get FREE API Key