# Callback-Zustellung

Zustellung eingehender Webhook-Callbacks — Aufbau des HTTP-POST-Bodys, Flugstatus-Felder und Semantik bei Zustellungsfehlern.



Wenn ein abonniertes Ereignis eintritt, sendet SkyLink einen HTTP-<HttpMethod>POST</HttpMethod> an Ihre registrierte `url` mit `Content-Type: application/json`.

**Wichtig:** Ihr Endpoint muss &#x2A;*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](/docs/v31/webhooks) beschrieben.

## Request-Body [#request-body]

Die Payload kombiniert Zustellungsmetadaten mit den aktuellen Feldern des [Flugstatus](/docs/v31/flight-status) (gleicher Aufbau von `departure` / `arrival`):

```json
{
  "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](/docs/v31/webhooks-subscriptions#event-types) |
| `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](/docs/v31/flight-status#top-level-fields)     |
| `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](/docs/v31/flight-status#implementation-notes).

## Client-Typen [#client-types]

Enthält `WebhookDelivery` und die Strukturen für Abonnements — dasselbe Paket wie unter [Abonnements](/docs/v31/webhooks-subscriptions#client-types):

<DocClientTypes id="v31/webhooks/subscription-types" />

## Integration [#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.

<DocExample id="v31/webhooks/callback-handler" />

### Hinweise zur Implementierung [#implementation-notes]

**Wichtig:*&#x2A; Deduplizieren Sie anhand von &#x2A;*`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](/docs/v31/webhooks-subscriptions#enable-disable-webhook). SkyLink stellt verpasste Ereignisse nicht erneut zu.

**Nur HTTPS.** Ihre Callback-URL muss öffentlich über TLS erreichbar sein.

## Fehlerantworten [#error-responses]

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](/docs/v31/webhooks#error-responses).
