Two ways to subscribe
| Mode | When to use |
|---|---|
Per-call webhook_url | You want events for a single call, decided at the moment you create it. |
| Account endpoints | You want one or more stable endpoints that receive events for every call on the org. |
Per-call inline webhook
Setwebhook_url when creating a call. That URL receives every lifecycle
event for that call, signed with the organization’s default signing
secret.
Account-wide endpoints
For production setups, register endpoints throughPOST /v1/webhook_endpoints
and subscribe each endpoint to the events you care about. Every call on the
org fans out to every matching endpoint.
cURL
signing_secret one time only. Store it in
your secrets manager before closing the response.
Use enabled_events: ["*"] to subscribe to everything (default if you omit
the field).
What CallingBox sends
CallingBox POSTs a JSON envelope to your URL. The body looks like this:| Header | Value |
|---|---|
Content-Type | application/json |
CallingBox-Signature | t=<unix_ts>,v1=<hex_hmac> — see Security |
CallingBox-Event-Id | UUID unique to this delivery attempt. Use as an idempotency key. |
CallingBox-Event-Type | Same as type in the body, for easy routing without parsing JSON. |
X-CallingBox-Event | Legacy alias of CallingBox-Event-Type. |
X-CallingBox-Call-Id | Convenience copy of data.call.id. |
Respond fast
Your endpoint must return a 2xx within 10 seconds. Do the minimum amount of work necessary — enqueue the rest of the processing on your side. Any non-2xx response or timeout triggers a retry; see the retry policy.Next steps
Event catalog
Every event type and its payload.
Security
Verify
CallingBox-Signature.Retries
Delivery schedule, idempotency, and replay.