Suche im Flugverlauf
Durchsuchen Sie archivierte Flüge nach Kennzeichen, Rufzeichen (das über ADS-B ausgestrahlte Rufzeichen des Flugs, z. B. BAW178), Route oder Hex-Code und erhalten Sie eine Liste von Flügen mit flight_id-UUIDs. Mindestens ein Filter ist erforderlich. Dies ist der obligatorische erste Schritt in jedem Workflow mit historischen ADS-B-Daten — ohne eine flight_id aus der Suche können die Endpoints für Details und Track nicht aufgerufen werden.
Tarifstufen und Regeln für Pfadpräfixe: Übersicht Historical ADS-B.
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →Pro, Ultra oder Mega — verwenden Sie das Pfadpräfix, das zum benötigten Zeitfenster passt (siehe Vergleichstabelle in der Übersicht).
Mehr erfahren →Anfrage
https://data.skylinkapi.com/v3.1/ultra/history/flights| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
start | string | Nein | vor 24 h | Beginn des Abfragefensters — ISO 8601-Datum/Uhrzeit |
end | string | Nein | jetzt | Ende des Abfragefensters — ISO 8601-Datum/Uhrzeit |
icao24 | string | Ein Filter erforderlich | - | ICAO24-Hex-Adresse (6 Zeichen) |
registration | string | Ein Filter erforderlich | - | Kennzeichen (z. B. N12345, G-XWBA). Wird serverseitig in icao24 aufgelöst |
callsign | string | Ein Filter erforderlich | - | Exakte Übereinstimmung des Rufzeichens (z. B. BAW117) |
departure_icao | string | Ein Filter erforderlich | - | ICAO-Code des Abflughafens (4 Zeichen) |
arrival_icao | string | Ein Filter erforderlich | - | ICAO-Code des Zielflughafens (4 Zeichen) |
limit | integer | Nein | 100 | Maximale Anzahl zurückgegebener Flüge (max. 1.000 auf dem ULTRA-Pfad) |
Werden sowohl registration als auch icao24 angegeben, müssen sie sich auf dasselbe Luftfahrzeug beziehen. Auf dem ULTRA-Pfad darf das Abfragefenster 90 Tage nicht überschreiten.
MEGA-Pfad (`/mega/history/...`)Abschnitt aufklappen
https://data.skylinkapi.com/v3.1/mega/history/flights| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
start | string | Nein | vor 24 h | Fensterbeginn — ISO 8601 (max. 365 Tage Spanne auf dem MEGA-Pfad) |
end | string | Nein | jetzt | Fensterende — ISO 8601 |
icao24 | string | Ein Filter erforderlich | - | ICAO24-Hex (6 Zeichen) |
registration | string | Ein Filter erforderlich | - | Kennzeichen |
callsign | string | Ein Filter erforderlich | - | Exaktes Rufzeichen |
departure_icao | string | Ein Filter erforderlich | - | ICAO des Abflughafens |
arrival_icao | string | Ein Filter erforderlich | - | ICAO des Zielflughafens |
limit | integer | Nein | 200 | Maximale Anzahl Flüge (max. 2.000 auf dem MEGA-Pfad) |
Erfordert den RapidAPI-Tarif Ultra oder Mega. Gleiche Parameter und gleiche Antwortstruktur wie ULTRA — nur die Obergrenzen für Fenster und Limit unterscheiden sich. Siehe die Vergleichstabelle in der Übersicht.
Antwort
{
"filters": {
"icao24": null,
"registration": null,
"resolved_icao24": null,
"callsign": null,
"departure_icao": "EGLL",
"arrival_icao": null
},
"count": 1,
"flights": [
{
"flight_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"icao24": "40621d",
"callsign": "BAW178",
"flight_number": "BAW178",
"tail_number": "G-XWBA",
"aircraft_type_icao": "B77W",
"aircraft_type_name": "Boeing 777-300ER",
"airline_icao": "BAW",
"airline_iata": "BA",
"airline_name": "British Airways",
"departure_airport_icao": "EGLL",
"departure_airport_iata": "LHR",
"departure_airport_name": "London Heathrow Airport",
"arrival_airport_icao": "KJFK",
"arrival_airport_iata": "JFK",
"arrival_airport_name": "John F Kennedy International Airport",
"flight_state": "ARCHIVED",
"flight_start": "2026-05-12T19:42:05Z",
"flight_end": "2026-05-13T03:11:10Z",
"takeoff_time": "2026-05-12T19:45:00Z",
"landing_time": "2026-05-13T03:08:00Z",
"flight_duration_min": 443.0,
"distance_nm": 2998.4,
"confidence": 1.0,
"route_source": "vrs_confirmed",
"gps_spoofing_suspected": false,
"diversion_suspected": false
}
]
}| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
filters | object | Ja | Echo der angewendeten Suchfilter (siehe unten) |
count | integer | Ja | Anzahl der Einträge in flights |
flights | array | Ja | Zusammenfassungen der passenden Flüge (kann leer sein) |
Angewendete Filter (filters)
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
icao24 | string | null | Ja | Ja | Abgefragter ICAO24-Hex, falls vorhanden |
registration | string | null | Ja | Ja | Abgefragtes Kennzeichen, falls vorhanden |
resolved_icao24 | string | null | Ja | Ja | Aus registration aufgelöster ICAO24, falls angegeben |
callsign | string | null | Ja | Ja | Abgefragtes Rufzeichen, falls vorhanden |
departure_icao | string | null | Ja | Ja | Abgefragter Abflughafen, falls vorhanden |
arrival_icao | string | null | Ja | Ja | Abgefragter Zielflughafen, falls vorhanden |
Flugzusammenfassung (flights[])
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
flight_id | string | Ja | Nie | UUID für Detail- und Track-Abfragen |
icao24 | string | null | Nein | Ja | Hex-Adresse des Luftfahrzeugs, sofern bekannt |
callsign | string | null | Nein | Ja | ADS-B-Rufzeichen während des Flugs |
flight_number | string | null | Nein | Ja | Normalisierte Flugnummer, sofern aufgelöst |
tail_number | string | null | Nein | Ja | Kennzeichen, sofern bekannt |
aircraft_type_icao | string | null | Nein | Ja | ICAO-Typcode (z. B. B77W) |
aircraft_type_name | string | null | Nein | Ja | Lesbare Bezeichnung des Luftfahrzeugtyps |
airline_icao | string | null | Nein | Ja | ICAO-Code der Fluggesellschaft |
airline_iata | string | null | Nein | Ja | IATA-Code der Fluggesellschaft |
airline_name | string | null | Nein | Ja | Anzeigename der Fluggesellschaft |
departure_airport_icao | string | null | Nein | Ja | ICAO des Abflughafens, sofern aufgelöst |
departure_airport_iata | string | null | Nein | Ja | IATA des Abflughafens |
departure_airport_name | string | null | Nein | Ja | Name des Abflughafens |
arrival_airport_icao | string | null | Nein | Ja | ICAO des Zielflughafens, sofern aufgelöst |
arrival_airport_iata | string | null | Nein | Ja | IATA des Zielflughafens |
arrival_airport_name | string | null | Nein | Ja | Name des Zielflughafens |
flight_state | string | null | Nein | Ja | Archivstatus (z. B. ARCHIVED) |
flight_start | string | Ja | Nie | Erste archivierte Beobachtung (ISO 8601) |
flight_end | string | Ja | Nie | Letzte archivierte Beobachtung (ISO 8601) |
takeoff_time | string | null | Nein | Ja | Geschätzter oder erkannter Start (ISO 8601) |
landing_time | string | null | Nein | Ja | Geschätzte oder erkannte Landung (ISO 8601) |
flight_duration_min | number | null | Nein | Ja | Gate-to-Gate-Dauer in Minuten |
distance_nm | number | null | Nein | Ja | Großkreisentfernung in nautischen Meilen |
confidence | number | null | Nein | Ja | Konfidenzwert der Route (0–1) |
route_source | string | null | Nein | Ja | Opaker Enum-Wert, der beschreibt, wie die Route aufgelöst wurde — als Anzeigewert behandeln, nicht als Schlüssel für Abgleiche |
gps_spoofing_suspected | boolean | null | Nein | Ja | Ob für diesen Flug GPS-Spoofing markiert wurde |
diversion_suspected | boolean | null | Nein | Ja | Ob für diesen Flug eine Umleitung markiert wurde |
Client-Typen
"""Typed models for Historical ADS-B - matches historical-adsb.mdx field tables."""from __future__ import annotationsfrom dataclasses import dataclassfrom typing import Literal@dataclassclass HistoricalFlightSummary: flight_id: str icao24: str | None callsign: str | None flight_number: str | None tail_number: str | None departure_airport_icao: str | None arrival_airport_icao: str | None flight_start: str flight_end: str takeoff_time: str | None landing_time: str | None flight_duration_min: float | None distance_nm: float | None@dataclassclass HistoricalPosition: timestamp: str icao24: str latitude: float longitude: float altitude_baro: float | None ground_speed: float | None track: float | None vertical_rate: float | None is_on_ground: bool@dataclassclass HistoricalFlightWindow: flight_id: str callsign: str | None departure_airport_icao: str | None arrival_airport_icao: str | None takeoff_time: str | None landing_time: str | None flight_start: str flight_end: str flight_state: str | None@dataclassclass AirportTrafficFlight: flight_id: str icao24: str | None callsign: str | None departure_airport_icao: str | None arrival_airport_icao: str | None takeoff_time: str | None landing_time: str | None flight_duration_min: float | None distance_nm: float | None@dataclassclass AirportTrafficResponse: icao: str direction: Literal["dep", "arr", "both"] count: int flights: list[AirportTrafficFlight]Integration
Der typische Workflow ist Suche → Details (Metadaten) oder Suche → Track (Wiedergabe auf der Karte). Suchen Sie mit mindestens einem Filter, übernehmen Sie eine flight_id aus den Ergebnissen und rufen Sie dann Details oder Track auf.
Das folgende Beispiel sucht nach Abflughafen, ruft die vollständigen Metadaten für den ersten Treffer ab und verwendet Verbindungs- und Lese-Timeouts, damit Batch-Jobs nicht unbegrenzt hängen bleiben. Behandeln Sie bei Tarifen ohne Zugriff auf historische ADS-B-Daten die Gateway-Antworten 401/403, bevor Sie JSON parsen — siehe Übersicht → Fehlerantworten.
import osimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}PLAN_GATED = {401, 403}def search_historical_flights( *, registration: str | None = None, callsign: str | None = None, icao24: str | None = None, departure_icao: str | None = None, arrival_icao: str | None = None, start: str | None = None, end: str | None = None, limit: int = 10, tier: str = "ultra",) -> dict: """Search archived flights - at least one aircraft/route filter is required.""" params = {k: v for k, v in { "registration": registration, "callsign": callsign, "icao24": icao24, "departure_icao": departure_icao, "arrival_icao": arrival_icao, "start": start, "end": end, "limit": limit, }.items() if v is not None} r = requests.get( f"{BASE}/{tier}/history/flights", headers=HEADERS, params=params, timeout=(10, 25), ) r.raise_for_status() return r.json()def fetch_historical_flight_detail(flight_id: str, *, tier: str = "ultra") -> dict: """Fetch full metadata for one archived flight by UUID.""" r = requests.get( f"{BASE}/{tier}/history/flight/{flight_id}", headers=HEADERS, timeout=(10, 25), ) r.raise_for_status() return r.json()def search_then_detail( *, departure_icao: str, limit: int = 1, tier: str = "ultra",) -> dict | None: """Search → pick first match → return full flight detail.""" search = search_historical_flights( departure_icao=departure_icao, limit=limit, tier=tier, ) flights = search.get("flights") or [] if not flights: return None return fetch_historical_flight_detail(flights[0]["flight_id"], tier=tier)if __name__ == "__main__": import json detail = search_then_detail(departure_icao="EGLL") print(json.dumps(detail, indent=2, default=str) if detail else "No matching flight found")Hinweise zur Implementierung
Wählen Sie das richtige Pfadpräfix. Verwenden Sie /ultra/history/... ab Pro, wenn ein Fenster von 90 Tagen ausreicht. Verwenden Sie /mega/history/... mit Ultra/Mega, wenn Sie bis zu 365 Tage oder höhere Limits pro Anfrage benötigen.
Verketten Sie über flight_id. Raten Sie niemals Zeitfenster für die Track-Wiedergabe — suchen Sie zuerst und rufen Sie dann /history/flight/{flight_id}/track für einen automatisch begrenzten Pfad auf.
Paginieren Sie große Fenster. Wenn count dem angeforderten limit entspricht, verkleinern Sie das Fenster start/end oder erhöhen Sie limit (innerhalb der Obergrenzen der Stufe) und führen Sie die Ergebnisse clientseitig zusammen.
Kennzeichen vs. Hex. Bevorzugen Sie registration, wenn Ihre Benutzer Kennzeichen kennen; verwenden Sie icao24, wenn Sie rohe ADS-B-Feeds verarbeiten.
Fehlerantworten
Tarifbedingte 401/403: Übersicht Historical ADS-B. Endpoint-spezifisch:
422 — kein Suchfilter
Mindestens einer der Parameter icao24, registration, callsign, departure_icao oder arrival_icao ist erforderlich:
{
"detail": [
{
"type": "value_error",
"loc": ["query"],
"msg": "At least one filter (icao24, registration, callsign, departure_icao, arrival_icao) is required"
}
]
}422 — Fenster zu groß
Wird zurückgegeben, wenn die Spanne start/end das Maximum des Pfads überschreitet — 90 Tage auf /ultra/history/... oder 365 Tage auf /mega/history/...:
{
"detail": "Query window exceeds maximum of 90 days for your plan on /ultra/history/..."
}422 — Kennzeichen und ICAO24 stimmen nicht überein
Wenn beide Kennungen angegeben werden, sich aber auf unterschiedliche Luftfahrzeuge beziehen:
{
"detail": "registration and icao24 refer to different aircraft"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Start datetime ISO 8601. Defaults to 24 h ago.
End datetime ISO 8601. Defaults to now.
Filter by ICAO24 hex (6 chars)
Filter by aircraft registration / tail number (e.g. 'N12345')
Filter by callsign (exact match, e.g. 'BAW123')
Filter by departure airport ICAO (4 chars)
Filter by arrival airport ICAO (4 chars)
Max records (default 100, max 1000)
1001 <= value <= 1000Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/ultra/history/flights"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Start datetime ISO 8601. Defaults to 24 h ago.
End datetime ISO 8601. Defaults to now.
Filter by ICAO24 hex (6 chars)
Filter by aircraft registration / tail number (e.g. 'N12345')
Filter by callsign (exact match, e.g. 'BAW123')
Filter by departure airport ICAO (4 chars)
Filter by arrival airport ICAO (4 chars)
Max records (default 200, max 2000)
2001 <= value <= 2000Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/mega/history/flights"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Historische ADS-B-Daten
Archivierte ADS-B-Flüge suchen, Tracks wiedergeben, Verlauf nach Hex-Code oder Kennzeichen abrufen und Flughafenverkehr über 90–365 Tage rekonstruieren.
Details eines einzelnen Flugs
Vollständige archivierte Flugmetadaten per flight_id-UUID abrufen — Flughäfen, Zeiten, Entfernung und Routenkonfidenz aus dem ADS-B-Archiv.