Clubtool.developers
Concepts

Webhooks

Instead of polling, let Club-tool push a signed notification to your endpoint when something changes. A club administrator registers endpoints under System → API → Webhooks, picks the events, and gets a signing secret (shown once).

Events

EventFires when
member.created / member.updated / member.deleted A member is created, changed (incl. via bulk) or deleted.
member.archivedA member is archived (membership ended).
event.created / event.updated / event.deleted A calendar event changes.
attendance.updatedAn attendance record is upserted (resource_id = the member).
kennismaker.created / kennismaker.updated A trial member signs up or changes (incl. status transitions).
event.registrationSomeone registers for a calendar event (resource_id = the registration).
charge.createdA membership-fee charge is created (resource_id = the charge).
payment.receivedA charge is marked paid — manually or via the payment provider (resource_id = the charge).
payment.failedA direct-debit payment fails or is charged back and the charge reopens (resource_id = the charge).
pingThe test button in the app.

Payload — minimal by design

The body carries ids only, never personal data: fetch details through the API with your own key and scopes. That keeps the GDPR surface of your endpoint small.

{
  "id": 812,
  "event": "member.updated",
  "resource_type": "member",
  "resource_id": 41,
  "club_id": 12,
  "occurred_at": "2026-07-02T14:03:11",
  "attempt": 1
}

Verify the signature

Every delivery is signed with HMAC-SHA256 over the raw request body, using your endpoint's secret:

X-Clubtool-Event: member.updated
X-Clubtool-Delivery: 812
X-Clubtool-Signature: sha256=3f1c2e…
# Python example
import hmac, hashlib

def verify(secret: str, body: bytes, header: str) -> bool:
    digest = 'sha256=' + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(digest, header)

Reject requests with a missing or invalid signature, and respond within 5 seconds — do heavy work asynchronously after acknowledging.

Delivery, retries & auto-disable

Endpoint requirements