Some ADS-B API link notes (hoping to be able to get from/to airport data from it)
Posted by jpluimers on 2025/10/28
For my link archive initiated because I was trying to find out why ADS-B Exchange does not list originating and destination airports for flights, then on how to get at that data.
It is grouped in a few parts, starting with:
Flight origin/destination data from ADS-B
- [Wayback/Archive] ads b – How can I get flight destination from ADS-B? – Aviation Stack Exchange (thanks [Wayback/Archive] Peter M. and [Wayback/Archive] harveyAJ) showed there used to be a ADS-B Exchange public API that allowed retrieving flights with their departure/arrival airports. The documentation used to be at [Wayback/Archive] Data Field Descriptions (JSON and Database) – ADS-B Exchange (now gone, but the archived pages show “Maintained for legacy purposes only.”)
- [Wayback/Archive] Version 2 API Fields – ADS-B Exchange (note the URL has wip in it)
- [Wayback/Archive] ADS-B Data from ADSBexchange.com – ADS-B Exchange (with links to sample data: Complete data from the 1st of each month are made available free of charge.)
- [Wayback/Archive] Help Center – ADS-B Exchange mentions the FAQ has moved to:
- [Wayback/Archive] Accessing Data Collected by ADS-B Exchange – ADS-B Exchange
- RapidAPI: [Wayback/Archive] ADSBexchange.com
- RapidAPI: [Wayback/Archive] Nokia acquires Rapid technology and team! 🚀
- [Wayback/Archive] Why Don’t You Have Destination Information Available? – ADS-B Exchange Help Center
ADS-B Exchange operates a bit differently from other flight tracking sites. As a group of aviation enthusiasts, our primary goal is to answer the question of “what’s up there” rather than “is grandma’s flight on-time”.
Sadly that was not actually answering the question.
- [Wayback/Archive] ADSB Exchange – Frequently Asked Questions – Articles – ADSB Exchange
- [Wayback/Archive] Why no destination/departure info ? : ADSBexchange
Other aggregators get that info from the FAA in return for agreeing to hide certain planes upon request
ADS-BExchange values the freedom of the information, so does not get access to that data feed.
It’s trivial to cross-reference anyway, so not a lot of loss for the gain of seeing every plane with an active transponder.
This feels a bit like plausible speculation, but was the best answer I could find.
- [Wayback/Archive] GitHub – wiedehopf/readsb: ADS-B decoder swiss knife
- [Wayback/Archive] readsb/README-json.md at dev · wiedehopf/readsb · GitHub showing the ADS-B data has no from/to airport field
- [Wayback/Archive] readsb/README-api.md at dev · wiedehopf/readsb · GitHub
- [Wayback/Archive] readsb/README.md at dev · wiedehopf/readsb · GitHub
- [Wayback/Archive] readsb/flamegraph.md at dev · wiedehopf/readsb · GitHub
- [Wayback/Archive] readsb/aircraft.h at dev · wiedehopf/readsb · GitHub
- [Wayback/Archive] Aircraft origin and destination – FlightAware / ADS-B Flight Tracking – FlightAware Discussions
…
To elaborate, aircraft.json doesn’t include origin/destination because ADS-B does not transmit origin/destination information. You’ll need to fuse the data you receive locally with a separate non-ADS-B datasource of some sort – AeroAPI will do this for you as Eric suggests, this type of data fusion is exactly what FlightAware does all the time.
…
I assume you are talking about when for example you click “View Flight Page” on the SkyAware page, you can view the origin and destination of the flight? This seems to work well for scheduled airlines. However it can occasionally come up with strange results for military planes (for example “this plane landed a month ago”, at the other end of the country – when you just clicked on it on your local map.
…
Military flights tend to be tricky for a variety of reasons – callsigns don’t follow the usual ICAO prefix + flight number format; we don’t generally have registration data for them; and they are often not present in data feeds from ANSPs. We tend to be cautious about creating flights from that sort of data.
- [Wayback/Archive] adsbdb
…
- The flight route data is the work of David Taylor, Edinburgh and Jim Mason, Glasgow, and may not be copied, published, or incorporated into other databases without the explicit permission of David J Taylor, Edinburgh.
…
Rate limits
requests block time in seconds 512 + 60 1024 + 300 (reset on each subsequent request) Calculated over a 60 second period
- This is written by [Wayback/Archive] mrjackwills (Jack Wills) · GitHub and relatively young, looking at the source repository [Wayback/Archive] GitHub – mrjackwills/adsbdb: public api for aircraft, airlines, & flightroutes and it’s first commit in 2022: [Wayback/Archive] init commit · mrjackwills/adsbdb@c9880f3 · GitHub
- If you have the alphanumeric call sign, you can get origin/destination using the
/callsignAPI call which returns a flightroute containing anorigin, optionallymidpoint, anddestinationall three containing the anAirport:
https://api.adsbdb.com/v0/callsign/[CALLSIGN]
…{ response: { flightroute: {...} } }key type “callsign” string “callsign_icao” string || null “callsign_iata” string || null “airline” Airline || null “origin” Airport “midpoint” Airport || null “destination” Airport Airport Value
key type “country_iso_name” string “country_name” string “elevation” number “iata_code” string “icao_code” string “latitude” number “longitude” number “municipality” string “name” string Airline Value
key type “name” string “icao” string “iata” string || null “country” string “country_iso” string “callsign” string || null For example [Wayback/Archive]
api.adsbdb.com/v0/callsign/EZS2186{ "response": { "flightroute": { "callsign": "EZS2186", "callsign_icao": "EZS2186", "callsign_iata": "DS2186", "airline": { "name": "Easyjet Switzerland", "icao": "EZS", "iata": "DS", "country": "Switzerland", "country_iso": "CH", "callsign": null }, "origin": { "country_iso_name": "CH", "country_name": "Switzerland", "elevation": 1411, "iata_code": "GVA", "icao_code": "LSGG", "latitude": 46.2380981445313, "longitude": 6.10895013809204, "municipality": "Geneva", "name": "Geneva Cointrin International Airport" }, "destination": { "country_iso_name": "GB", "country_name": "United Kingdom", "elevation": 257, "iata_code": "MAN", "icao_code": "EGCC", "latitude": 53.349375, "longitude": -2.279521, "municipality": "Manchester", "name": "Manchester Airport" } } } }For this to work, I need to find out how to convert from the ADS-B Exchange hex mode_s number to a call sign. Using these API calls didn’t work to get the call sign
RYS2433:- [Wayback/Archive] api.adsbdb.com/v0/aircraft/EI-DYC
{ "response": { "aircraft": { "type": "737NG 8AS/W", "icao_type": "B738", "manufacturer": "Boeing", "mode_s": "4CA645", "registration": "EI-DYC", "registered_owner_country_iso_name": "IE", "registered_owner_country_name": "Ireland", "registered_owner_operator_flag_code": "RYR", "registered_owner": "Ryanair", "url_photo": "https://airport-data.com/images/aircraft/001/726/001726923.jpg", "url_photo_thumbnail": "https://airport-data.com/images/aircraft/thumbnails/001/726/001726923.jpg" } } } - [Wayback/Archive] api.adsbdb.com/v0/aircraft/4ca645
{ "response": { "aircraft": { "type": "737NG 8AS/W", "icao_type": "B738", "manufacturer": "Boeing", "mode_s": "4CA645", "registration": "EI-DYC", "registered_owner_country_iso_name": "IE", "registered_owner_country_name": "Ireland", "registered_owner_operator_flag_code": "RYR", "registered_owner": "Ryanair", "url_photo": "https://airport-data.com/images/aircraft/001/726/001726923.jpg", "url_photo_thumbnail": "https://airport-data.com/images/aircraft/thumbnails/001/726/001726923.jpg" } } }
With a correct callsign conversion, I could have called [Wayback/Archive] api.adsbdb.com/v0/callsign/RYS2433:
{ "response": { "flightroute": { "callsign": "RYS2433", "callsign_icao": "RYS2433", "callsign_iata": "2433", "airline": { "name": "Royal Sky", "icao": "RYS", "iata": null, "country": "Thailand", "country_iso": "TH", "callsign": "ROYAL SKY" }, "origin": { "country_iso_name": "PL", "country_name": "Poland", "elevation": 791, "iata_code": "KRK", "icao_code": "EPKK", "latitude": 50.077702, "longitude": 19.7848, "municipality": "Kraków", "name": "Kraków John Paul II International Airport" }, "destination": { "country_iso_name": "GB", "country_name": "United Kingdom", "elevation": 348, "iata_code": "STN", "icao_code": "EGSS", "latitude": 51.8849983215, "longitude": 0.234999999404, "municipality": "London", "name": "London Stansted Airport" } } } }Note that [Wayback/Archive] api.adsbdb.com/v0/callsign/RR2433 (from the alternate callsign
RR2433) returns a HTTP 404. - [Wayback/Archive] api.adsbdb.com/v0/aircraft/EI-DYC
- The tool gets it data from [Wayback/Archive] PlaneBase
- The public API likely needs more data to work as these don’t:
Conversions of identifications
From the above, I found out that there are various encodings for both the aircraft and the associated flights: hexadecimal and (sometimes multiple) human formats for both kind of data.
In fact what adsbdb names callsign is more commonly known as flight number.
In retrospect the difference logical:
- callsigns or flight numbers are about flights, which can be operated by varying aircrafts over time
- aircraft identifications stay static for a longer time
- the flight number is sort of (see below) only valid during the flight itself (as then you are sure which aircraft operated the flight) though likely APIs give reliable enough results some time before/after the actual flight
These links are about that:
- [Wayback/Archive] GitHub – engelsjk/hex2reg: hex2reg converts an ICAO 24-bit Mode S code to an aircraft’s registration. based on [Wayback/Archive] tar1090/html/registrations.js at master · wiedehopf/tar1090 · GitHub (raw file: [Wayback/Archive] registrations.js) from [Wayback/Archive] GitHub – wiedehopf/tar1090: Provides an improved webinterface for use with ADS-B decoders readsb / dump1090-fa (which in turn is what ADS-B Exchange uses itself; I mentioned the repository further above already)
- [Wayback/Archive] excel – Find correct formula to get result from hexcode – Stack Overflow confirms the tar1090 mentioned above is the best method (thanks [Wayback/Archive] Mr North and [Wayback/Archive] John Wiseman)
- [Wayback/Archive] Map Help – ADS-B Exchange also confirms the tar1090 usage
- [Wayback/Archive] The 1090MHz Riddle: Mode S elementary surveillance
- [Wayback/Archive] hexdb.io | Mode-S Hex ADS-B API with front-end [Wayback/Archive] GitHub – joshuadouch/hexdb-radar: Takes data from aircraft.json (dump1090) and displays information about aircraft, using the hexdb.io API for additional information.
- [Wayback/Archive] From Mode S Code To Tail Number » FoxtrotCharlie looks very promising as it shows a few API and database sites not to get just the tail number but also the flight number. Needs further reading and experimenting (:
- [Wayback/Archive] Use API to find flight number of given ICAO hex? – FlightAware / ADS-B Flight Tracking – FlightAware Discussions
The ident/callsign the aircraft transmits will often tell you this, when present.
https://flightaware.com/live/modes/ABCDEF will redirect to FlightAware’s current flight page for ICAO address ABCDEF at the time (SkyAware provides this link), though this is for humans, not scripts.
Need to test this out.
Other links
How flight information is related (and more complex than you might think):
- Aviation call sign – Wikipedia
- Flight number – Wikipedia
- [Wayback/Archive] Tail Number vs Callsign vs Flight Number: Pilotinstitute
- [Wayback/Archive] Clearing up Call Sign Confusion | Flightradar24 Blog
Every few months, when airlines introduce updated schedules, we note that some routes may initially be displayed incorrectly on Flightradar24 because of new call signs. The new call signs that most affect route matching are the alphanumeric call signs used by an increasing number of airlines. We’ll explain how alphanumeric call signs have made our job slightly more difficult, but have made flying even safer.
- [WaybackSave/Archive] Flightradar24 on Twitter: “Today marks the start of DST in Europe which means that clocks should be set forward 1 hour. This also means that many airlines change to summer schedule and many flights in Europe get new alphanumeric callsigns. Because of this some flight numbers and routes can be missing.”
- [Wayback/Archive] Callsigns with numbers (eg: EZY1927 being EZY19DJ) : VATSIM
- [Wayback/Archive] Airplane Tail Numbers Explained – Aero Corner
- [Wayback/Archive] Difference between a call sign and a flight number? : Flightradar24 Support center
MLAT:
- [Wayback/Archive] MLAT – ADS-B Exchange
- [Wayback/Archive] Ways To Join The Exchange – ADS-B Exchange
- [Wayback/Archive] MLAT, PI, ADSB Exchange??? : ADSB
MLAT uses all the other feeders in the area to approximate the location of the plane.
If you just look at your local page, you are just using your feeder and nothing else. So you won’t see the MLAT aircraft.
To see the MLAT, you have to look at the page that shows the information from all the feeders combined, not yours by itself. Ex. Adsbexchange.com
Queries:
- [Wayback/Archive] adsdb exchange view destination at DuckDuckGo
- [Wayback/Archive] How can I get flight origin destination from ADS-B? at DuckDuckGo
- [Wayback/Archive] callsigns flight numbers at DuckDuckGo
- [Wayback/Archive] icao hex to registration at DuckDuckGo
- [Wayback/Archive] mode_s to callsign at DuckDuckGo
- [Wayback/Archive] mode_s to flightnumber at DuckDuckGo
- [Wayback/Archive] icao hex to callsign at DuckDuckGo
- [Wayback/Archive] icao hex to flightnumber at DuckDuckGo
--jeroen






Leave a comment