API Reference

REST access to live and historical aircraft positions, served from our own receiver network.

Free tier: 2,000 credits/month, no card required. Get a key in your dashboard.

All endpoints live under a single base URL:

https://planetrack.ai/v1

Requests are metered in credits. Every response includes a meta block showing what the call cost and how many credits you have left this month.

Authentication

All API requests require an API key, sent in the X-API-Key header:

curl -H "X-API-Key: pt_live_your_api_key_here" \
  https://planetrack.ai/v1/live
Your API key is issued in your dashboard after signing up. Keep it server-side; never embed it in client code.
Commercial use: free keys are for personal, non-commercial use only. Commercial use requires the Starter plan ($29/month) or above. See Commercial Use for details.

Credits & Plans

Each call is charged a fixed number of credits. Credits reset monthly.

Credit Costs

Endpoint Credits per Call
GET /v1/live 10
GET /v1/aircraft/{icao24}/track 20
GET /v1/flights/{callsign}/history 20
GET /v1/usage Free

Plans

Plan Price Credits/Month History Lookback Commercial Use
Free $0 2,000 7 days No (personal use)
Starter $29/month 100,000 90 days Yes
Pro $199/month 1,000,000 Up to 12 months Yes

Lookback on every plan is capped by the start of our archive: position collection began 2025-08-18.

Need a single aircraft's full history rather than API access? One-off data extracts start at £29 with no account needed.

Rate Limits

Rate limits are per API key and apply on top of your monthly credit allowance:

Tier Requests/Second Requests/Day
Free 1 100
Starter 10 10,000
Pro 100 100,000

If you exceed either limit the API returns 429 Too Many Requests. Back off and retry; no credits are charged for rate-limited calls.

Error Handling

The API returns standard HTTP status codes:

Code Meaning
200 Success
400 Bad Request: invalid parameters
401 Unauthorized: missing or invalid X-API-Key header
402 Payment Required: monthly credits exhausted. Upgrade your plan or wait for the monthly reset. Check /v1/usage (free) to see your balance.
404 Not Found: resource doesn't exist
429 Too Many Requests: per-second or per-day rate limit exceeded. No credits are charged; retry after backing off.
500 Internal Server Error

API v1 Endpoints

GET /v1/live 10 credits

Get the current position of all tracked aircraft.

Parameters

Parameter Type Required Description
bbox string No Bounding box filter: "min_lat,min_lon,max_lat,max_lon"
limit integer No Max aircraft to return

Example Request

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://planetrack.ai/v1/live?bbox=49.0,-8.0,61.0,2.0&limit=100"

Example Response

{
  "data": [
    {
      "icao24": "4076a3",
      "callsign": "BAW123",
      "lat": 51.4712,
      "lon": -0.4527,
      "altitude": 36000,
      "speed": 447,
      "heading": 284,
      "vertical_rate": 0,
      "squawk": "2201",
      "last_seen": "2026-08-12T10:15:04Z"
    }
  ],
  "meta": {
    "count": 1,
    "credits_charged": 10,
    "credits_remaining": 99850
  }
}
GET /v1/aircraft/{icao24}/track 20 credits

Get the position track for a specific aircraft. Lookback depth depends on your plan: 7 days on Free, 90 days on Starter, up to 12 months on Pro.

Parameters

Parameter Type Required Description
icao24 string (path) Yes ICAO 24-bit hex address, e.g. 4076a3
date string No Day to fetch (YYYY-MM-DD, default today). Must be within your plan's lookback window.

Example Request

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://planetrack.ai/v1/aircraft/4076a3/track?date=2026-08-11"

Example Response

{
  "data": {
    "icao24": "4076a3",
    "date": "2026-08-11",
    "points": [
      {
        "time": "2026-08-11T09:02:15Z",
        "lat": 51.4700,
        "lon": -0.4543,
        "altitude": 1200,
        "speed": 175,
        "heading": 270
      }
    ]
  },
  "meta": {
    "credits_charged": 20,
    "credits_remaining": 99830
  }
}
GET /v1/flights/{callsign}/history 20 credits

Get past flights for a callsign. Lookback depth depends on your plan: 7 days on Free, 90 days on Starter, up to 12 months on Pro.

Parameters

Parameter Type Required Description
callsign string (path) Yes Flight callsign, e.g. BAW123
days integer No How many days back to search (default 7, capped by your plan's lookback window)

Example Request

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://planetrack.ai/v1/flights/BAW123/history?days=30"

Example Response

{
  "data": [
    {
      "date": "2026-08-11",
      "callsign": "BAW123",
      "icao24": "4076a3",
      "first_seen": "2026-08-11T09:02:15Z",
      "last_seen": "2026-08-11T16:48:51Z"
    }
  ],
  "meta": {
    "count": 1,
    "credits_charged": 20,
    "credits_remaining": 99810
  }
}
GET /v1/usage Free

Check your current plan and credit balance. This call never charges credits, so poll it as often as you like.

Example Request

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://planetrack.ai/v1/usage"

Example Response

{
  "data": {
    "plan": "api_starter",
    "credits_limit": 100000,
    "credits_used": 12760,
    "credits_remaining": 87240,
    "resets_at": "2026-09-01T00:00:00Z"
  },
  "meta": {
    "credits_charged": 0,
    "credits_remaining": 87240
  }
}

Code Examples

Python

import requests

API_KEY = "pt_live_your_api_key"
BASE_URL = "https://planetrack.ai/v1"

headers = {"X-API-Key": API_KEY}

# Get live aircraft over the UK
response = requests.get(
    f"{BASE_URL}/live",
    params={"bbox": "49.0,-8.0,61.0,2.0", "limit": 100},
    headers=headers,
)
body = response.json()

print(f"Found {body['meta']['count']} aircraft "
      f"({body['meta']['credits_remaining']} credits left)")
for plane in body["data"][:5]:
    print(f"{plane['callsign']}: {plane['lat']}, {plane['lon']}")

JavaScript (Node.js)

const API_KEY = 'pt_live_your_api_key';
const BASE_URL = 'https://planetrack.ai/v1';

async function getLiveAircraft() {
  const response = await fetch(`${BASE_URL}/live?limit=100`, {
    headers: { 'X-API-Key': API_KEY }
  });
  const body = await response.json();

  console.log(`Found ${body.meta.count} aircraft (${body.meta.credits_remaining} credits left)`);
  body.data.slice(0, 5).forEach(plane => {
    console.log(`${plane.callsign}: ${plane.lat}, ${plane.lon}`);
  });
}

getLiveAircraft();

curl

# Get live aircraft (10 credits)
curl -H "X-API-Key: pt_live_your_api_key" \
  "https://planetrack.ai/v1/live?limit=10" | jq

# Get an aircraft's track (20 credits)
curl -H "X-API-Key: pt_live_your_api_key" \
  "https://planetrack.ai/v1/aircraft/4076a3/track" | jq

# Check your credit balance (free)
curl -H "X-API-Key: pt_live_your_api_key" \
  "https://planetrack.ai/v1/usage" | jq

SDKs

Official SDKs for Python, JavaScript, Ruby, and PHP are in development. The API is plain HTTPS and JSON, so any standard HTTP client works in the meantime; the examples above cover the common cases.

Support

Email [email protected]. Include the endpoint, timestamp, and response code of any failing call, and the first characters of your key (never the full key). We run the receiver network and the API ourselves and read every message.

Get started

The free tier includes 2,000 credits per month. No card required.

Create a key View pricing