Save up to 17% with yearly billing

See pricing

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": ""
  }
}
FeldTypErforderlichBeschreibung
event_typestringJaWelches abonnierte Ereignis eingetreten ist — siehe Ereignistypen
timestampstring (ISO 8601)JaZeitpunkt, zu dem SkyLink die Änderung erkannt und die Zustellung eingereiht hat — für Idempotenz verwenden
webhook_idstringJaUUID des Abonnements aus Erstellen/Auflisten
flight_numberstringJaAktuelle Flugnummer (Anzeigeformat, kann ein Leerzeichen enthalten)
airlinestringJaAnzeigename der Fluggesellschaft
statusstringJaAktuelle Statusbezeichnung — gleiche Semantik wie beim Flugstatus
departureobjectJaAbflugblock — Feld für Feld identisch mit dem Flugstatus
arrivalobjectJaAnkunftsblock — 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.