Details eines einzelnen Flugs
Rufen Sie vollständige Metadaten und den kompletten Positions-Track eines bestimmten archivierten Flugs ab. Beide Endpoints erfordern eine flight_id-UUID aus der Flughistorie-Suche — sie bilden Schritt 2 desselben Workflows. Tarifstufen: Übersicht historische ADS-B-Daten.
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →Pro, Ultra oder Mega — verwenden Sie das Pfadpräfix, das dem benötigten Zeitfenster entspricht.
Mehr erfahren →Details eines einzelnen Flugs
Liefert über die Suchergebnisse hinausgehende angereicherte Metadaten — Off-Block-/On-Block-Zeiten, Nähe zum Zielflughafen und Audit-Zeitstempel. Die Blockzeit ist die Zeit von Gate zu Gate einschließlich Rollen; Off-Block = Abfahrt vom Gate, On-Block = Ankunft am Gate. Start und Landung sind die Ereignisse Abheben und Aufsetzen und unterscheiden sich von Off-Block/On-Block.
Anfrage
https://data.skylinkapi.com/v3.1/ultra/history/flight/{flight_id}| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
flight_id | string | Ja | Flug-UUID aus der Flughistorie-Suche |
MEGA-Pfad (`/mega/history/...`)Abschnitt aufklappen
https://data.skylinkapi.com/v3.1/mega/history/flight/{flight_id}Gleiche Parameter und gleiche Antwortstruktur wie bei ULTRA. Erfordert den Tarif Ultra oder Mega. flight_id-Werte sind zwischen den Stufen austauschbar.
Antwort
{
"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",
"off_block_time": null,
"on_block_time": null,
"flight_duration_min": 443.0,
"duration_source": "estimated",
"distance_nm": 2998.4,
"arrival_distance_nm": 2.1,
"confidence": 1.0,
"route_source": "vrs_confirmed",
"gps_spoofing_suspected": false,
"diversion_suspected": false,
"created_at": "2026-05-12T19:40:00Z",
"updated_at": "2026-05-13T03:15:00Z"
}Liefert dieselben Kernfelder wie eine Flugzusammenfassung sowie, sofern verfügbar, zusätzliche Anreicherungen, die nur in den Details enthalten sind.
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
| (alle Felder der Flugzusammenfassung) | - | - | - | Gleiche Struktur wie die Suchergebnisse |
off_block_time | string | null | Nein | Ja | Off-Block-Zeit, sofern bekannt (ISO 8601) |
on_block_time | string | null | Nein | Ja | On-Block-Zeit, sofern bekannt (ISO 8601) |
duration_source | string | null | Nein | Ja | Wie die Dauer berechnet wurde — bei "estimated" wurde die Blockzeit aus Positionsdaten abgeleitet statt aus aufgezeichneten Gate-Ereignissen (wichtig für ESG- oder Verspätungs-Reporting-Workflows) |
arrival_distance_nm | number | null | Nein | Ja | Entfernung von der letzten Position zum Zielflughafen (nm) |
created_at | string | null | Nein | Ja | Zeitpunkt, zu dem der Archivdatensatz angelegt wurde (ISO 8601) |
updated_at | string | null | Nein | Ja | Zeitpunkt der letzten Aktualisierung des Archivdatensatzes (ISO 8601) |
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
Rufen Sie angereicherte Metadaten für einen einzelnen archivierten Flug ab — Off-Block-/On-Block-Zeiten, Nähe zum Zielflughafen und Audit-Zeitstempel. Das folgende Beispiel knüpft an ein Ergebnis der Flugsuche an: Es nimmt die erste flight_id, ruft die vollständigen Details ab und bildet die Gate-Zeiten anschließend auf ein Anzeigeobjekt ab, mit einem Fallback, wenn die Blockzeiten null sind.
import osimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY") or os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}def fetch_flight_detail(flight_id: str, *, tier: str = "ultra") -> dict: r = requests.get( f"{BASE}/{tier}/history/flight/{flight_id}", headers=HEADERS, timeout=(10, 25), ) r.raise_for_status() return r.json()def search_one_flight(*, callsign: str = "BAW178", tier: str = "ultra") -> dict | None: r = requests.get( f"{BASE}/{tier}/history/flights", headers=HEADERS, params={"callsign": callsign, "limit": 1}, timeout=(10, 25), ) r.raise_for_status() flights = r.json().get("flights") or [] return flights[0] if flights else Noneif __name__ == "__main__": import json hit = search_one_flight() if not hit: print("No flight found") else: detail = fetch_flight_detail(hit["flight_id"]) print(json.dumps({"callsign": detail.get("callsign"), "flight_id": detail.get("flight_id"), "route": [detail.get("departure_airport_icao"), detail.get("arrival_airport_icao")]}, indent=2))Hinweise zur Implementierung
An die Suche anknüpfen. Ermitteln Sie die flight_id immer zuerst über die Flughistorie-Suche — geratene UUIDs liefern 404. Details und Suche verwenden denselben Stufenpfad (/ultra/... oder /mega/...).
Blockzeiten vs. Start/Landung. off_block_time und on_block_time sind Gate-Ereignisse; takeoff_time und landing_time bezeichnen Abheben und Aufsetzen. Beide können null sein, wenn die ADS-B-Abdeckung in der Nähe des Gates unvollständig war.
Rohe Positionshistorie. Für eine zeitlich begrenzte Zeitleiste ohne Flugsegmentierung siehe Positionshistorie.
Fehlerantworten
Tarifbedingte 401/403: Übersicht historische ADS-B-Daten. Endpoint-spezifisch:
404 — Flug nicht gefunden
{
"detail": "Flight not found"
}Wird zurückgegeben, wenn die flight_id nicht im Archiv vorhanden ist (unbekannte UUID, außerhalb der Aufbewahrungsfrist oder Tippfehler). Suchen Sie erneut mit einem engeren Zeitfenster — siehe Flughistorie-Suche.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/ultra/history/flight/00000000-0000-0000-0000-000000000001"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/mega/history/flight/00000000-0000-0000-0000-000000000001"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Flug-Track
Liefert den vollständigen ADS-B-Positions-Track eines bestimmten Flugs, automatisch auf das Zeitfenster von Start → Landung begrenzt (mit 5 Minuten Puffer auf jeder Seite). Verwenden Sie diesen Endpoint, wenn Sie eine flight_id aus der Suche haben und den Flugweg erhalten möchten, ohne das Zeitfenster selbst zu berechnen.
Anfrage
https://data.skylinkapi.com/v3.1/ultra/history/flight/{flight_id}/track| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
flight_id | string | Ja | - | Flug-UUID aus der Suche |
limit | integer | Nein | 2000 | Max. Anzahl Positionszeilen (max. 5.000 auf dem ULTRA-Pfad) |
MEGA-Pfad (`/mega/history/...`)Abschnitt aufklappen
https://data.skylinkapi.com/v3.1/mega/history/flight/{flight_id}/track| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
flight_id | string | Ja | - | Flug-UUID |
limit | integer | Nein | 5000 | Max. Anzahl Positionen (max. 10.000 auf dem MEGA-Pfad) |
Erfordert den Tarif Ultra oder Mega. Gleiche Antwortstruktur wie bei ULTRA.
Antwort
{
"flight_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"icao24": "40621d",
"callsign": "BAW178",
"registration": "G-XWBA",
"aircraft_type_icao": "B77W",
"departure_airport_icao": "EGLL",
"departure_airport_iata": "LHR",
"arrival_airport_icao": "KJFK",
"arrival_airport_iata": "JFK",
"takeoff_time": "2026-05-12T19:45:00Z",
"landing_time": "2026-05-13T03:08:00Z",
"count": 1287,
"positions": [
{
"timestamp": "2026-05-13T03:08:05Z",
"icao24": "40621d",
"latitude": 40.6413,
"longitude": -73.7781,
"altitude_baro": 0,
"ground_speed": 12,
"track": 90,
"vertical_rate": 0,
"callsign": "BAW178",
"is_on_ground": true,
"registration": "G-XWBA",
"aircraft_type": "B77W",
"gps_spoofed": false
}
]
}| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
flight_id | string | Ja | Nie | Flug-UUID |
icao24 | string | null | Nein | Ja | Hexcode des Luftfahrzeugs |
callsign | string | null | Nein | Ja | ADS-B-Rufzeichen |
registration | string | null | Nein | Ja | Kennzeichen, sofern bekannt |
aircraft_type_icao | string | null | Nein | Ja | ICAO-Typcode |
departure_airport_icao | string | null | Nein | Ja | ICAO-Code des Abflughafens |
departure_airport_iata | string | null | Nein | Ja | IATA-Code des Abflughafens |
arrival_airport_icao | string | null | Nein | Ja | ICAO-Code des Zielflughafens |
arrival_airport_iata | string | null | Nein | Ja | IATA-Code des Zielflughafens |
takeoff_time | string | null | Nein | Ja | Startzeit, die den Track begrenzt (ISO 8601) |
landing_time | string | null | Nein | Ja | Landezeit, die den Track begrenzt (ISO 8601) |
count | integer | Ja | Nie | Anzahl der Einträge in positions |
positions | array | Ja | Nie | Positions-Snapshots (neueste zuerst) |
Positions-Snapshot (positions[])
Gleiche Feldnamen wie bei Live-ADS-B-Positionen. JSON-Pfad: positions[].
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
timestamp | string | Ja | Nie | Beobachtungszeitpunkt (ISO 8601) |
icao24 | string | Ja | Nie | Hexcode des Luftfahrzeugs |
latitude | number | Ja | Nie | WGS-84-Breitengrad (Dezimalgrad) |
longitude | number | Ja | Nie | WGS-84-Längengrad (Dezimalgrad) |
altitude_baro | number | null | Nein | Ja | Barometrische Höhe in Fuß MSL |
ground_speed | number | null | Nein | Ja | Geschwindigkeit über Grund in Knoten |
track | number | null | Nein | Ja | Kurs über Grund in Grad rechtweisend |
vertical_rate | number | null | Nein | Ja | Vertikalrate in Fuß pro Minute |
callsign | string | null | Nein | Ja | ADS-B-Rufzeichen zum Zeitpunkt dieses Snapshots |
is_on_ground | boolean | Ja | Nie | true, wenn sich das Luftfahrzeug am Boden befand |
registration | string | null | Nein | Ja | Kennzeichen, sofern bekannt |
aircraft_type | string | null | Nein | Ja | ICAO-Typcode, sofern bekannt |
gps_spoofed | boolean | null | Nein | Ja | Ob dieser Snapshot als GPS-Spoofing markiert wurde |
Track-Integration
Spielen Sie einen Positions-Track von Gate zu Gate für die Kartenanzeige ab. Das folgende Beispiel knüpft an ein Suchergebnis an: Es nimmt eine flight_id, ruft den Track mit einem Lese-Timeout von 45 Sekunden ab (große Tracks können langsam sein), dünnt für eine bessere Performance von Webkarten auf jede 5. Position aus und behandelt 404, wenn ein Flug außerhalb der Aufbewahrungsfrist liegt.
import osimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY") or os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}def fetch_flight_track(flight_id: str, *, tier: str = "ultra") -> dict: r = requests.get( f"{BASE}/{tier}/history/flight/{flight_id}/track", headers=HEADERS, timeout=(10, 30), ) r.raise_for_status() return r.json()def search_one_flight(*, callsign: str = "BAW178", tier: str = "ultra") -> dict | None: r = requests.get( f"{BASE}/{tier}/history/flights", headers=HEADERS, params={"callsign": callsign, "limit": 1}, timeout=(10, 25), ) r.raise_for_status() flights = r.json().get("flights") or [] return flights[0] if flights else Noneif __name__ == "__main__": import json hit = search_one_flight() if not hit: print("No flight found") else: track = fetch_flight_track(hit["flight_id"]) print(json.dumps({"count": track.get("count"), "positions": len(track.get("positions") or [])}, indent=2))Wichtig: Track und Positionshistorie liefern positions mit den neuesten Einträgen zuerst. Kehren Sie die Reihenfolge für die Wiedergabe auf der Karte chronologisch um. Bei einer Abtastung alle 5 Sekunden umfasst ein 10-stündiger Flug ~7.200 Punkte — dünnen Sie die Daten für Webkarten aus.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Query Parameters
Max position rows (default 2000, max 5000)
20001 <= value <= 5000Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/ultra/history/flight/00000000-0000-0000-0000-000000000001/track"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Query Parameters
Max position rows (default 5000, max 10000)
50001 <= value <= 10000Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/mega/history/flight/00000000-0000-0000-0000-000000000001/track"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}