Register an endpoint
Dashboard: Settings → API & MCP → Webhook endpoints → Add endpoint. API:POST /api/v1/locations/:id/webhook-endpoints.
You provide a label, an https:// URL, and the list of events you care about. PickupBell returns an HMAC signing secret on creation — store it. Subsequent GET calls omit the secret.
Event types
A single event can fire multiple types (e.g. an emergency call triggers
call.ended and call.emergency and lead.created). Subscribe only to what you need.
Delivery shape
We POST JSON to your endpoint:Verifying signatures
Every request carriespickupbell-signature: v1=<hex> — HMAC-SHA256 of the raw request body using your endpoint’s secret.
Idempotency
Each delivery has a uniquepickupbell-delivery-id. On retry (see below), the delivery-id changes but the pickupbell-event-id stays stable — use event-id to dedupe in your consumer.
Retries
If your endpoint returns a non-2xx status or times out (10s), we retry with exponential backoff: 1m → 5m → 30m → 2h → 6h → 24h. After 6 failed attempts the delivery is markeddead and we stop. The endpoint’s failure_count counter tracks consecutive failures; a successful delivery resets it.
To inspect history, GET /api/v1/locations/:id/webhook-deliveries returns the most recent delivery attempts with status codes and response bodies.
Pausing without revoking
PATCH /webhook-endpoints/:id with { "active": false } pauses delivery (pending retries are not re-enqueued until you flip active back to true). DELETE permanently removes the endpoint and discards pending deliveries.