Callback-Zustellung
Wenn ein abonniertes Ereignis eintritt, sendet SkyLink einen HTTP-POST an Ihre registrierte url mit Content-Type: application/json.
Wichtig: Ihr Endpoint muss innerhalb von ca. 30 Sekunden mit 2xx antworten — langsame Handler zählen zum Limit von 10 aufeinanderfolgenden Fehlern, nach dem das Abonnement automatisch deaktiviert wird, wie in der Webhooks-Übersicht beschrieben.
Request-Body
Die Payload kombiniert Zustellungsmetadaten mit den aktuellen Feldern des Flugstatus (gleicher Aufbau von departure / arrival):
{
"event_type": "gate_changed",
"timestamp": "2026-06-16T14:25:00Z",
"webhook_id": "00000000-0000-0000-0000-000000000001",
"flight_number": "BA 123",
"airline": "British Airways",
"status": "En Route",
"departure": {
"airport": "EGLL",
"airport_full": "London Heathrow Airport",
"scheduled_time": "10:30",
"scheduled_date": "11 Feb",
"actual_time": "10:35",
"actual_date": "11 Feb",
"terminal": "5",
"gate": "A12",
"checkin": ""
},
"arrival": {
"airport": "KJFK",
"airport_full": "John F Kennedy International Airport",
"scheduled_time": "14:45",
"scheduled_date": "11 Feb",
"estimated_time": "14:50",
"estimated_date": "11 Feb",
"terminal": "7",
"gate": "B15",
"baggage": ""
}
}| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
event_type | string | Ja | Welches abonnierte Ereignis eingetreten ist — siehe Ereignistypen |
timestamp | string (ISO 8601) | Ja | Zeitpunkt, zu dem SkyLink die Änderung erkannt und die Zustellung eingereiht hat — für Idempotenz verwenden |
webhook_id | string | Ja | UUID des Abonnements aus Erstellen/Auflisten |
flight_number | string | Ja | Aktuelle Flugnummer (Anzeigeformat, kann ein Leerzeichen enthalten) |
airline | string | Ja | Anzeigename der Fluggesellschaft |
status | string | Ja | Aktuelle Statusbezeichnung — gleiche Semantik wie beim Flugstatus |
departure | object | Ja | Abflugblock — Feld für Feld identisch mit dem Flugstatus |
arrival | object | Ja | Ankunftsblock — Feld für Feld identisch mit dem Flugstatus |
Felder für Gate, Terminal und Gepäckband können leere Strings sein, wenn sie nicht veröffentlicht sind — behandeln Sie sie genauso wie in den Hinweisen zur Integration des Flugstatus.
Client-Typen
Enthält WebhookDelivery und die Strukturen für Abonnements — dasselbe Paket wie unter Abonnements:
"""Webhook subscription models."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass WebhookCreateRequest: url: str event_types: list[str] filters: dict[str, str]@dataclassclass WebhookSubscription: id: str url: str event_types: list[str] filters: dict[str, str] active: bool@dataclassclass WebhookListResponse: count: int webhooks: list[WebhookSubscription]@dataclassclass WebhookEventTypesResponse: event_types: list[str]@dataclassclass WebhookDelivery: """Inbound POST body SkyLink sends to your callback URL.""" event_type: str timestamp: str webhook_id: str flight_number: str airline: str status: str departure: dict[str, str] arrival: dict[str, str]Integration
Ein Webhook-Handler empfängt POST-Anfragen von SkyLink, prüft die Payload, speichert den Idempotenzstatus und gibt schnell 2xx zurück. Das folgende Beispiel implementiert einen minimalen Handler in Python (FastAPI) und TypeScript (Express), zeigt die Deduplizierung und aktiviert ein Abonnement nach einer automatischen Deaktivierung per PATCH wieder.
"""Minimal webhook payload handler - validates shape and extracts gate changes."""from dataclasses import dataclass@dataclassclass GateChange: flight_number: str event_type: str airport: str gate: strdef parse_gate_change(payload: dict) -> GateChange | None: """Return a gate change summary when event_type is gate_changed.""" if payload.get("event_type") != "gate_changed": return None dep = payload.get("departure") or {} arr = payload.get("arrival") or {} gate = dep.get("gate") or arr.get("gate") or "" airport = dep.get("airport") or arr.get("airport") or "" return GateChange( flight_number=str(payload.get("flight_number", "")), event_type=str(payload.get("event_type", "")), airport=airport, gate=gate, )SAMPLE_PAYLOAD = { "event_type": "gate_changed", "timestamp": "2026-06-16T14:25:00Z", "webhook_id": "00000000-0000-0000-0000-000000000001", "flight_number": "BA 123", "airline": "British Airways", "status": "En Route", "departure": {"airport": "EGLL", "gate": "A12"}, "arrival": {"airport": "KJFK", "gate": "B15"},}if __name__ == "__main__": change = parse_gate_change(SAMPLE_PAYLOAD) print(change if change else "No gate change in payload")Hinweise zur Implementierung
Wichtig: Deduplizieren Sie anhand von flight_number + event_type + timestamp — dieselbe Änderung kann über mehrere Abfragezyklen hinweg mehr als einmal zugestellt werden.
Wiederherstellung nach automatischer Deaktivierung. Beheben Sie das Problem an Ihrem Endpoint und senden Sie dann einen PATCH an das Abonnement mit { "active": true } — siehe Webhook aktivieren / deaktivieren. SkyLink stellt verpasste Ereignisse nicht erneut zu.
Nur HTTPS. Ihre Callback-URL muss öffentlich über TLS erreichbar sein.
Fehlerantworten
Zustellungsfehler (kein 2xx oder Zeitüberschreitung) erhöhen den Zähler aufeinanderfolgender Fehler des Abonnements. Nach 10 Fehlern deaktiviert SkyLink das Abonnement automatisch — tarifbedingtes 403 beim Erstellen: Webhooks-Übersicht.