Webhook-Abonnements
Erstellen, listen, aktivieren, deaktivieren und löschen Sie Webhook-Abonnements für Ihren API-Schlüssel. Jedes Abonnement überwacht eine flight_number und stellt passende Ereignisse an Ihre HTTPS-Callback-URL zu — den Body des eingehenden POST finden Sie unter Callback-Zustellung. Tariflimits und Abfrageintervall: Webhooks-Übersicht.
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →Webhook erstellen
Registrieren Sie eine HTTPS-URL, die POST-Anfragen empfängt, wenn abonnierte Ereignisse für einen gefilterten Flug eintreten.
Voraussetzungen
Pro, Ultra oder Mega — mit BASIC können keine Webhooks erstellt werden
Mehr erfahren →Senden Sie POST mit einem JSON-Body.
https://data.skylinkapi.com/v3.1/webhooks| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
url | string | Ja | HTTPS-Callback-URL, an die SkyLink per POST sendet |
event_types | string[] | Ja | Ein oder mehrere Ereignistyp-Strings (siehe Ereignistypen) |
filters | object | Ja | Muss flight_number enthalten — die zu überwachende IATA-Flugnummer, z. B. BA123 |
{
"url": "https://your-server.example.com/webhook",
"event_types": ["flight_delayed", "flight_landed", "gate_changed"],
"filters": {
"flight_number": "BA123"
}
}201 Created — liefert das erstellte Abonnementobjekt:
{
"id": "00000000-0000-0000-0000-000000000001",
"url": "https://your-server.example.com/webhook",
"event_types": ["flight_delayed", "flight_landed", "gate_changed"],
"filters": { "flight_number": "BA123" },
"active": true
}| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
id | string | Ja | UUID des Abonnements — als webhook_id in den Pfaden für Patch/Delete verwenden |
url | string | Ja | Registrierte Callback-URL |
event_types | string[] | Ja | Abonnierte Ereignisse |
filters | object | Ja | Filterobjekt (enthält flight_number) |
active | boolean | Ja | Ob Zustellungen aktiviert sind |
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Header Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://data.skylinkapi.com/v3.1/webhooks" \ -H "Content-Type: application/json" \ -d '{ "event_types": [ "flight_delayed", "flight_landed", "gate_changed" ], "filters": { "flight_number": "BA123" }, "url": "https://your-server.example.com/webhook" }'null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Webhooks auflisten
Liefert alle Webhook-Abonnements, die Ihrem API-Schlüssel zugeordnet sind.
https://data.skylinkapi.com/v3.1/webhooks{
"count": 1,
"webhooks": [
{
"id": "00000000-0000-0000-0000-000000000001",
"url": "https://your-server.example.com/webhook",
"event_types": ["status_changed"],
"filters": { "flight_number": "BA123" },
"active": true
}
]
}| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
count | integer | Ja | Anzahl der zurückgegebenen Abonnements |
webhooks | array | Ja | Abonnementobjekte (gleicher Aufbau wie die Antwort beim Erstellen) |
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Header Parameters
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/webhooks"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Webhook aktivieren / deaktivieren
Schalten Sie ein Abonnement ein oder aus, ohne es zu löschen. Verwenden Sie dies, um Zustellungen fortzusetzen, nachdem Sie einen fehlerhaften Endpoint behoben haben — siehe Callback-Zustellung.
Senden Sie PATCH mit der ID des Abonnements im Pfad.
https://data.skylinkapi.com/v3.1/webhooks/{webhook_id}| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
webhook_id | string (path) | Ja | UUID des Abonnements aus Erstellen/Auflisten |
| Body-Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
active | boolean | Ja | true, um Zustellungen fortzusetzen, false, um sie zu pausieren |
{ "active": false }200 OK — liefert das aktualisierte Abonnementobjekt (gleiche Felder wie die Antwort beim Erstellen).
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Header Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://data.skylinkapi.com/v3.1/webhooks/00000000-0000-0000-0000-000000000001" \ -H "Content-Type: application/json" \ -d '{ "active": true }'null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Webhook löschen
Entfernt ein Abonnement dauerhaft. Sie können nur Webhooks löschen, die mit Ihrem API-Schlüssel erstellt wurden.
https://data.skylinkapi.com/v3.1/webhooks/{webhook_id}| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
webhook_id | string (path) | Ja | UUID des Abonnements |
204 No Content — leerer Body bei Erfolg.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Header Parameters
Response Body
application/json
curl -X DELETE "https://data.skylinkapi.com/v3.1/webhooks/00000000-0000-0000-0000-000000000001"{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Ereignistypen
Liefert die unterstützten Strings für Webhook-Ereignistypen für das Array event_types beim Erstellen eines Abonnements.
https://data.skylinkapi.com/v3.1/webhooks/events{
"event_types": [
"flight_boarding",
"flight_cancelled",
"flight_delayed",
"flight_landed",
"gate_changed",
"status_changed"
]
}| Ereignis | Auslöser |
|---|---|
status_changed | Sammelereignis — ein beliebiges überwachtes Feld hat sich geändert |
flight_delayed | Der Status weist auf eine Verspätung hin oder die Abflugzeit hat sich geändert |
flight_cancelled | Flug annulliert |
flight_boarding | Boarding läuft |
flight_landed | Flug gelandet / angekommen |
gate_changed | Abflug- oder Ankunftsgate hat sich geändert |
Rufen Sie die unterstützten Ereignistyp-Strings einmal beim Start ab und hinterlegen Sie sie im Dropdown Ihres Abonnementformulars.
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 list_webhook_event_types() -> list[str]: """Return supported webhook event type strings.""" r = requests.get(f"{BASE}/webhooks/events", headers=HEADERS, timeout=(10, 15)) r.raise_for_status() return r.json()["event_types"]if __name__ == "__main__": import json print(json.dumps(list_webhook_event_types(), indent=2))Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Response Body
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/webhooks/events"nullClient-Typen
"""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
Webhook-Integrationen im Produktivbetrieb registrieren ein Abonnement pro überwachtem Flug (oder verwenden eine einzige URL mit serverseitigem Routing), prüfen eingehende Zustellungen und pausieren Abonnements, wenn Reisen abgeschlossen sind. Das folgende Beispiel listet Ereignistypen und bestehende Abonnements auf und zeigt Hilfsfunktionen für Erstellen/Patch/Delete mit Timeouts.
Ihr Callback-Endpoint sollte schnell mit 2xx antworten. Den Body des eingehenden POST und Beispiele für Handler finden Sie unter Callback-Zustellung.
import osimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}def list_webhook_event_types() -> list[str]: """Return supported webhook event type strings.""" r = requests.get(f"{BASE}/webhooks/events", headers=HEADERS, timeout=(10, 15)) r.raise_for_status() return r.json()["event_types"]def list_webhooks() -> dict: """List webhook subscriptions for the current API key.""" r = requests.get(f"{BASE}/webhooks", headers=HEADERS, timeout=(10, 15)) r.raise_for_status() return r.json()def create_webhook(*, url: str, event_types: list[str], flight_number: str) -> dict: """Create a webhook subscription for a single flight.""" body = { "url": url, "event_types": event_types, "filters": {"flight_number": flight_number.upper().replace(" ", "")}, } r = requests.post(f"{BASE}/webhooks", headers=HEADERS, json=body, timeout=(10, 20)) r.raise_for_status() return r.json()def set_webhook_active(webhook_id: str, *, active: bool) -> dict: """Enable or disable a webhook without deleting it.""" r = requests.patch( f"{BASE}/webhooks/{webhook_id}", headers=HEADERS, json={"active": active}, timeout=(10, 15), ) r.raise_for_status() return r.json()def delete_webhook(webhook_id: str) -> None: """Permanently delete a webhook subscription.""" r = requests.delete(f"{BASE}/webhooks/{webhook_id}", headers=HEADERS, timeout=(10, 15)) r.raise_for_status()if __name__ == "__main__": import json events = list_webhook_event_types() print(json.dumps(events, indent=2))Hinweise zur Implementierung
Wichtig: Verwenden Sie einen öffentlich erreichbaren HTTPS-Endpoint. Für die lokale Entwicklung ist in der Regel ein Tunnel erforderlich (ngrok, Cloudflare Tunnel).
Wichtig: Dasselbe Gate oder derselbe Status kann über mehrere Abfragen hinweg mehrere Ereignisse auslösen — deduplizieren Sie in Ihrem Handler anhand von flight_number + event_type + timestamp.
Wiederherstellung nach automatischer Deaktivierung. Beheben Sie das Problem an Ihrem Endpoint und senden Sie dann einen PATCH an das Abonnement mit { "active": true }, um die Zustellungen fortzusetzen. SkyLink stellt verpasste Ereignisse nicht erneut zu.
Fehlerantworten
Tarifbedingtes 403: Webhooks-Übersicht. Endpointspezifisch:
404 — nicht gefunden oder nicht Ihr Eigentum
{
"detail": "Webhook not found or not owned by you"
}Wird von Patch und Delete zurückgegeben, wenn die webhook_id unbekannt ist oder zu einem anderen API-Schlüssel gehört.
Webhooks & Benachrichtigungen
Push-Benachrichtigungen bei Flugstatusänderungen – Webhook-Abonnements nach Flugnummer erstellen, auflisten, aktivieren, deaktivieren und löschen.
Callback-Zustellung
Zustellung eingehender Webhook-Callbacks — Aufbau des HTTP-POST-Bodys, Flugstatus-Felder und Semantik bei Zustellungsfehlern.