Documentation Index
Fetch the complete documentation index at: https://docs.pickupbell.com/llms.txt
Use this file to discover all available pages before exploring further.
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
| Type | When it fires |
|---|---|
call.ended | Every call, including spam-rejected. One per call. |
call.emergency | Caller hit urgency 5 or the agent warm-transferred. |
lead.created | A call produced a lead row (outcome is lead/booked/transferred/voicemail). |
lead.updated | Lead status changed (new → contacted, etc.). |
booking.created | The AI scheduled an appointment on a calendar. |
booking.updated | Booking status or time changed. |
spam.blocked | Spam call rejected before the agent answered. |
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.