Webhooks
Events & signatures
Webhooks push events to your server as they happen. Register an endpoint (a public HTTPS URL) in the Developer area or via the API, choose the events to subscribe to, and we POST each event to your URL.
Each delivery is a JSON envelope: `{ "id", "type", "created_at", "mode", "data" }`. The `data` object uses the same resource shapes as the REST API. The `id` is stable across retries — use it to dedupe.
Deliveries are retried with backoff for about 24 hours (up to 8 attempts). Respond with any 2xx status to acknowledge; a `410 Gone` tells us to stop immediately.
Event envelope
Every delivery has this shape. The `data` object matches the REST resource for that event.
Verifying signatures
Every request is signed. The `X-Webhook-Signature` header is `t=<unix seconds>,v1=<hex hmac_sha256(t + "." + rawBody)>`, keyed with your endpoint’s signing secret (`whsec_…`).
Verify it against the raw request body before trusting a payload, and reject timestamps outside a tolerance (5 minutes is typical). During a secret roll, the header may carry multiple `v1=` signatures — accept the payload if any of them matches.
Event types
member.created | A member was created — via public signup (source "signup"), a portal invitation, the hiring pipeline, or the API. Subscribe to this to verify members who sign up publicly. |
member.updated | A member profile changed (contact details, capacity, status fields). Availability-calendar changes do not fire this event in v1. |