WEBHOOKS

Webhooks

Erhalten Sie Echtzeitereignisse von Superroute — Bestellungen, Statusänderungen, Tracking-Updates. Mit signierten Payloads, automatischen Wiederholungen und integriertem Debugger.

Webhook-Integrationsleitfaden
Entwickler-Center Startseite

Webhook-Integrationsleitfaden

Was sind Webhooks?

Ein Webhook ist eine HTTP-POST-Anfrage, die Superroute an eine von Ihnen konfigurierte URL sendet, sobald ein Ereignis eintritt — eine Bestellung wird erstellt, eine Lieferung abgeschlossen, ein Tracking-Ereignis erfasst. Sie erstellen einen Empfangsendpunkt, wir liefern das Ereignis dorthin.

Wie die Zustellung funktioniert

Ereignisse werden in eine Warteschlange eingereiht und asynchron gesendet. Jede Anfrage trägt eine HMAC-SHA256-Signatur, mit der Sie die Herkunft prüfen können. Fehlgeschlagene Zustellungen (nicht 2xx oder Timeout) werden mit exponentiellem Backoff bis zu 5-mal wiederholt.

Sicherheitsmodell

Sie konfigurieren ein gemeinsames Geheimnis auf der Einstellungsseite. Jeder ausgehende Webhook wird damit signiert. Ihr Empfänger berechnet die Signatur neu und vergleicht — bei Übereinstimmung ist die Payload echt und unverändert.

Ereigniskatalog

Acht ausgehende Ereignistypen sind verfügbar. Jeder hat ein eigenes URL-Feld auf der Einstellungsseite — abonnieren Sie eine beliebige Teilmenge.

Auftrag.erstellt

Wird ausgelöst, sobald eine lokale Lieferbestellung (Delivery / Pickup / P2P) angelegt wird — über beliebigen Weg: Webformular, REST/GraphQL-API, E-Commerce-Plattform-Synchronisation, automatische Regeln, Importzeilen usw. Label-Service- und andere Nicht-Lieferarten sind ausgeschlossen. Wird im Batch-Flow übersprungen, wenn für denselben Empfänger auch order_create_async_postback_url konfiguriert ist. Konfigurieren Sie mit order_create_webhook_url.

Payload-Beispiele
order.status_change

Wird bei jedem Statuswechsel ausgelöst — abgeholt, unterwegs, zugestellt, Ausnahme, storniert. Konfigurieren Sie mit order_status_change_webhook_url.

Payload-Beispiele
Tracking.Event

Wird bei jedem Tracking-Lebenszyklusereignis ausgelöst (Daten übermittelt, Zustellung gestartet, erfolgreich zugestellt usw.). Konfigurieren Sie mit tracking_event_webhook_url. Zustell- und Abholereignisse enthalten außerdem den Zustellnachweis: proof_files sowie proof_files_detail (file_id, type, url, full_url, signierte Download-URL). Nach dem Ereignis hochgeladene Fotos kommen als pod.files_updated. Jede Datei trägt zusätzlich ihren Ereigniskontext: tracking_event_id, tracking_event_status_id, tracking_event_key, service_type (1 = delivery / 2 = pickup) und service_status (1 = success / 2 = failed); bei Altdateien ohne erfasstes Ereignis sind sie null.

Payload-Beispiele
order.create_async

Wird einmal ausgelöst, nachdem ein Stapelimport abgeschlossen ist. Payload enthält die Ergebnisse pro Zeile. Konfigurieren Sie mit order_create_async_postback_url.

Payload-Beispiele
POD-Dateien aktualisiert

Wird ausgelöst, wenn ein Zustellfoto oder eine Unterschrift hinzugefügt, ersetzt oder entfernt wird (action: added / updated / removed) — eine Zustellung pro Datei, kein Abfragen von Anhängen mehr. Aktivierung über pod_files_webhook_url. Jede Datei trägt zusätzlich ihren Ereigniskontext: tracking_event_id, tracking_event_status_id, tracking_event_key, service_type (1 = delivery / 2 = pickup) und service_status (1 = success / 2 = failed); bei Altdateien ohne erfasstes Ereignis sind sie null.

