Zurück zur Übersicht

Dokumentation

Webhooks anlegen, Ereignisse empfangen und Signaturen prüfen.

Ein Webhook ist eine URL, an die Eventwerk bei einer neuen Benachrichtigung einen HTTP-POST sendet. Webhooks gehören zu Eventwerk Plus. Sie werden pro Organisation verwaltet.

Webhooks verwalten

Die Webhook-Endpunkte erwarten ein Sitzungs-Token aus der E-Mail-Anmeldung, keinen API-Schlüssel. Sie sind nur für Eigentümer im Plus-Plan freigegeben.

MethodePfadAntwort
GET/api/webhooksListe der aktiven Webhooks.
POST/api/webhooks201 mit dem angelegten Webhook.
DELETE/api/webhooks/{webhookID}204 ohne Rumpf.

Ein Webhook enthält id, url, secret, created_at und revoked_at. Die Liste zeigt nur nicht widerrufene Webhooks. Das Geheimnis steht in der Antwort und dient der Signaturprüfung.

bash
curl -s -X POST /api/webhooks \
  -H "Authorization: Bearer <Access-Token>" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.test/eventwerk-hook"}'
  • Die URL muss mit http oder https beginnen und höchstens 2.048 Zeichen lang sein.
  • Lokale Adressen sind erlaubt, damit sich die Zustellung testen lässt.
  • Eine ungültige URL ergibt invalid_webhook_url.
  • Ein unbekannter oder fremder Webhook ergibt webhook_not_found.
  • Ohne Plus antwortet die Verwaltung mit plan_required.

Zustellung

Eventwerk sendet einen POST mit JSON-Rumpf. Der Rumpf enthält die Art, den Titel, den Text, den internen Link und den Zeitpunkt der Benachrichtigung.

json
{
  "kind": "registration_created",
  "title": "Neue Anmeldung",
  "body": "Anna hat sich für Herbstkonferenz angemeldet.",
  "link_path": "/dashboard/events/<eventID>/registrations",
  "created_at": "2026-10-25T12:00:00Z"
}
HeaderWert
Content-Typeapplication/json
User-AgentEventwerk-Webhook/1.0
X-Eventwerk-Signaturesha256=<HMAC-SHA256 des unveränderten Rumpfs mit dem Webhook-Geheimnis>
  • Ein Zustellversuch hat ein Zeitlimit von 5 Sekunden.
  • Jeder Webhook erhält höchstens zwei Versuche im Abstand von 500 Millisekunden.
  • Eine Antwort mit Status 2xx gilt als erfolgreich.
  • Es gibt keine dauerhafte Warteschlange. Nach einem Neustart gehen nicht zugestellte Aufrufe verloren.
  • Fehler werden nur protokolliert. Der auslösende Vorgang, etwa eine Anmeldung, bleibt gültig.
  • Die Reihenfolge der Zustellungen ist nicht garantiert.

Signatur prüfen

Berechnen Sie die HMAC-SHA256-Signatur über den rohen Rumpf, nicht über das neu serialisierte JSON. Vergleichen Sie die Signatur in konstanter Zeit mit dem Header.

javascript
import crypto from "node:crypto";

const expected =
  "sha256=" +
  crypto.createHmac("sha256", secret).update(rawBody).digest("hex");

const received = request.headers["x-eventwerk-signature"];

if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
  return response.status(401).end();
}

Ereignisse

kindAuslöser
registration_createdNeue öffentliche Anmeldung.
registration_cancelledAnmeldung storniert.
registration_promotedAnmeldung von der Warteliste nachgerückt.
registration_checked_inAnmeldung eingecheckt.
survey_responseNeue Umfrageantwort.
message_sentNachricht versandt.

Eine eigene Oberfläche für Webhooks gibt es noch nicht. Die Verwaltung läuft über die API. Zustellungen werden nicht gespeichert und nicht nachträglich nachgeholt.