Save up to 17% with yearly billing

See pricing

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

Auth
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →
Tarif

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

GEThttps://data.skylinkapi.com/v3.1/ultra/history/flight/{flight_id}
ParameterTypErforderlichBeschreibung
flight_idstringJaFlug-UUID aus der Flughistorie-Suche
MEGA-Pfad (`/mega/history/...`)Abschnitt aufklappen
GEThttps://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.

FeldTypErforderlichNull?Beschreibung
(alle Felder der Flugzusammenfassung)---Gleiche Struktur wie die Suchergebnisse
off_block_timestring | nullNeinJaOff-Block-Zeit, sofern bekannt (ISO 8601)
on_block_timestring | nullNeinJaOn-Block-Zeit, sofern bekannt (ISO 8601)
duration_sourcestring | nullNeinJaWie 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_nmnumber | nullNeinJaEntfernung von der letzten Position zum Zielflughafen (nm)
created_atstring | nullNeinJaZeitpunkt, zu dem der Archivdatensatz angelegt wurde (ISO 8601)
updated_atstring | nullNeinJaZeitpunkt 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.

GET
/ultra/history/flight/{flight_id}
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Path Parameters

flight_id*Flight Id

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": {}
    }
  ]
}
GET
/mega/history/flight/{flight_id}
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Path Parameters

flight_id*Flight Id

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

GEThttps://data.skylinkapi.com/v3.1/ultra/history/flight/{flight_id}/track
ParameterTypErforderlichStandardBeschreibung
flight_idstringJa-Flug-UUID aus der Suche
limitintegerNein2000Max. Anzahl Positionszeilen (max. 5.000 auf dem ULTRA-Pfad)
MEGA-Pfad (`/mega/history/...`)Abschnitt aufklappen
GEThttps://data.skylinkapi.com/v3.1/mega/history/flight/{flight_id}/track
ParameterTypErforderlichStandardBeschreibung
flight_idstringJa-Flug-UUID
limitintegerNein5000Max. 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
    }
  ]
}
FeldTypErforderlichNull?Beschreibung
flight_idstringJaNieFlug-UUID
icao24string | nullNeinJaHexcode des Luftfahrzeugs
callsignstring | nullNeinJaADS-B-Rufzeichen
registrationstring | nullNeinJaKennzeichen, sofern bekannt
aircraft_type_icaostring | nullNeinJaICAO-Typcode
departure_airport_icaostring | nullNeinJaICAO-Code des Abflughafens
departure_airport_iatastring | nullNeinJaIATA-Code des Abflughafens
arrival_airport_icaostring | nullNeinJaICAO-Code des Zielflughafens
arrival_airport_iatastring | nullNeinJaIATA-Code des Zielflughafens
takeoff_timestring | nullNeinJaStartzeit, die den Track begrenzt (ISO 8601)
landing_timestring | nullNeinJaLandezeit, die den Track begrenzt (ISO 8601)
countintegerJaNieAnzahl der Einträge in positions
positionsarrayJaNiePositions-Snapshots (neueste zuerst)

Positions-Snapshot (positions[])

Gleiche Feldnamen wie bei Live-ADS-B-Positionen. JSON-Pfad: positions[].

FeldTypErforderlichNull?Beschreibung
timestampstringJaNieBeobachtungszeitpunkt (ISO 8601)
icao24stringJaNieHexcode des Luftfahrzeugs
latitudenumberJaNieWGS-84-Breitengrad (Dezimalgrad)
longitudenumberJaNieWGS-84-Längengrad (Dezimalgrad)
altitude_baronumber | nullNeinJaBarometrische Höhe in Fuß MSL
ground_speednumber | nullNeinJaGeschwindigkeit über Grund in Knoten
tracknumber | nullNeinJaKurs über Grund in Grad rechtweisend
vertical_ratenumber | nullNeinJaVertikalrate in Fuß pro Minute
callsignstring | nullNeinJaADS-B-Rufzeichen zum Zeitpunkt dieses Snapshots
is_on_groundbooleanJaNietrue, wenn sich das Luftfahrzeug am Boden befand
registrationstring | nullNeinJaKennzeichen, sofern bekannt
aircraft_typestring | nullNeinJaICAO-Typcode, sofern bekannt
gps_spoofedboolean | nullNeinJaOb 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.

GET
/ultra/history/flight/{flight_id}/track
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Path Parameters

flight_id*Flight Id

Query Parameters

limit?Limit

Max position rows (default 2000, max 5000)

Default2000
Range1 <= value <= 5000

Response 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": {}
    }
  ]
}
GET
/mega/history/flight/{flight_id}/track
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Path Parameters

flight_id*Flight Id

Query Parameters

limit?Limit

Max position rows (default 5000, max 10000)

Default5000
Range1 <= value <= 10000

Response 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": {}
    }
  ]
}