Payload-Beispiele
Bestellung gelöscht

Wird ausgelöst, wenn eine Bestellung endgültig gelöscht wird, damit Ihr System die Entfernung nachvollziehen kann. Aktivierung über order_deleted_webhook_url.

Payload-Beispiele
Stornierung fehlgeschlagen

Wird ausgelöst, wenn ein Stornierungsversuch abgelehnt wird (z. B. weil die Bestellung bereits in Zustellung ist), damit Ihre Betriebsprozesse fehlgeschlagene Stornierungen ohne API-Abfragen überwachen können. Aktivierung über order_cancel_failed_webhook_url.

Payload-Beispiele
Routen-Board-Platz geändert

Wird ausgelöst, wenn ein Platz auf dem Routen-Board den Besitzer wechselt oder das Board seinen Status ändert — das Feld action sagt, was passiert ist (claimed, standby, pooled, promoted, withdrawn, vetoed, replaced, assigned, awarded, lost, displaced, settled, board_opened, board_closed, board_cancelled). Nur auf Unternehmensebene. Opt-in über route_board_webhook_url.

Payload-Beispiele

Anbieter-Schließfach-Ereignisse

Ein eigener Webhook-Kanal für Drittanbieter-ZustellAnbieter mit Smart-Locker-Anbindung. Ereignisse werden an den für Ihr Anbieterkonto konfigurierten Endpunkt zugestellt; jeder Endpunkt kann eine beliebige Teilmenge der Ereignistypen abonnieren.

partner_locker.delivery.doors_opened

Türen Geöffnet — Wird ausgelöst, sobald sich die Fachtüren für einen Zustellversuch öffnen — egal ob der Kurier den Zugangscode am Bildschirm des Schließfachs eingegeben oder die Fernöffnungs-API genutzt hat — einschließlich erneuter Öffnungen nach Fachwechsel. Der opening-Block listet jedes geöffnete Fach mit grid_id, Hardware-Fachnummer compartment_number und pickup_locker_number (fortlaufende Anzeigenummer, spaltenweise von oben nach unten, dann von links nach rechts). Jedes Fach führt zusätzlich pickup_locker_code — die Bezeichnung "{shelf_code}-{pickup_locker_number}", zu der der Empfänger geschickt wird; null, wenn das Fach keine Abholnummer hat. Die Nutzlast enthält außerdem pickup_code — den Abholcode des Empfängers, der im Moment des Türöffnens vergeben wird; er bleibt nach der Einlegebestätigung des Kuriers derselbe Code und kann erst nach dieser Bestätigung zur Abholung verwendet werden.

Payload-Beispiele
partner_locker.delivery.delivered

In Paketfach zugestellt — Wird ausgelöst, wenn eine Einlagerung bestätigt wurde und die Pakete im Schließfach liegen. Die Nutzlast enthält den Abholcode des Empfängers. Jedes Fach führt zusätzlich pickup_locker_code — die Bezeichnung "{shelf_code}-{pickup_locker_number}", zu der der Empfänger geschickt wird; null, wenn das Fach keine Abholnummer hat. Bei über die Fernöffnungs-API geöffneten Türen schließt die Plattform die Einlagerung selbst ab, sobald der Schrank alle geöffneten Türen als geschlossen meldet; das Ereignis wird dann ohne confirm-Aufruf ausgelöst. confirmed_by nennt den Abschlussweg: courier_terminal, partner_api, door_close, timeout_door_closed oder console.

Payload-Beispiele
partner_locker.pickup.completed

Abgeholt — Wird ausgelöst, wenn der Empfänger die eingelagerten Pakete abgeholt hat.

Payload-Beispiele
partner_locker.delivery.failed

Zustellung fehlgeschlagen — Wird ausgelöst, wenn eine Zustellung fehlschlägt; Fehlercodes pro Paket sind enthalten.

Payload-Beispiele
partner_locker.delivery.expired

