Aircraft Lookup
Look up an aircraft's type, operator, and photos by registration (nationally registered aircraft identifier, e.g. G-STBC, N12345) or ICAO24 (6-character hex transponder address broadcast on ADS-B, e.g. 40621D). The SkyLink aircraft registry holds 615,000+ records refreshed daily.
Use registration lookup when your UI or schedule row already has a tail number. Use ICAO24 lookup when you receive hex codes from a live ADS-B feed and need to enrich them with type and operator metadata.
Requirements
x-api-key on every request (direct subscription). Learn more →| Endpoint | When to use |
|---|---|
GET /v3/aircraft/registration/{registration} | Tail-number lookup for flight cards, fleet pages, or photo galleries |
GET /v3/aircraft/icao24/{icao24} | Enrich live ADS-B hex addresses from tracker feeds |
GET /v3/aircraft/database/stats | Health check — confirm the registry is loaded and see record counts |
Important: Registration and ICAO24 lookups return HTTP 200 with found: false and aircraft: null when no match exists — never 404.
Lookup by registration
Request
https://data.skylinkapi.com/v3/aircraft/registration/{registration}| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
registration | string | Yes (path) | - | Tail number, e.g. G-STBC, N12345 |
photos | boolean | No | true | Include community aircraft photos when available |
Response
{
"query": "G-STBC",
"found": true,
"aircraft": {
"registration": "G-STBC",
"icao24": "40621D",
"icao_type": "B77W",
"type_name": "BOEING 777-36NER",
"manufacturer": "Boeing Company",
"manufacturer_and_model": "Boeing Company BOEING 777-36NER",
"owner_operator": "British Airways",
"airline_code": null,
"is_private_operator": false,
"serial_number": "38287",
"year_built": null,
"photos": [
{
"image": "https://image.airport-data.com/aircraft/001912010.jpg",
"link": "https://airport-data.com/aircraft/photo/001912010",
"photographer": "Roberto Cassar"
}
]
}
}| Field | Type | Required | Null? | Description |
|---|---|---|---|---|
query | string | Yes | Never | Echo of the registration searched |
found | boolean | Yes | Never | Whether a registry match exists |
aircraft | object | null | No | Yes | Aircraft details when found is true |
Aircraft object
| Field | Type | Required | Null? | Description |
|---|---|---|---|---|
registration | string | null | No | Yes | Tail number |
icao24 | string | null | No | Yes | ICAO 24-bit transponder hex |
icao_type | string | null | No | Yes | ICAO aircraft type designator |
type_name | string | null | No | Yes | Model name |
manufacturer | string | null | No | Yes | Manufacturer name |
manufacturer_and_model | string | null | No | Yes | Combined manufacturer + model |
owner_operator | string | null | No | Yes | Registered owner or operator |
airline_code | string | null | No | Yes | Operator airline code |
is_private_operator | boolean | null | No | Yes | true for private operators |
serial_number | string | null | No | Yes | Manufacturer serial number |
year_built | string | null | No | Yes | Year of manufacture |
photos | array | No | Never | Present when photos=true |
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Aircraft registration (e.g. N12345, G-STBC)
2 <= length <= 10Query Parameters
Include aircraft photos from airport-data.com
trueResponse Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/aircraft/registration/N12345"{
"query": "G-STBC",
"found": true,
"aircraft": {
"registration": "G-STBC",
"icao24": "40621d",
"icao_type": "B77W",
"type_name": "Boeing 777-36N",
"owner_operator": "British Airways",
"is_military": false,
"year_built": "2013",
"photos": [
{
"image": "https://image.airport-data.com/aircraft/001912010.jpg",
"link": "https://airport-data.com/aircraft/photo/001912010.html",
"photographer": "Roberto Cassar"
}
]
}
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Lookup by ICAO24
Request
https://data.skylinkapi.com/v3/aircraft/icao24/{icao24}| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
icao24 | string | Yes (path) | - | 6-character ICAO 24-bit hex address (case-insensitive) |
photos | boolean | No | true | Include community aircraft photos |
Response
Same envelope as registration lookup.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
ICAO24 hex address (e.g. 40621D)
4 <= length <= 6Query Parameters
Include aircraft photos from airport-data.com
trueResponse Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/aircraft/icao24/a835af"{
"query": "40621D",
"found": true,
"aircraft": {
"registration": "G-STBC",
"icao24": "40621d",
"icao_type": "B77W",
"type_name": "Boeing 777-36N",
"owner_operator": "British Airways",
"is_military": false,
"year_built": "2013",
"photos": [
{
"image": "https://image.airport-data.com/aircraft/001912010.jpg",
"link": "https://airport-data.com/aircraft/photo/001912010.html",
"photographer": "Roberto Cassar"
}
]
}
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Database statistics
Request
https://data.skylinkapi.com/v3/aircraft/database/statsNo query or path parameters.
Response
{
"loaded": true,
"total_icao_entries": 612678,
"total_registration_entries": 608905,
"source_url": "https://api.skylinkapi.com/internal/aircraft.json"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Response Body
application/json
curl -X GET "https://data.skylinkapi.com/v3/aircraft/database/stats"{
"loaded": true,
"total_icao_entries": 615656,
"total_registration_entries": 613252,
"database_file": "http://10.0.1.15:8090/aircraft.json"
}Client types
"""Aircraft lookup response models for /aircraft/registration and /aircraft/icao24."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AircraftPhoto: image: str link: str photographer: str@dataclassclass AircraftDetails: registration: str | None icao24: str | None icao_type: str | None type_name: str | None manufacturer: str | None manufacturer_and_model: str | None owner_operator: str | None airline_code: str | None is_private_operator: bool | None serial_number: str | None year_built: str | None photos: list[AircraftPhoto]@dataclassclass AircraftLookupResponse: query: str found: bool aircraft: AircraftDetails | None@dataclassclass AircraftDatabaseStats: loaded: bool total_icao_entries: int total_registration_entries: int source_url: str@dataclassclass AircraftSummary: """Compact model for UI cards.""" registration: str | None icao24: str | None icao_type: str | None display_name: str operator: str | None photo_url: str | NoneIntegration
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3"CACHE: dict[str, tuple[dict, float]] = {}AIRCRAFT_TTL = 86_400 # 24 h@dataclassclass AircraftSummary: registration: str | None icao24: str | None icao_type: str | None display_name: str operator: str | None photo_url: str | Nonedef fetch_aircraft_by_registration(registration: str, *, photos: bool = False) -> dict | None: """Look up aircraft by tail number. Returns None when found=false.""" reg = registration.strip().upper() key = f"aircraft:reg:{reg}:{photos}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] try: r = requests.get( f"{BASE}/aircraft/registration/{reg}", headers=HEADERS, params={"photos": photos}, timeout=(10, 15), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching aircraft {reg}") from exc r.raise_for_status() payload = r.json() if not payload.get("found"): return None CACHE[key] = (payload, time.time() + AIRCRAFT_TTL) return payloaddef aircraft_summary(registration: str) -> AircraftSummary | None: payload = fetch_aircraft_by_registration(registration, photos=True) if not payload: return None ac = payload["aircraft"] photos = ac.get("photos") or [] return AircraftSummary( registration=ac.get("registration"), icao24=ac.get("icao24"), icao_type=ac.get("icao_type"), display_name=ac.get("type_name") or ac.get("manufacturer_and_model") or registration, operator=ac.get("owner_operator"), photo_url=photos[0]["image"] if photos else None, )if __name__ == "__main__": import json from dataclasses import asdict summary = aircraft_summary("N636JB") print(json.dumps(asdict(summary), indent=2) if summary else "Aircraft not found")Implementation notes
Photos toggle. Pass photos=false on list views and batch enrichment jobs.
ADS-B enrichment. For live tracks, prefer ICAO24 lookup after receiving hex codes from ADS-B.
Error responses
200 — aircraft not found
{
"query": "ZZZZNOT",
"found": false,
"aircraft": null
}Related: ADS-B · Flight Status