Developer portal — API

Connect external systems to the ZwemExpert / ExpertSwimCamp platform through our REST API: camps, registrations, payments, customers and more — plus outbound webhooks for real-time updates.

Base URL

https://zwemexpert-website.mike-6ba.workers.dev/api/public/v1

Authentication

Every request requires an API key via the Authorization: Bearer … header (or X-API-Key). Keys are created by an administrator and are limited per brand and per scope.

curl -H "Authorization: Bearer ze_live_…" \
  "https://zwemexpert-website.mike-6ba.workers.dev/api/public/v1/camps?limit=10&locale=en"

Conventions

Scopes

camps:readRead camps and availability
coaches:readRead coaches
registrations:readRead registrations
registrations:writeCreate/update registrations
participants:readRead participants (children)
customers:readRead customers (parents)
payments:readRead payments
waitlist:readRead the waitlist
waitlist:writeAdd waitlist entries
stats:readRead key figures
webhooks:manageManage webhooks

Errors

Errors carry a stable error.code and a localized error.message.

authentication_error401Invalid/missing key
permission_error403Scope or brand not allowed
invalid_request_error400/422Invalid input
not_found404Resource does not exist
rate_limit_error429Too many requests
idempotency_error409Idempotency conflict
api_error500Internal error

Webhooks

Subscribe to events; we deliver a POST with an HMAC-SHA256 signature (header X-ZE-Signature: t=…,v1=…, signed over `${t}.${body}` with the webhook secret).

Available events: registration.created, registration.updated, registration.status_changed, registration.cancelled, payment.paid, payment.failed, payment.refunded, camp.published, camp.updated, camp.full, waitlist.created.

POST https://jouw-systeem.nl/webhook
X-ZE-Event: registration.created
X-ZE-Signature: t=1736531200,v1=

{ "id": "evt_…", "type": "registration.created",
  "created": "2026-07-11T12:00:00Z", "brand": "zwemexpert",
  "data": { "object": { "object": "registration", "id": 123, … } } }

Endpoint reference

Full machine-readable spec: openapi.json (importable into Postman, Insomnia or Redoc).

Loading endpoints…
View 2026 camps