Abgelaufen — Wird ausgelöst, wenn ein ungenutzter Zustellcode oder eine nicht abgeholte Einlagerung die Ablaufzeit überschreitet.

Payload-Beispiele
partner_locker.delivery.cancelled

Storniert — Wird ausgelöst, wenn eine Zustellung vor Abschluss storniert wird.

Payload-Beispiele
partner_locker.delivery.correction_reopened

Korrektur-Öffnung — Wird ausgelöst, wenn die belegten Fächer innerhalb des Korrekturfensters erneut geöffnet werden, um eine falsche Platzierung zu beheben — am Schließfach-Bildschirm oder über die API. Der correction-Block listet die wieder geöffneten Fächer auf. Jedes Fach führt zusätzlich pickup_locker_code — die Bezeichnung "{shelf_code}-{pickup_locker_number}", zu der der Empfänger geschickt wird; null, wenn das Fach keine Abholnummer hat.

Payload-Beispiele
partner_locker.delivery.code_rotated

partner_locker_delivery.event_type_code_rotated — Wird ausgelöst, wenn der Partner den Zustell- oder Abholcode einer Zustellung erneuert. Der rotation-Block nennt, welcher Code ersetzt wurde, wann, und ob die Empfängerbenachrichtigung erneut gesendet wurde — der neue Code selbst wird nie per Webhook übertragen; er wird nur in der direkten Antwort der Rotations-API offengelegt.

Payload-Beispiele

Signatur & Verifikation: Anbieter-Schließfach-Webhooks verwenden ein eigenes Signaturverfahren: X-Webhook-Signature ist base64(HMAC-SHA256(Secret, Zeitstempel + "\n" + Zustellungs-ID + "\n" + Roh-Body)), wobei Zeitstempel und Zustellungs-ID aus den Headern X-Webhook-Timestamp und X-Webhook-Delivery-Id stammen. Prüfen Sie außerdem X-Webhook-Content-Digest (SHA-256 des Bodys) und weisen Sie veraltete Zeitstempel zurück. X-Webhook-Id bleibt über Wiederholungen hinweg stabil — nutzen Sie sie für Idempotenz.

Konfiguration: Endpunkte werden unter Drittanbieter-Zustellung → Anbieter-Schließfach → Einstellungen verwaltet, ein Endpunkt pro Anbieter, mit auswählbarer Ereignisliste. Fehlgeschlagene Zustellungen werden mit exponentiellem Backoff bis zu 7-mal wiederholt, bevor sie in die Dead-Letter-Liste wandern; Dead-Letter-Ereignisse können auf der Ereignisseite manuell erneut gesendet werden.

Sandbox-Ereignisse (Mock-Schränke): Zustellungen an Mock-Schränke erzeugen dieselben Webhook-Ereignisse wie die Produktion und werden mit demselben Secret signiert, sodass Sie mit realistischem Traffic entwickeln können. Sandbox-Ereignisse sind dreifach gekennzeichnet: Die Payload enthält "livemode": false, die event_id beginnt mit PLE-MOCK- und die Anfrage trägt den Header X-Webhook-Test: 1. Ist am Endpunkt eine Sandbox-URL konfiguriert, gehen Sandbox-Ereignisse dorthin statt an die Produktions-URL; andernfalls fallen sie – weiterhin gekennzeichnet – auf die Produktions-URL zurück. Der Schalter „Sandbox-Ereignisse zustellen" stoppt die Sandbox-Zustellung vollständig.

Drittanbieter-Zustellereignisse

Paketzustellungs-Webhooks, die an Drittanbieter-Zustelldienste (Kuriere) gesendet werden. Sie decken den Lebenszyklus der Zustellungszuweisungen ab, sodass ein Kurier nicht mehr nach neuen Aufträgen pollen muss. Diese Kategorie ist von den Smart-Locker-Ereignissen unten getrennt: Jeder Anbieter konfiguriert pro Kategorie einen eigenen Endpunkt, Signaturschlüssel und ein eigenes Ereignisabonnement — in seinem eigenen Anbieterportal oder durch den Plattformbetreiber.

