Aircraft Registration Lookup API: Tail, Hex and Type
Find live aircraft by tail number, ICAO hex code or type designator with a free REST API. Endpoints, example requests in curl and Python, and rate limits.
An aircraft registration lookup API turns a tail number like EI-DEO into a live answer: where that aircraft is right now, how high and fast it's flying, and what type it is. The free AvioADSB API can look aircraft up three ways: by registration, by ICAO hex code and by type designator. You can start without an API key.

G-EUPT, a British Airways A319. Photo: Aeroprints.com, CC BY-SA 3.0, via Wikimedia Commons, cropped.
Tail number, hex code and type: what's the difference?
| Identifier | Example | Where it comes from | Endpoint |
|---|---|---|---|
| Registration (tail number) | EI-DEO, N12345 | Painted on the airframe, issued by the country of registry | /v1/reg/{registration} |
| ICAO 24-bit address (hex) | 4ca2d5 | Fixed in the transponder; what ADS-B actually broadcasts | /v1/hex/{icao} |
| Type designator | A320, B738 | ICAO code for the aircraft model | /v1/type/{type} |
Receivers never hear the registration. They hear the hex address, and AvioADSB matches it against an aircraft database to fill in the registration (r), type (t) and model description (desc).

VH-VXH, a Qantas 737-800. Photo: EurovisionNim, CC BY-SA 3.0, via Wikimedia Commons.
Look up an aircraft by registration
curl https://avioadsb.org/v1/reg/EI-DEO
curl https://avioadsb.org/v1/reg/eideo # hyphen optional, case-insensitiveAn example response, trimmed to the main fields:
{
"ac": [{
"hex": "4ca2d5", "r": "EI-DEO", "t": "A320", "flight": "EIN53X",
"alt_baro": 36000, "gs": 451.2, "lat": 53.42, "lon": -6.27
}],
"total": 1
}If ac is empty, the aircraft isn't being received right now. It may be parked, switched off or outside coverage. An empty result doesn't mean the registration doesn't exist.
Track a fleet by ICAO hex code
/v1/hex takes up to 20 hex codes separated by commas, so you can watch a whole fleet in one request:
import requests
FLEET = ["4ca2d5", "4ca7b4", "4ca9e1"] # your aircraft's hex codes
r = requests.get(f"https://avioadsb.org/v1/hex/{','.join(FLEET)}", timeout=10)
r.raise_for_status()
for ac in r.json()["ac"]:
print(ac.get("r", "?"), ac.get("t", "?"), ac.get("alt_baro"))If you start with registrations, look each one up once with /v1/reg, store the hex it returns, and poll /v1/hex from then on.
Find every aircraft of a type
curl https://avioadsb.org/v1/type/A388 # every A380 the network hearsUse the four-character ICAO designator (B77W, E190, DH8D), not the marketing name.

G-XLEA, an A380-800 (ICAO type A388). Photo: Krzysztof Kaczala, CC BY-SA 3.0, via Wikimedia Commons.
Live lookups vs. aircraft registries
These endpoints only return aircraft the network is receiving at that moment. For aircraft on the ground or out of range, and for details like owner, serial number or registration history, use the registry that issued the registration. The FAA registry in the US and G-INFO in the UK both publish their data for free. Many apps combine the two: the registry says who and what, and the live API says where.
Rate limits
- No key: 1 request every 10 seconds, 100 a day per network.
- Contributor key: 1 request a second and 10,000 a month. You get one by sharing data from an ADS-B receiver.
Results depend on where receivers are, so check the coverage map for your area. The full endpoint list is in the API reference.