Referenz
Webhooks
Abonnieren Sie einen HTTPS-Endpunkt in Ihrem Dashboard, um Ereignisse zu empfangen, sobald sie auftreten. Jede Zustellung ist signiert; Zustellungen erfolgen mindestens einmal, deduplizieren Sie daher anhand der id des Umschlags.
Ereignisse
Nutzlast-Umschlag
{
"id": "evt_1709...",
"event": "order.paid",
"createdAt": "2025-12-21T19:45:12.000Z",
"data": { /* event-specific payload */ }
}Signaturen verifizieren
Jede Anfrage enthält OAC-Signature: t=<unix-ts>,v1=<hex-hmac>. Berechnen Sie den HMAC von {timestamp}.{rawBody} mit dem Secret Ihres Endpunkts und vergleichen Sie in konstanter Zeit:
import { createHmac, timingSafeEqual } from "crypto";
function verify(rawBody, header, secret) {
if (!header) return false;
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const ts = parts.t, sig = parts.v1;
if (!ts || !sig) return false;
// Reject replays older than 5 minutes.
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
return timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}Verifizieren Sie immer gegen den rohen Anfragetext — das erneute Serialisieren des JSON macht die Signatur ungültig.
Wiederholungen
Eine fehlgeschlagene Zustellung (Netzwerkfehler oder Nicht-2xx innerhalb von 10 s) wird mit exponentiellem Backoff wiederholt: 60s → 5m → 30m → 2h → 12h, dann wird gestoppt. Jeder Versuch wird als Zeile WebhookDelivery erfasst, die Sie in Ihrem Dashboard einsehen können.