delivery.assignment.created

Zuweisung erstellt — Wird ausgelöst, wenn ein Auftrag dem Anbieter zugewiesen wird — durch eine automatische Regel oder manuell. Die Nutzlast enthält die Zuweisungsnummer, Auftragskennungen und die Paket-Trackingnummern.

Payload-Beispiele
delivery.assignment.handed_over

Pakete übergeben — Wird ausgelöst, wenn das Lager alle Pakete der Zuweisung physisch an den Anbieter übergeben hat.

Payload-Beispiele
delivery.assignment.cancelled

Zuweisung storniert — Wird ausgelöst, wenn die Plattform eine Zuweisung vom Anbieter zurückzieht. Das Feld reason unterscheidet cancelled (die Zuweisung wurde beim Frachtführer storniert), fallback_to_self_delivery (die Plattform hat den Auftrag zurück in die Eigenzustellung genommen) und reassigned (der Auftrag wurde an einen anderen Anbieter übertragen).

Payload-Beispiele
delivery.assignment.partial_delivered

Teilweise zugestellt — Wird ausgelöst, wenn ein Teil einer Sendung zugestellt wurde, während andere Pakete noch unterwegs sind. Das Array packages enthält das Ergebnis je Paket, legs listet die beim Frachtführer gebuchten externen Aufträge auf — bei Frachtführern ohne mehrstückige Sendungen einen pro Paket.

Payload-Beispiele

Signatur & Verifikation: Drittanbieter-Zustell-Webhooks verwenden dasselbe Signaturverfahren wie Anbieter-Schließfach-Webhooks: X-Webhook-Signature ist base64(HMAC-SHA256(secret, timestamp + "\n" + delivery id + "\n" + raw body)), wobei timestamp und delivery id aus den Headern X-Webhook-Timestamp und X-Webhook-Delivery-Id stammen. Prüfen Sie außerdem X-Webhook-Content-Digest (SHA-256 des Bodys) und weisen Sie veraltete Zeitstempel zurück. X-Webhook-Id bleibt über Wiederholungen hinweg stabil — nutzen Sie sie für Idempotenz.

Konfiguration: Anbieter konfigurieren diesen Endpunkt selbst im Anbieterportal (Webhook-Einstellungen), oder der Plattformbetreiber tut dies unter Drittanbieter-Zustellung → Anbieter → Webhooks. Ein Endpunkt pro Anbieter mit auswählbarer Ereignisliste. Der Signaturschlüssel kann automatisch erzeugt oder als eigener Wert gesetzt werden und ist auf der Einstellungsseite einsehbar. Fehlgeschlagene Zustellungen werden mit exponentiellem Backoff bis zu 7-mal wiederholt, bevor sie in die Dead-Letter-Liste wandern; Dead-Letter-Ereignisse können manuell erneut gesendet werden. Von der Einstellungsseite kann jederzeit ein signiertes Test-Ereignis (Mock) gesendet werden — Testanfragen tragen den Header X-Webhook-Test: 1 und enthalten "test": true in den Payload-Daten.

Auftrags-Lebenszyklus-Ereignisse

Feingranulare Opt-in-Ereignisse neben dem klassischen order.status_change-Webhook (der unverändert bleibt): wer zugewiesen wurde, ob der Fahrer angenommen hat, wann das Paket abgeholt wurde, unterwegs ist, zugestellt wurde oder fehlgeschlagen ist, dazu Änderungen des Fahrerdienststatus und gedrosselte Fahrerpositionen. Es wird nichts gesendet, bis Sie die URLs unten konfigurieren.

order.assigned

Dem Auftrag wurde ein Fahrer zugewiesen (manuell, per Tourenplanung oder per automatischer Zuweisung). data.source = auto_assign, wenn der Orchestrator es getan hat.

Payload-Beispiele
order.unassigned

Der Auftrag hat seinen Fahrer verloren (Übergabe, Entzug, Ablehnung, Zeitüberschreitung). data.previous_driver_id gibt an, wer ihn hatte.

Payload-Beispiele
order.accepted

