Ads‑B Exchange

Transportation · No API Key Required · Global

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