Dokumentation

Webhooks

Webhooks informieren dein System in Echtzeit ueber Ereignisse. Du hinterlegst eine URL und abonnierst Ereignisse; Certifylize sendet dann HTTP-POST-Requests.

Anfrage-Grundlagen

  • POST + application/json
  • User-Agent: Certifylize-Webhooks/1.0
  • Body = JSON event envelope

Headers

Nuetzliche Header fuer Verifikation und Debugging:

  • x-certifylize-signature
  • x-certifylize-timestamp
  • x-certifylize-delivery-id
  • x-certifylize-event-type
  • x-certifylize-attempt

Ereignistypen

Interne DB-Enums und oeffentliche Eventnamen:

Oeffentliches EreignisDB-EnumBeschreibung
edu.api_key.createdEDU_API_KEY_CREATEDNeuer API-Schluessel erstellt.
edu.api_key.revokedEDU_API_KEY_REVOKEDAPI-Schluessel widerrufen.
edu.credential.issuedEDU_CREDENTIAL_ISSUEDNachweis neu ausgestellt.
edu.credential.revokedEDU_CREDENTIAL_REVOKEDNachweis widerrufen.
edu.credential.updatedEDU_CREDENTIAL_UPDATEDNachweis aktualisiert.

Sicherheitshinweise

Verifiziere Signatur, pruefe Timestamp und behandle Eingaben defensiv.

Signaturpruefung

message = <timestamp>.<rawBody>
expected = sha256=<hex(HMAC_SHA256(secret, message))>

Replay-Schutz

Lehne Requests mit zu alter Timestamp-Differenz ab (z. B. > 5 Minuten).

Node.js-Beispiel

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

Python-Beispiel

message = f"{ts}.{raw}"
expected = hmac.new(secret, message.encode("utf-8"), hashlib.sha256).hexdigest()

Beispiel-Payload

{
  "id": "evt_...",
  "type": "edu.credential.issued",
  "createdAt": "2026-02-21T21:30:46.677Z"
}

Fehlersuche

  • Use raw body for signature verification.
  • Return 2xx quickly and process asynchronously.
  • Use delivery ID for idempotency.
Lokal testen mit http://127.0.0.1:8788/webhook und /webhooks/:id/test.