Der Fahrer hat einen automatisch zugewiesenen Auftrag in der App angenommen (Fahrerdienst mit Annahmepflicht).

Payload-Beispiele
order.rejected

Der Fahrer hat einen zugewiesenen Auftrag abgelehnt; data.reason enthält den optionalen Freitextgrund.

Payload-Beispiele
order.pickup_started

Der Fahrer hat die Abholung begonnen (Status Abholung gestartet / Wird abgeholt).

Payload-Beispiele
order.picked_up

Das Paket wurde abgeholt (Status Bereits abgeholt).

Payload-Beispiele
order.on_the_way

Das Paket ist unterwegs zum Empfänger (Status Zustellung gestartet / Wird zugestellt).

Payload-Beispiele
order.completed

Die Zustellung war erfolgreich (Status Erfolgreich).

Payload-Beispiele
order.failed

Der Zustellversuch ist fehlgeschlagen (Später erneut zustellen, Neuplanung erforderlich, Vom Empfänger abgelehnt).

Payload-Beispiele
order.cancelled

Der Auftrag wurde storniert.

Payload-Beispiele
order.ready

Mitarbeiter (oder, falls zugelassen, ein Fahrer) haben den Auftrag als bereit zur Abholung markiert (Dispositionsoptionen → Bereit zur Abholung).

Payload-Beispiele
driver.on_duty_changed

Ein Fahrer hat sich in der App in den Dienst oder aus dem Dienst gemeldet (Option Fahrerdienst).

Payload-Beispiele
driver.location_update

Eine Fahrerposition aus der App oder vom Tracker, je Fahrer gedrosselt über driver_location_min_interval_sec (Standard 60 s). Wird nur an driver_location_webhook_url gesendet.

Payload-Beispiele

Konfiguration: Einstellungen → Webhooks (oder GET/PUT /api/v1/webhook-settings, GraphQL webhookSettingsUpdate): order_lifecycle_webhook_url empfängt jedes order.*-Ereignis sowie driver.on_duty_changed; order_lifecycle_events schränkt das auf eine kommagetrennte Liste ein; driver_location_webhook_url und driver_location_min_interval_sec steuern driver.location_update. Mehrere URLs können kommagetrennt angegeben werden. Zustellungen erscheinen im Webhook-Zustellprotokoll mit reference_type order / driver.

Signatur & Verifikation: Signiert genau wie jeder andere ausgehende Webhook Ihres Kontos: Legacy-Header Signature plus X-Webhook-Id / X-Webhook-Timestamp / X-Webhook-Signature-V2 mit Ihrem webhook_sign_secret. Wiederholungen verwenden dieselbe event_id – deduplizieren Sie darüber.

Geräteauftrags-Ereignisse

Optionale Ereignisse für Pakete, die Ihre Paketschränke, Kioske und Smart Drops bearbeiten: ein Paket wurde im Gerät eingelagert, abgeholt, vom Personal entnommen oder hat seine Abholfrist überschritten, sowie Probleme, die dazu eröffnet oder gelöst wurden. Rein additiv — kein bestehender Webhook ändert sich, und nichts wird gesendet, bevor Sie device_order_webhook_url konfigurieren.

device_order.stored

Ein Paket wurde in das Gerät gelegt und wartet auf die nächste Person (Empfänger, Kurier oder Betreiber, siehe data.device_order.next_actor). due_at ist die Abholfrist.

Payload-Beispiele
device_order.collected

Das Paket wurde von der Person entnommen, auf die es gewartet hat — dem Empfänger, dem Kurier oder dem Personal, das einen Smart Drop leert.

Payload-Beispiele
device_order.removed

Das Personal hat das Paket aus dem Gerät entnommen. removal_reason nennt den Grund: overdue_return, handover, relay, anomaly oder recovery.

Payload-Beispiele
device_order.overdue

Das Paket hat sein due_at überschritten, ohne abgeholt zu werden. Es liegt noch im Gerät und sein Code funktioniert weiterhin; overdue_at wird gesetzt und next_actor wird zu operator.

