TL;DR
What it does: Returns live positions of aircraft worldwide – latitude, longitude, altitude, speed, heading, and more – in JSON format.
Quick start: curl "https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json"
No API key needed – just call the URL
Overview
Ads‑B Exchange aggregates ADS‑B broadcasts from a worldwide network of receivers, turning raw aircraft transponder data into a real‑time JSON feed. Developers can use it to build flight‑tracking maps, monitor traffic patterns, or integrate aircraft data into aviation‑related applications. Because the feed is truly global, you can query aircraft over any region – from busy North‑American airways to remote Pacific routes.
Live Example
Below is the exact request URL and a realistic sample JSON response (taken from the public documentation).
The URL to call (global aircraft list):
https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json
Try This URL Now →
The actual response you get (trimmed for readability):
{
"acList": [
{
"Id": "a1b2c3d4",
"Lat": 37.7749,
"Long": -122.4194,
"Alt": 30000,
"Trak": 180,
"Spd": 500,
"Dst": 0
}
],
"msg": "ok"
}
What does this data mean?
Key fields in the JSON payload:
- acList
- An array of aircraft objects currently in the air. Each object contains:
- Id – Unique hex identifier (ICAO24 address).
- Lat – Latitude in decimal degrees.
- Long – Longitude in decimal degrees.
- Alt – Altitude in feet.
- Trak – Heading (degrees true north).
- Spd – Ground speed in knots.
- Dst – Distance from the receiver (km) – useful for assessing data freshness.
- msg
- Status message – typically `ok` when the feed is healthy.
How to use this API
JavaScript Example
fetch('https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json')
.then(r => r.json())
.then(data => {
data.acList.forEach(ac => {
console.log(`${ac.Id}: ${ac.Lat.toFixed(2)}, ${ac.Long.toFixed(2)} @ ${ac.Alt} ft`);
});
})
.catch(err => console.error('Error:', err));
Python Example
import requests, json
url = 'https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json'
resp = requests.get(url)
payload = resp.json()
for aircraft in payload.get('acList', []):
print(f"{aircraft['Id']}: {aircraft['Lat']}, {aircraft['Long']} @ {aircraft['Alt']} ft")
cURL Example
# Retrieve the full global aircraft list (JSON)
curl "https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json"
# Filter by altitude > 30000 ft (using jq for example)
curl "https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json" | jq '.acList[] | select(.Alt > 30000)'
Frequently Asked Questions
- Do I need an API key?
- No! The Ads‑B Exchange feed is publicly accessible without any authentication.
- Is there a rate limit?
- There is no published hard rate limit – the endpoint streams the latest data on each request. Be courteous and cache results where possible.
- How often is the data refreshed?
- The feed updates every few seconds as new ADS‑B messages are received from the worldwide receiver network.
- Can I filter the data server‑side?
- Only minimal filtering is supported via query parameters (e.g., `lat`, `lon`, `range`). For more complex queries, fetch the full list and filter client‑side.
- What format is the response?
- JSON – a top‑level object containing `acList` (array of aircraft) and `msg` (status string).
- Is the data reliable for commercial flight tracking?
- The data is crowd‑sourced from volunteer receivers; it’s excellent for hobbyist and research projects, but for mission‑critical commercial tracking you may want a paid, certified data source.
API Details
- Base URL
https://public-api.adsbexchange.com/VirtualRadar/AircraftList.json- Documentation
- https://www.adsbexchange.com/data/
- Category
- Transportation
- Authentication
- None required – completely free
- Coverage
- Global – tracks aircraft worldwide via ADS‑B broadcasts
- CORS
- Yes – can be called directly from browsers