BYTETOOLS

OpenSky Network API

Free OpenSky Network API: live aircraft positions, altitude, velocity and callsigns worldwide from crowd-sourced ADS-B receivers. Tested curl example.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 19 Aug 2026

What is the OpenSky Network API?

The OpenSky Network API provides free live air traffic data — aircraft positions, altitude, velocity, heading and callsigns — collected from a community network of ADS-B receivers worldwide.

OpenSky is a research-oriented, community-run flight tracking network. Anonymous users can query live aircraft state vectors globally, filtered to a bounding box, which is enough to build a working live flight map.

The response format is unusual and catches people out: `states` is an array of arrays, not objects. Each aircraft is a positional array where index 0 is the ICAO24 address, 1 the callsign, 5 longitude, 6 latitude, 7 barometric altitude and so on. You must index by position against the documented field order.

Quick facts

Base URL
https://opensky-network.org/api
Authentication
Anonymous access works with tight limits. A free account raises the allowance considerably.
Rate limit
Anonymous users get roughly 400 credits per day and 10-second resolution; registered users get more.
Pricing
Free for non-commercial and research use. Commercial use requires a separate agreement.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the OpenSky Network API

Every request below was executed against the live API on 19 Aug 2026, and the response shown is the real body it returned — not an illustration.

1. Live aircraft in a bounding box

GET https://opensky-network.org/api/states/all?lamin=45.8&lomin=5.9&lamax=47.8&lomax=10.5

curl
curl 'https://opensky-network.org/api/states/all?lamin=45.8&lomin=5.9&lamax=47.8&lomax=10.5'
JavaScript (fetch)
const res = await fetch("https://opensky-network.org/api/states/all?lamin=45.8&lomin=5.9&lamax=47.8&lomax=10.5");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://opensky-network.org/api/states/all?lamin=45.8&lomin=5.9&lamax=47.8&lomax=10.5", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "time": 1787171296,
  "states": [
    [
      "3455d8",
      "VOE68PJ ",
      "Spain",
      1787171295,
      1787171295,
      6.3517,
      45.9715,
      9448.8,
      false,
      198.45,
      218.47,
      0,
      null,
      9906,
      "1000",
      false,
      0
    ],
    [
      "440181",
      "EJU16RZ ",
      "Austria",
      1787171295,
      1787171295,
      8.6092,
      45.967,
      7444.74,
      false,
      189.52,
      142.94,
      -12.68,
      null,
      7856.22,
      "1000",
      false,
      0
    ],
    [
      "300a86",
      "ITY311  ",
      "Italy",
      1787171295,
      1787171295,
      8.6089,
      45.8202,
      6362.7,
      false,
      201.48,
      146.88,
      -10.73,
      null,
      6728.46,
      "1000",
      false,
      0
    ],
    [
      "3847ff",
      "M01     ",
      "France",
      1787171294,
      1787171295,
      7.5266,
      47.6003,
      null,
      true,
      3.34,
      241.88,
      null,
      null,
      null,
      null,
      false,
      0
    ],
    [
      "44cdd1",
      "BEL6KU  ",
      "Belgium",
      1787171295,
      1787171295,
      8.0221,
      47.6174,
      11887.2,
      false,
      237.12,
      338.89,
      0,
      null,
      12382.5,
      "1000",
      false,
      0
    ],
    [
      "4079a9",
      "TOM543  ",
      "United Kingdom",
      1787171295,
      1787171295,
      9.0246,
      46.0529,
      11582.4,
      false,
      226.91,
      312.15,
      0,
      null,
      12108.18,
      "2743",
      false,
      0
    ],
    [
      "406752",

Parameters

ParameterTypeRequiredDescription
lamin / lamaxfloatOptionalMinimum and maximum latitude of the bounding box. 45.8
lomin / lomaxfloatOptionalMinimum and maximum longitude. 5.9
timeintegerOptionalUnix timestamp for a historical snapshot; 0 or omitted for now. 0
icao24stringOptionalFilter to one aircraft by its ICAO 24-bit address. 3455d8

Response fields

timeinteger
Unix timestamp of the snapshot.
statesarray
Array of ARRAYS, one per aircraft — not objects. Index by position.
states[][0]string
ICAO24 transponder address, the unique aircraft id.
states[][1]string
Callsign, space-padded — trim it before display.
states[][5] / [6]float
Longitude and latitude. Note longitude comes first.
states[][7]float
Barometric altitude in metres, or null when on the ground.
states[][9]float
Ground velocity in metres per second.

What you can build with the OpenSky Network API

  • Build a live flight tracking map for a region
  • Monitor aircraft over a specific airport or area
  • Analyse air traffic density for research
  • Trigger notifications when a specific aircraft is airborne

Common errors and how to fix them

429

Anonymous credit allowance exhausted.

Fix: Register a free account for a higher allowance, and always pass a bounding box rather than querying globally.

Reading states as objects fails

Each state is a positional array, not an object.

Fix: Index by position against the documented field order — states[i][6] is latitude, not a named property.

null values in a state array

Some fields are unavailable for some aircraft.

Fix: Null-check altitude and velocity before plotting; ground vehicles often report nulls.

OpenSky Network API — frequently asked questions

Is OpenSky's flight tracking API free?

Yes for non-commercial and research use. Anonymous access works with tight limits; a free account raises the allowance. Commercial use needs a separate agreement.

Why is the response an array of arrays?

OpenSky returns positional state vectors rather than objects, to keep payloads small. Index by position — 0 is ICAO24, 1 callsign, 5 longitude, 6 latitude, 7 altitude.

How do I avoid hitting the rate limit?

Always pass a bounding box with lamin/lamax/lomin/lomax rather than requesting global state, and poll no more often than every 10 seconds.

Does it cover every aircraft?

No. Coverage depends on community ADS-B receivers, so it is excellent over Europe and North America and patchy over oceans and remote regions. Military aircraft are often absent.

Tools that pair with this API

Alternatives to OpenSky Network API

If OpenSky Network does not fit, these transport & vehicle apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
NHTSA vPICFree NHTSA vPIC API with no key: decode any VIN, list vehicle makes and models, and get manufacturer and specification data. Tested curl example.No keyNo19 Aug 2026
NHTSA RecallsFree NHTSA recalls API with no key: look up open safety recalls by make, model and year, with remedy details and Park It warnings. Tested curl example.No keyNo19 Aug 2026
Transport for LondonFree Transport for London API: live tube line status, arrivals, journey planning, bike hire and stop points across London. No key for light use. Tested example.No keyYes19 Aug 2026
Jolpica F1 (Ergast)Free Formula 1 API with no key: race results, driver and constructor standings, qualifying, lap times and pit stops from 1950 onwards. Tested curl example.No keyNo19 Aug 2026
OpenVan Fuel PricesFree global fuel price API with no key: petrol, diesel, LPG and CNG prices for over 120 countries with local currency, weekly change and named sources. Tested example included.No keyYes21 Aug 2026
Overpass (OpenStreetMap)Free Overpass API with no key: query OpenStreetMap for any feature — shops, roads, amenities — by tag and bounding box. Immensely powerful. Tested example.No keyNo20 Aug 2026
All Transport & Vehicle APIs

OpenSky Network is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 19 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.