Payload-Beispiele
device_order.exception_opened

Zu diesem Vorgang wurde ein Problem eröffnet (zum Beispiel door_left_open, deposit_unverified, item_missing, overdue). data.exception enthält id, type, severity und status.

Payload-Beispiele
device_order.exception_resolved

Eine Person hat ein Problem zu diesem Vorgang geschlossen. data.exception.status ist resolved oder dismissed, und resolution_action gibt an, was getan wurde.

Payload-Beispiele

Payload-Beispiele: data.device_order: id, kind, status, next_actor, device_type, device_id, device_name, grid_code, reference_number, order_id, external_order_id, due_at, overdue_at, stored_at, ended_at, removal_reason (Zeiten im ISO-8601-Format, null, solange nicht erreicht). Problem-Ereignisse enthalten zusätzlich data.exception: id, type, severity, status, resolution_action. Der Abholcode ist nie enthalten. event_id lautet DOE-<Ledger-Ereignis-ID> und bleibt bei Wiederholungen gleich.

Konfiguration: Einstellungen → Webhooks (oder GET/PUT /api/v1/webhook-settings): device_order_webhook_url empfängt jedes device_order.*-Ereignis; device_order_events schränkt dies auf eine kommagetrennte Liste ein. Mehrere URLs können kommagetrennt angegeben werden. Zustellungen erscheinen im Webhook-Zustellprotokoll mit reference_type device_order.

Signatur & Verifikation: Signiert genau wie jeder andere ausgehende Webhook Ihres Kontos: Legacy-Header Signature plus X-Webhook-Id / X-Webhook-Timestamp / X-Webhook-Signature-V2 mit Ihrem webhook_sign_secret. Wiederholungen verwenden dieselbe event_id – deduplizieren Sie darüber.

Pakete, die ein Partner-Zusteller unter seinem eigenen Konto in Ihre Schränke liefert, werden nicht über diesen Kanal gesendet; der Partner erhält sie über seine Anbieter-Paketschrank-Webhooks.

Konfiguration

Sie können Webhooks auf zwei Ebenen konfigurieren: auf Unternehmensebene (umfasst alles) oder pro Kunde (Override für ein bestimmtes B2B-Unterkonto).

1. Zu den Einstellungen

Loggen Sie sich ein und gehen Sie zu Einstellungen → API & Webhooks. Overrides je Kunde finden Sie auf der Kundendetailseite.

2. Signaturgeheimnis setzen

Wählen Sie eine Zeichenfolge von mindestens 16 Zeichen, idealerweise 32+ zufällige Bytes. Ihr Empfänger nutzt dieses Geheimnis zur Verifikation.

3. Gewünschte Ereignis-URLs setzen

Tragen Sie nur die URLs ein, die Sie benötigen. Lassen Sie den Rest leer, um diese Ereignisse zu überspringen.

