public aircraft, airline, and flightroute api
Built in Rust,
with axum,
for Docker,
using PostgreSQL
& Redis
See the frontend source code for here
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]
or
https://api.adsbdb.com/v[semver.major]/aircraft/random
{
"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]
or
https://api.adsbdb.com/v[semver.major]/callsign/random
{
"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 ]
or
https://api.adsbdb.com/v[semver.major]/airline/random
{
"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"}https://api.adsbdb.com/v[semver.major]/stats
{
"response": {
"daily": {
"aircraft": [
{
"url": string,
"count": number
}
],
"airline": [
{
"url": string,
"count": number
}
],
"callsign": [
{
"url": string,
"count": number
}
],
"mode_s": [
{
"url": string,
"count": number
}
],
"n_number": [
{
"url": string,
"count": number
}
],
"online": [
{
"url": string,
"count": number
}
],
"stats": [
{
"url": string,
"count": number
}
],
"aggregate": number
},
"total": {
"aircraft": [
{
"url": string,
"count": number
}
],
"airline": [
{
"url": string,
"count": number
}
],
"callsign": [
{
"url": string,
"count": number
}
],
"mode_s": [
{
"url": string,
"count": number
}
],
"n_number": [
{
"url": string,
"count": number
}
],
"online": [
{
"url": string,
"count": number
}
],
"stats": [
{
"url": string,
"count": number
}
],
"aggregate": number
}
}
}
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 }
When env.allow_update is correctly set, and the PATCH request contains a valid Authorization header, Aircraft and Callsign can be modified.
https://api.adsbdb.com/v[semver.major]/aircraft/[MODE_S]
{
"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
}
Warning: mode_s, url_photo, and url_photo_thumbnail cannot be modified.
https://api.adsbdb.com/v[semver.major]/callsign/[CALLSIGN]
{
"origin": string,
"destination": string
}
Warning: Both origin and destination need to be valid ICAO airport codes.
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 adsbdbOperate docker compose containers via
./run.shcargo build --releasecross build --target x86_64-unknown-linux-musl --releaseRequires 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