AvioADSB
All posts

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.

British Airways Airbus A319 G-EUPT on approach, its registration painted on the rear fuselage

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?

IdentifierExampleWhere it comes fromEndpoint
Registration (tail number)EI-DEO, N12345Painted on the airframe, issued by the country of registry/v1/reg/{registration}
ICAO 24-bit address (hex)4ca2d5Fixed in the transponder; what ADS-B actually broadcasts/v1/hex/{icao}
Type designatorA320, B738ICAO 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).

Close-up of a Qantas Boeing 737-800 tail with the registration VH-VXH painted on the fuselage

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-insensitive

An 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 hears

Use the four-character ICAO designator (B77W, E190, DH8D), not the marketing name.

British Airways Airbus A380 G-XLEA landing, the ICAO type designator for this model is A388

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

Results depend on where receivers are, so check the coverage map for your area. The full endpoint list is in the API reference.

Free real-time ADS-B API

Query live aircraft positions as JSON without a key, or share data from your receiver and get an API key with 10,000 requests a month.

Feeding from readsb or ultrafeeder: adsb,feed.avioadsb.org,30004,beast_reduce_plus_out,uuid=<your-uuid>. What happens to the data: data policy.

Back to all posts