webhook_sign_secretSie konfigurieren ein gemeinsames Geheimnis auf der Einstellungsseite. Jeder ausgehende Webhook wird damit signiert. Ihr Empfänger berechnet die Signatur neu und vergleicht — bei Übereinstimmung ist die Payload echt und unverändert.
order_create_webhook_urlWird ausgelöst, sobald eine lokale Lieferbestellung (Delivery / Pickup / P2P) angelegt wird — über beliebigen Weg: Webformular, REST/GraphQL-API, E-Commerce-Plattform-Synchronisation, automatische Regeln, Importzeilen usw. Label-Service- und andere Nicht-Lieferarten sind ausgeschlossen. Wird im Batch-Flow übersprungen, wenn für denselben Empfänger auch order_create_async_postback_url konfiguriert ist. Konfigurieren Sie mit order_create_webhook_url.
order_status_change_webhook_urlWird bei jedem Statuswechsel ausgelöst — abgeholt, unterwegs, zugestellt, Ausnahme, storniert. Konfigurieren Sie mit order_status_change_webhook_url.
tracking_event_webhook_urlWird bei jedem Tracking-Lebenszyklusereignis ausgelöst (Daten übermittelt, Zustellung gestartet, erfolgreich zugestellt usw.). Konfigurieren Sie mit tracking_event_webhook_url. Zustell- und Abholereignisse enthalten außerdem den Zustellnachweis: proof_files sowie proof_files_detail (file_id, type, url, full_url, signierte Download-URL). Nach dem Ereignis hochgeladene Fotos kommen als pod.files_updated. Jede Datei trägt zusätzlich ihren Ereigniskontext: tracking_event_id, tracking_event_status_id, tracking_event_key, service_type (1 = delivery / 2 = pickup) und service_status (1 = success / 2 = failed); bei Altdateien ohne erfasstes Ereignis sind sie null.
order_create_async_postback_urlWird einmal ausgelöst, nachdem ein Stapelimport abgeschlossen ist. Payload enthält die Ergebnisse pro Zeile. Konfigurieren Sie mit order_create_async_postback_url.
pod_files_webhook_urlWird ausgelöst, wenn ein Zustellfoto oder eine Unterschrift hinzugefügt, ersetzt oder entfernt wird (action: added / updated / removed) — eine Zustellung pro Datei, kein Abfragen von Anhängen mehr. Aktivierung über pod_files_webhook_url. Jede Datei trägt zusätzlich ihren Ereigniskontext: tracking_event_id, tracking_event_status_id, tracking_event_key, service_type (1 = delivery / 2 = pickup) und service_status (1 = success / 2 = failed); bei Altdateien ohne erfasstes Ereignis sind sie null.
order_deleted_webhook_urlWird ausgelöst, wenn eine Bestellung endgültig gelöscht wird, damit Ihr System die Entfernung nachvollziehen kann. Aktivierung über order_deleted_webhook_url.
order_cancel_failed_webhook_urlWird ausgelöst, wenn ein Stornierungsversuch abgelehnt wird (z. B. weil die Bestellung bereits in Zustellung ist), damit Ihre Betriebsprozesse fehlgeschlagene Stornierungen ohne API-Abfragen überwachen können. Aktivierung über order_cancel_failed_webhook_url.
route_board_webhook_urlWird ausgelöst, wenn ein Platz auf dem Routen-Board den Besitzer wechselt oder das Board seinen Status ändert — das Feld action sagt, was passiert ist (claimed, standby, pooled, promoted, withdrawn, vetoed, replaced, assigned, awarded, lost, displaced, settled, board_opened, board_closed, board_cancelled). Nur auf Unternehmensebene. Opt-in über route_board_webhook_url.
device_order_webhook_urlOptionale Ereignisse für Pakete, die Ihre Paketschränke, Kioske und Smart Drops bearbeiten: ein Paket wurde im Gerät eingelagert, abgeholt, vom Personal entnommen oder hat seine Abholfrist überschritten, sowie Probleme, die dazu eröffnet oder gelöst wurden. Rein additiv — kein bestehender Webhook ändert sich, und nichts wird gesendet, bevor Sie device_order_webhook_url konfigurieren.
Leitfaden zu Integrations-Updates

Alle Neuerungen in API und Webhooks — idempotentes Stornieren, Abgleich-Feeds, v2-Signaturen, neue Events — mit Beispielen zum Kopieren. Alles vollständig abwärtskompatibel.

Signatur & Verifikation

Jeder ausgehende Webhook enthält eine hex-codierte HMAC-SHA256-Signatur im Header. Ihr Empfänger muss die Signatur über den Roh-Body mit dem gemeinsamen Geheimnis neu berechnen und die Anfrage ablehnen, wenn sie nicht übereinstimmt.

Algorithmus
HMAC-SHA256 (hex)
Header-Name
Signature
Verifikationsschritte
  1. Lesen Sie den Roh-Body, bevor ihn Parsing oder Middleware verändert.
  2. Berechnen Sie hash_hmac('sha256', rawBody, sharedSecret) und hex-codieren Sie das Ergebnis.
  3. Vergleichen Sie mit dem Signature-Header in konstanter Zeit (hash_equals in PHP, crypto.timingSafeEqual in Node).
  4. Antworten Sie nur dann mit 2xx, wenn die Signaturen übereinstimmen. Andernfalls 401.
