Webhooks
Abonnieren Sie Ihre Systeme für Flash-Ereignisse. Registrieren Sie einen HTTPS-Endpunkt für die relevanten Ereignisse. Flash Jedes Ereignis liefert eine signierte, schlanke Nutzlast, sobald es ausgelöst wird – ohne Polling und ohne nächtlichen Export. Die Signaturen entsprechen der Standard-Webhooks-Spezifikation. Die Zustellung erfolgt mit Backoff, und jeder Versuch wird protokolliert.
Registrieren Sie einen Endpunkt
Erstellen Sie einen Webhook-Endpunkt mit einem Bearer fl_live_ Schlüssel, der den webhooks:manage Bereich. HTTPS-Anfrage senden. url und die Liste von eventTypes Sie möchten es dorthin liefern lassen. in der Antwort und nie wieder – bewahren Sie es sicher auf; Sie benötigen es, um jede Lieferung zu verifizieren.
curl -X POST https://flash.socialhub.ai/api/v2/webhooks \
-H "Authorization: Bearer fl_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://hooks.your-app.com/flash",
"description": "prod ingest",
"eventTypes": ["member.created", "loyalty.tier_upgraded"]
}'
# 201 Created
# {
# "data": {
# "id": "whe_...",
# "url": "https://hooks.your-app.com/flash",
# "eventTypes": ["member.created", "loyalty.tier_upgraded"],
# "status": "active",
# "secret": "whsec_..." <-- shown ONCE, store it now
# }
# }Endpunkte später verwalten mit GET /api/v2/webhooks (Liste, keine Geheimnisse), PATCH /api/v2/webhooks/{id} (URL/Ereignisse/Status ändern oder { "action": "rotate_secret" } senden, um das Geheimnis zu aktualisieren) und DELETE /api/v2/webhooks/{id}. Sie können Lieferungen auch unter Einstellungen → Webhooks registrieren, testen und wiedergeben.
Der Veranstaltungskatalog
Fragen Sie API, welche Ereignisse Sie abonnieren können. Der Katalog basiert auf der zentralen Quelle für Live-Automatisierungsauslöser und listet daher nur Ereignisse auf, die heute tatsächlich ausgelöst werden – gruppiert nach Lebenszyklusphase (Akquise, Engagement, Loyalität, Kundenbindung, Handel, Empfehlung) – jeweils mit Ereignisschlüssel, Beschreibung und Beispielnutzlast. Die Antwort dokumentiert außerdem den gemeinsamen Nutzlast-Envelope und die Signatur-Header.
curl https://flash.socialhub.ai/api/v2/events/catalog \
-H "Authorization: Bearer fl_live_..."
# { "data": { "events": [
# { "event": "member.created", "label": "Member created",
# "stage": "acquisition", "examplePayload": { ... } },
# { "event": "loyalty.tier_upgraded", "label": "Tier upgraded",
# "stage": "loyalty", "examplePayload": { ... } },
# ...
# ],
# "payload": { "schema": { ... }, "headers": { ... } }
# } }Setzen Sie beim Abonnieren den event-Schlüssel eines Ereignisses direkt in den eventTypes array. Erfordert den webhooks:manage-Bereich.
Eine schlanke, nicht personenbezogene Nutzlast
Jede Zustellung enthält denselben kleinen Umschlag: ein stabiles id, das Ereignis type, ein created_at timestamp und einen kompakten data-Block. Die Nutzdaten ennen niemals personenbezogene Daten – weder E-Mail-Adresse, Name, Telefonnummer noch Adresse. Wenn Sie die Mitgliedsdaten benötigen, rufen Sie diese über das authentifizierte API mithilfe von member_ref ab. Dadurch bleiben personenbezogene Daten im Mitgliedsdatensatz und werden nicht in Ihren Webhook-Protokollen gespeichert.
POST https://hooks.your-app.com/flash
webhook-id: evt_a1b2c3... # stable across retries — dedupe on this
webhook-timestamp: 1767225600 # unix seconds
webhook-signature: v1,K5x0mF...== # base64 HMAC-SHA256 (may be space-separated during rotation)
Content-Type: application/json
{
"id": "evt_a1b2c3...",
"type": "loyalty.tier_upgraded",
"created_at": "2026-01-01T00:00:00.000Z",
"data": {
"resource_id": "mbr_...",
"member_ref": "mbr_...", // opaque member id — fetch PII via the API
"tier": "Gold", // present on loyalty / tier events
"amount_band": "100-500" // coarse band on commerce events — never the exact amount
}
}Jede Signatur prüfen
Flash signiert jede Zustellung mit dem whsec_-Geheimnis Ihres Endpunkts mithilfe von Standard-Webhooks (HMAC-SHA256). Die Signatur wird anhand von {webhook-id}.{webhook-timestamp}.{body} neu berechnet und in konstanter Zeit mit dem webhook-signature-Header verglichen. Alle nicht übereinstimmenden Daten sowie webhook-timestamp-Daten, die zu alt sind, um Replay-Angriffe zu verhindern, werden verworfen. Der Signaturschlüssel besteht gemäß Spezifikation aus den Base64-dekodierten Bytes des Geheimnisses nach dem whsec_-Präfix. Bei einer Geheimnisrotation enthält der Header mehrere durch Leerzeichen getrennte v1,…-Werte – die Zustellung wird akzeptiert, wenn einer übereinstimmt.
import crypto from "node:crypto";
// req.body must be the RAW, unparsed request body string.
function verifyFlashWebhook(headers, rawBody, whsec) {
const id = headers["webhook-id"];
const ts = headers["webhook-timestamp"];
const sigHeader = headers["webhook-signature"]; // "v1,<b64> v1,<b64> ..."
// reject stale deliveries (5 min tolerance)
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const key = Buffer.from(whsec.replace(/^whsec_/, ""), "base64");
const expected = crypto
.createHmac("sha256", key)
.update(`${id}.${ts}.${rawBody}`)
.digest("base64");
return sigHeader
.split(" ")
.map((p) => p.split(",")[1])
.some((sig) =>
sig &&
sig.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)),
);
}Wiederholungsversuche, Idempotenz und das Zustellungsprotokoll
Schnelle Rendite von 2xx
Bestätigen Sie mit einem beliebigen 2xx und führen Sie Ihre Arbeit asynchron aus. Ein 429, ein 5xx, ein Timeout oder ein Verbindungsfehler werden als wiederholbar behandelt.
Automatische Wiederholung mit Backoff
Wiederholbare Fehler werden mit exponentiellem Backoff und vollem Jitter wiederholt. Ein 3xx oder ein 4xx, der nicht 429 lautet, wird als permanenter Fehler behandelt und nicht wiederholt.
Deduplizierung durch webhook-id
Die id ist bei allen Wiederholungsversuchen identisch, daher ist eine mindestens einmalige Zustellung gewährleistet: Eine wiederholte webhook-id wird als bereits verarbeitet betrachtet.
Zustellungsprotokoll & Wiedergabe
Jeder Versuch wird protokolliert. Sind alle Wiederholungsversuche ausgeschöpft, wird die Zustellung als nicht erfolgreich markiert. Sie können Zustellungen unter Einstellungen → Webhooks einsehen und erneut abspielen.