API Documentation
Live VDL2 datalink — what aircraft are saying (OOOI times, position, weather, intent) — over REST and WebSocket.
Authentication
Every feeder gets a unique API key. Use it from any IP — your laptop, VPS, phone, scripts.
curl -H "Authorization: Bearer YOUR_API_KEY" https://api.adsbiq.com/v2/messages/recent
Your API key is shown only on your feeder dashboard after you claim your feeder. This public documentation never exposes the key.
Alternative: IP-based auth (no key needed from home network)
Requests from your feeder's IP are automatically authenticated — no header needed:
curl https://api.adsbiq.com/v2/messages/recent
Not a feeder? Install in 60 seconds to get access.
Access Tiers
Live data is earned by feeding. Bulk data is free to everyone, always. New here? You get a 3-day full-access trial — then feed to keep the fast lane.
| Tier | Who | REST | Live WebSocket |
|---|---|---|---|
| Trial | New user, first 3 days | 1 / 20s | 2s push |
| Free | After trial, not feeding | 1 / 5 min | 150s push |
| Contributor | Active datalink feeder | 1 / 20s | 2s push (0.5 Hz) |
Each tier also has a fair-use daily data budget. Exceeding a limit returns 429 with a Retry-After header; the response points you to the WebSocket (far lighter than polling) or the free bulk download.
📦 Bulk / research use? The complete dataset is published free, once daily as Parquet — no account, no limits: vdlIQ open data. For most non-realtime use cases it's the better fit anyway.
Feed in 60 seconds to unlock the contributor stream.
🛰️ VDL2 — Datalink Messages (REST) our priority
What aircraft are saying — OOOI, position, weather, intent. A different shape from position data: timestamped text messages, not lat/lon.
feed.adsbiq.com:5552 and the read
endpoints below serve a hot recent-message window (newest first). Same auth and rate limits as the
aircraft API. Want to feed VDL2? See /vdl2.
Endpoints
/v2/messages/recent
The live tail across all aircraft, newest first. Query: ?limit={1-1000},
?since={unix|ISO-8601}.
/v2/messages/tail/{reg}
Recent datalink messages for an aircraft registration (e.g. N827NN).
/v2/messages/hex/{icao}
Recent messages by ICAO hex (e.g. a12345).
/v2/messages/label/{label}
Messages by ACARS label (e.g. 5Z OOOI, 15 weather). Query:
?since=, ?until=, ?limit=.
/v2/messages/stats
Live volume snapshot: global and per-feeder messages/min, active VDL2 feeder count.
Deep history. The endpoints above serve a hot recent window. Add
?history=1 (with ?since=/?until=) to scan the archived
message store instead — bounded, newest-first, with "mode":"archive" and a
"truncated" flag when the scan hits its cap.
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.adsbiq.com/v2/messages/recent?limit=20"
# -> { "messages": [ … ], "count": 20, "source": "vdl2" }
Message schema
Each record is the canonical, lossless form written at ingest:
{
"uuid": "…", // globally unique message id
"timestamp": 1717761600.25, // unix seconds (UTC)
"sourceType": "VDL2",
"icaoHex": "ac2bb1", // aircraft ICAO address
"tail": "N827NN", // registration
"flightNumber": "AAL1234",
"label": "H1", // ACARS label
"blockId": "4", "msgNum": "M62A", "ack": "!",
"text": "ENG RPT N1 95.2 EGT 612",
"frequency": 136975000, // Hz
"level": -19.7, // signal level (dBFS)
"contentHash": "…" // receiver-independent dedup key
}
// Receiving-feeder identity (IP / station id) is never exposed — operator privacy.
Backed by the S3 + local-NVMe parquet archive (no Postgres). Coverage and history queries read the canonical parquet; the endpoints above will serve recent windows with low latency.
Example Code
Get started quickly with a working Flask demo that queries every endpoint:
git clone https://github.com/Sky-Power-Services/adsbiq-api-demo.git
cd adsbiq-api-demo
pip install -r requirements.txt
python app.py
View on GitHub — includes REST and WebSocket examples.