<?php $rawBody = file_get_contents('php://input'); $received = $_SERVER['HTTP_SIGNATURE'] ?? ''; $expected = hash_hmac('sha256', $rawBody, $sharedSecret); if (!hash_equals($expected, $received)) { http_response_code(401); exit('Bad signature'); } $payload = json_decode($rawBody, true); // ... handle event ... http_response_code(200); echo 'ok';
const crypto = require('crypto'); const express = require('express'); const app = express(); app.use('/webhooks/superroute', express.raw({ type: 'application/json' }), (req, res) => { const received = req.header('Signature') || ''; const expected = crypto.createHmac('sha256', sharedSecret) .update(req.body).digest('hex'); if (!crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected))) { return res.status(401).send('Bad signature'); } const payload = JSON.parse(req.body.toString()); // ... handle event ... res.status(200).send('ok'); });
import hmac, hashlib from flask import Flask, request, abort app = Flask(__name__) @app.route('/webhooks/superroute', methods=['POST']) def webhook(): received = request.headers.get('Signature', '') expected = hmac.new(shared_secret.encode(), request.data, hashlib.sha256).hexdigest() if not hmac.compare_digest(received, expected): abort(401) payload = request.get_json() # ... handle event ... return 'ok', 200
func handleWebhook(w http.ResponseWriter, r *http.Request) { body, _ := io.ReadAll(r.Body) received := r.Header.Get("Signature") mac := hmac.New(sha256.New, []byte(sharedSecret)) mac.Write(body) expected := hex.EncodeToString(mac.Sum(nil)) if !hmac.Equal([]byte(received), []byte(expected)) { w.WriteHeader(401); return } // ... handle event ... w.WriteHeader(200) w.Write([]byte("ok")) }
require 'openssl' require 'rack/utils' post '/webhooks/superroute' do raw = request.body.read received = request.env['HTTP_SIGNATURE'] || '' expected = OpenSSL::HMAC.hexdigest('sha256', shared_secret, raw) halt 401 unless Rack::Utils.secure_compare(received, expected) payload = JSON.parse(raw) # ... handle event ... status 200 'ok' end

Wiederholungen & Zuverlässigkeit

Ihr Endpunkt sollte schnell mit 2xx antworten. Bei anderen Antworten, Timeouts oder Nichterreichbarkeit wird die Zustellung wiederholt.

Max. Versuche
5 (erster Versuch + 4 Wiederholungen)
Timeout je Versuch
3 Sekunden
Zurück
Exponentiell — etwa 10s, 100s, 1000s, 10000s
Idempotent bauen. Da eine Zustellung wiederholt werden kann, kann Ihr Empfänger das gleiche Ereignis mehrfach sehen. Nutzen Sie Bestell-/Tracking-Nummer als Dedupe-Schlüssel und speichern Sie verarbeitete IDs mindestens 24 Stunden.
Empfohlene Antwort. Schnell mit HTTP 200 bestätigen und asynchron verarbeiten. Keine langsamen Operationen synchron im Webhook-Handler — sonst Timeout nach 3 Sekunden.

Signatur-Verifier

Fügen Sie eine erhaltene Payload, den Signature-Header-Wert und Ihr Geheimnis ein — das Tool berechnet die Signatur im Browser neu (nichts verlässt diese Seite) und meldet, ob sie übereinstimmt.

Test-Webhook senden

Senden Sie einen echten, korrekt signierten Webhook von unserem Server an eine angegebene URL. Damit prüfen Sie Erreichbarkeit, Parsing und Signaturlogik.

Letzte Webhook-Zustellungen

Sehen Sie die jüngsten Webhook-Zustellversuche Ihres Kontos — echte Produktionsereignisse und Tests von dieser Seite. Bearer-Token einfügen, um zu laden.

Zeit Ereignis URL Status HTTP Versuch Zeit (ms) Testen? Aktionen
Noch keine Webhook-Zustellungen gefunden.

Bewährte Verfahren