Aller au contenu
CLUP.life

Développeurs Webhooks

Webhooks: events, signature, retries

CLUP.life webhooks: events, thin payload, signature verification (HMAC-SHA256), retries and example receivers in Node.js and Python.

La documentation technique existe en allemand et en anglais ; dans votre langue, nous affichons la version anglaise.

A webhook tells your address that something happened — not what exactly. The payload is deliberately thin: type and identifier. You fetch the details with your key and are bound by the person’s rights. This way no personal data flows unchecked to third parties.

Setting up#

  1. Open the organization → Manage → Interfaces → New webhook. At most 10 webhooks per organization.
  2. Enter the address: https only, port 443, no credentials and no IP address (host names only). Address and secret are stored encrypted; the interface later shows only the host name.
  3. Choose events (see below) and copy the signing secret once.
  4. Test sends a ping event.

Events#

ÉvénementQuand
event.createdÉvénement créé
event.updatedÉvénement modifié
event.cancelledÉvénement annulé
member.joinedMembre inscrit
member.leftMembre parti
post.createdPublication mise en ligne
announcement.createdAnnonce publiée
task.createdTâche créée
presse.veroeffentlichtCommuniqué de presse ou actualité publié (uniquement organisation de la plateforme)
pingÉvénement de test, déclenché avec « Tester »

Payload and headers#

{
  "id": "0198…",
  "type": "event.created",
  "createdAt": "2026-10-30T08:15:00.000Z",
  "organizationId": "0198…",
  "data": { "entityType": "event", "entityId": "0198…" }
}
En-têteSignification
X-Clup-EventType de l’événement, p. ex. event.created
X-Clup-DeliveryIdentifiant de la livraison ; pour éviter les doublons
X-Clup-Signaturet=<Sekunden>,v1=<hex>
Content-Typeapplication/json

Verifying the signature#

Every delivery carries X-Clup-Signature: t=<seconds>,v1=<hex>. Compute HMAC-SHA256(secret, "<t>.<raw body>") over the unmodified raw body (before parsing!), compare in constant time and discard events whose t is older than 5 minutes (replay protection).

Example receivers#

# Signatur von Hand prüfen (zum Testen). rohkoerper.json enthält den Körper byte-genau.
T=1767225600
printf '%s.%s' "$T" "$(cat rohkoerper.json)" | openssl dgst -sha256 -hmac "$CLUP_WEBHOOK_SECRET"
# die ausgegebene Hex-Zeichenkette muss dem Teil v1=… des Kopfes entsprechen

Retries and disabling#

TentativeAttente après l’échec
Première livraisonimmédiatement
Nouvelle tentative 11 min
Nouvelle tentative 25 min
Nouvelle tentative 330 min
Nouvelle tentative 42 h
Nouvelle tentative 56 h
EnsuiteLe webhook est désactivé (5 livraisons échouées)
  • Answer with a 2xx within 8 seconds; anything else (and a timeout) counts as a failure. The response is read only up to 64 KB.
  • Delivery is at least once: duplicates are possible. De-duplicate with X-Clup-Delivery.
  • Order is not guaranteed; an event may arrive after a later one.
  • After 5 failed deliveries the webhook switches itself off (visible in the list). Re-enable it after fixing the problem.
  • The delivery list contains no content and is deleted after 14 days.
  • Security: the host name is re-resolved on every delivery and checked against private/internal ranges (SSRF protection); connections are not reused.
Webhooks: events, signature, retries · CLUP.life