public aircraft, airline, and flightroute api
Built in Rust,
with axum,
for Docker,
using PostgreSQL
& Redis
See typescript branch for original typescript version
check adsbdb twitter for any status updates,
and please report any incorrect data to the issues page, with the Data tag.
With thanks to;
https://api.adsbdb.com/v[semver.major]/aircraft/[MODE_S || REGISTRATION]
{
"response":{
"aircraft":{
"type": string,
"icao_type": string,
"manufacturer": string,
"mode_s": string,
"registration": string,
"registered_owner_country_iso_name": string,
"registered_owner_country_name": string,
"registered_owner_operator_flag_code": string || null,
"registered_owner": string,
"url_photo": string || null,
"url_photo_thumbnail": string || null
}
}
}
Unknown aircraft return status 404 with
{ "response": "unknown aircraft"}
https://api.adsbdb.com/v[semver.major]/callsign/[CALLSIGN]
{
"response": {
"flightroute":{
"callsign": string,
"callsign_icao": string || null,
"callsign_iata": string || null,
"airline": {
"name": string,
"icao": string,
"iata": string || null,
"country": string,
"country_iso": string,
"callsign": string || null
} || null,
"origin": {
"country_iso_name": string,
"country_name": string,
"elevation": number,
"iata_code": string,
"icao_code": string,
"latitude": number,
"longitude": number,
"municipality": string,
"name": string,
},
"destination": {
"country_iso_name": string,
"country_name": string,
"elevation": number,
"iata_code": string,
"icao_code": string,
"latitude": number,
"longitude": number,
"municipality": string,
"name": string,
}
}
}
}
For a small number of flightroutes, midpoints are also included
{
"midpoint": {
"country_iso_name": string,
"country_name": string,
"elevation": number,
"iata_code": string,
"icao_code": string,
"latitude": number,
"longitude": number,
"municipality": string,
"name": string,
}
}
Unknown callsign return status 404 with
{ "response": "unknown callsign"}
https://api.adsbdb.com/v[semver.major]/aircraft/[MODE_S || REGISTRATION]?callsign=[CALLSIGN]
{
"response": {
"aircraft":{
"type": string,
"icao_type": string,
"manufacturer": string,
"mode_s": string,
"registration": string,
"registered_owner_country_iso_name": string,
"registered_owner_country_name": string,
"registered_owner_operator_flag_code": string || null,
"registered_owner": string,
"url_photo": string || null,
"url_photo_thumbnail": string || null
},
"flightroute":{
"callsign": string,
"callsign_icao": string || null,
"callsign_iata": string || null,
"airline": {
"name": string,
"icao": string,
"iata": string || null,
"country": string,
"country_iso": string,
"callsign": string || null
} || null,
"origin": {
"country_iso_name": string,
"country_name": string,
"elevation": number,
"iata_code": string,
"icao_code": string,
"latitude": number,
"longitude": number,
"municipality": string,
"name": string,
},
"destination": {
"country_iso_name": string,
"country_name": string,
"elevation": number,
"iata_code": string,
"icao_code": string,
"latitude": number,
"longitude": number,
"municipality": string,
"name": string,
}
}
}
}
If an unknown callsign is provided as a query param, but the aircraft is known, response will be status 200 with just aircraft
https://api.adsbdb.com/v[semver.major]/airline/[AIRLINE_ICAO || AIRLINE_IATA ]
{
"response":{
[
{
"name": string,
"icao": string,
"iata": string || null,
"country": string,
"country_iso": string,
"callsign": string || null
},
...
]
}
}
Unknown airline return status 404 with
{ "response": "unknown airline"}
Convert from MODE-S string to N-Number string
https://api.adsbdb.com/v[semver.major]/mode-s/[MODE_S]
{ "response": string }
Convert from N-Number string to Mode_S string
https://api.adsbdb.com/v[semver.major]/n-number/[N-NUMBER]
{ "response": string }
See releases
download one liner
wget https://www.github.com/mrjackwills/adsbdb/releases/latest/download/adsbdb_linux_x86_64.tar.gz &&
tar xzvf adsbdb_linux_x86_64.tar.gz adsbdb
Operate docker compose containers via
./run.sh
cargo build --release
Build using cross, for x86_64 linux musl targets, in order to run in an Alpine based container
cross build --target x86_64-unknown-linux-musl --release
Requires both postgres, seeded with data, and redis, operational
# Watch
cargo watch -q -c -w src/ -x 'test -- --test-threads=1 --nocapture'
# Run all
cargo test -- --test-threads=1 --nocapture