ICAO 24-bit Address — The Hex Code That Identifies Every Aircraft

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.

Author
Sergey St.
Share:

What Is the ICAO 24-bit Address?

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."

How the 24-bit Address System Works

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.

Country Allocation Blocks

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 4043 400936, 4234C2
France 380000–3BFFFF   Starts with 383B 3946C7, 39B5E1
Germany 3C0000–3FFFFF   Starts with 3C3F 3C6745, 3D5F22  
Spain 340000–37FFFF   Starts with 3437 3441A0
Italy 300000–33FFFF   Starts with 3033 31C8D5
Canada C00000–C3FFFF   Starts with C0C3 C04123
Australia 7C0000–7FFFFF   Starts with 7C7F 7C7B5A
Japan 840000–87FFFF   Starts with 8487 86B6D4
China 780000–7BFFFF   Starts with 787B 7805C3
Russia 100000–1FFFFF   Starts with 101F 152C18
Brazil E40000–E7FFFF   Starts with E4E7 E4123F
United Arab Emirates 896000–896FFF   Starts with 896 8964D2
India 800000–83FFFF   Starts with 8083 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.

How the Hex Code Differs from Other Aircraft Identifiers

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.

Looking Up Aircraft by ICAO 24-bit Hex Code

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.

Tracking Live Aircraft by Hex Code

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.

Use Cases for ICAO 24-bit Hex Codes

The hex code is the universal aircraft identifier across aviation data systems. Each industry uses it differently:

ADS-B Tracking Networks

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.

MLAT and Multilateration Systems

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 and Plane Spotters

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.

Maintenance and Operations

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.

Aviation Research

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.

Practical Patterns When Working with Hex Codes

Several patterns appear repeatedly in production code that handles ICAO24 hex codes:

Hex Validation

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 Casing

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.

Hex to Country Lookup

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.

Hex to Tail Number Resolution

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.

Linking Hex to Live Flight

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.

Combining with Other Identifiers

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.

ICAO Hex Code for Developers

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.

Supported API Features

Our Developer API allows you to create a custom experience for your users and increase the value of your product:

  • Aircraft Fleets Database with hex lookup returning registration number, model, manufacturer, engine, age and country.
  • Real-Time Flights API with hex filter to find live flights by transponder ID.
  • Airlines Database for resolving the operating carrier from the airline IATA/ICAO in the fleet record.
  • Field selection via _fields to return only the data your application needs.
  • Flight Information API to enrich tracking with detailed status by flight number.
  • Schedules API for live departure and arrival data.
  • Airports Database with geolocation and timezone for every airport in the route data.
  • Routes Database for analyzing route networks operated by tracked aircraft.
  • Name Suggestion API for autocomplete of airline and airport names.
  • JSON, XML and CSV response formats.

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.

Ready to get started?

Explore AirLabs, or create an account instantly and start using API.

Get FREE API Key