Save up to 17% with yearly billing

See pricing

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

Auth
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

Tarif

Pro, Ultra oder Mega — mit BASIC können keine Webhooks erstellt werden

Mehr erfahren →

Senden Sie POST mit einem JSON-Body.

POSThttps://data.skylinkapi.com/v3.1/webhooks
FeldTypErforderlichBeschreibung
urlstringJaHTTPS-Callback-URL, an die SkyLink per POST sendet
event_typesstring[]JaEin oder mehrere Ereignistyp-Strings (siehe Ereignistypen)
filtersobjectJaMuss 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
}
FeldTypErforderlichBeschreibung
idstringJaUUID des Abonnements — als webhook_id in den Pfaden für Patch/Delete verwenden
urlstringJaRegistrierte Callback-URL
event_typesstring[]JaAbonnierte Ereignisse
filtersobjectJaFilterobjekt (enthält flight_number)
activebooleanJaOb Zustellungen aktiviert sind
POST
/webhooks
x-api-key<token>

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

In: header

Header Parameters

x-api-key?string|null
x-rapidapi-proxy-secret?string|null
x-rapidapi-user?string|null
x-rapidapi-subscription?string|null
x-rapidapi-version?string|null

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.

GEThttps://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
    }
  ]
}
FeldTypErforderlichBeschreibung
countintegerJaAnzahl der zurückgegebenen Abonnements
webhooksarrayJaAbonnementobjekte (gleicher Aufbau wie die Antwort beim Erstellen)
GET
/webhooks
x-api-key<token>

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

In: header

Header Parameters

x-api-key?string|null
x-rapidapi-proxy-secret?string|null
x-rapidapi-user?string|null

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.

PATCHhttps://data.skylinkapi.com/v3.1/webhooks/{webhook_id}
ParameterTypErforderlichBeschreibung
webhook_idstring (path)JaUUID des Abonnements aus Erstellen/Auflisten
Body-FeldTypErforderlichBeschreibung
activebooleanJatrue, um Zustellungen fortzusetzen, false, um sie zu pausieren
{ "active": false }

200 OK — liefert das aktualisierte Abonnementobjekt (gleiche Felder wie die Antwort beim Erstellen).

PATCH
/webhooks/{webhook_id}
x-api-key<token>

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

In: header

Path Parameters

webhook_id*Webhook Id

Header Parameters

x-api-key?string|null
x-rapidapi-proxy-secret?string|null
x-rapidapi-user?string|null

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

active*Active

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.

DELETEhttps://data.skylinkapi.com/v3.1/webhooks/{webhook_id}
ParameterTypErforderlichBeschreibung
webhook_idstring (path)JaUUID des Abonnements

204 No Content — leerer Body bei Erfolg.

DELETE
/webhooks/{webhook_id}
x-api-key<token>

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

In: header

Path Parameters

webhook_id*Webhook Id

Header Parameters

x-api-key?string|null
x-rapidapi-proxy-secret?string|null
x-rapidapi-user?string|null

Response Body

application/json

curl -X DELETE "https://data.skylinkapi.com/v3.1/webhooks/00000000-0000-0000-0000-000000000001"
Empty
{
  "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.

GEThttps://data.skylinkapi.com/v3.1/webhooks/events
{
  "event_types": [
    "flight_boarding",
    "flight_cancelled",
    "flight_delayed",
    "flight_landed",
    "gate_changed",
    "status_changed"
  ]
}
EreignisAuslöser
status_changedSammelereignis — ein beliebiges überwachtes Feld hat sich geändert
flight_delayedDer Status weist auf eine Verspätung hin oder die Abflugzeit hat sich geändert
flight_cancelledFlug annulliert
flight_boardingBoarding läuft
flight_landedFlug gelandet / angekommen
gate_changedAbflug- 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))
GET
/webhooks/events
x-api-key<token>

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"
null

Client-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.