POST to your server when something happens in
the workspace, such as a call ending. Add endpoints in
Workspace settings → Webhooks. Owners and members can add, edit, rotate and
delete them; owners, members and viewers can read the delivery log.
Conversation initiation
The same page has a separate Conversation initiation client data webhook card. It sets the default endpoint agents can use to look up caller context before a phone conversation starts. Each agent must turn it on in Settings → Security, where it can also override the endpoint. Initiation waits for a JSON response; it does not use the event delivery queue or the event signing secret. See Personalization for the request, response, headers, override permissions and failure behavior.Event endpoints
Each endpoint has:- URL: a public HTTPS address on port 443. Private and local addresses are refused, and the address is checked again before every delivery.
- Events: the event types it receives. Leave every box empty to receive all events, including types added later.
- Enabled: a disabled endpoint receives nothing. Deliveries queued for it while it is disabled fail and can be resent later.
- Signing secret: a
whsec_secret shown once, when the endpoint is created or the secret is rotated.
Events
Every request body is one event:version changes only for a breaking change to the envelope or an event’s
data. New fields can appear in data at any time, so ignore fields you do not
know.
call.ended
Sent once per call, after the call is closed and, for outbound calls, after its
outcome is read from the transcript. A call that closes without the agent
reporting it, for example one that dropped, is sent within about ten minutes.
It reaches only endpoints that were enabled and subscribed to the event when
the call ended: turning an endpoint back on, or adding an event to its filter,
never replays calls from before the change.
call.transferred
Sent once when a teammate joins a call and the agent stops talking.
conversation.analyzed
Sent after extraction, sentiment, topics and search indexing finish for a
conversation. The result and event are committed together. A worker retry
cannot queue the same event twice; a manual rerun creates a new analysis ID.
Only enabled endpoints subscribed at completion receive the event.
source is CONVERSATION_LOG or CHANNEL_CONVERSATION. conversationId is
Centillion’s stored conversation ID, not the external chat session ID. Read
values, rationales and trajectory from
GET /api/v2/agents/{agentId}/analysis/{conversationId}?source={source}
with a workspace API key. This event contains a summary, not the transcript or
all extracted values.
conversation.evaluated
Sent after one criterion finishes. Data includes agentId, conversationId,
source, evaluationId, criterionId, criterionName and rationale.
Binary criteria include result (success, failure or unknown). Numeric
criteria include score, which is null when the evidence is insufficient.
An empty transcript returns result: "unknown". Each evaluation ID is emitted
once; a manual rerun creates a new ID. The analysis endpoint returns the
scoring configuration and latest result for every criterion.
Headers and signatures
Requests follow the Standard Webhooks specification, so any of its open-source verification libraries works.
The HMAC key is the part of the secret after
whsec_, base64-decoded. Verify the
raw body exactly as received, before parsing it, and reject timestamps more than
five minutes from your clock.
Rotating the secret
Rotate secret issues a new secret at once. For the next 24 hours every request is signed with both the new and the previous secret, so a receiver that holds either one keeps accepting deliveries while you update it. After 24 hours only the new secret signs. Rotating again within those 24 hours replaces the previous secret with the one you are rotating away from, so the oldest secret stops signing at once.Retries and the delivery log
Answer with any2xx status within 8 seconds. A timeout, a network error, 408,
425, 429 or any 5xx is retried after 1 minute, 5 minutes, 30 minutes, 2
hours, 5 hours, 10 hours, 14 hours, 20 hours and 20 hours: ten attempts over
about three days. A Retry-After header on a retried status is honoured, up to
6 hours. Any other status, such as 400 or 410, is not retried.
The log under the endpoints lists the last 30 days of deliveries for the selected
endpoint: event, status, attempts and the status code your server returned.
Resend sends a delivered or failed event again with the same webhook-id and
body. If that attempt fails with a retried status, the event keeps retrying on
the schedule above until the delivery has used its ten attempts; a delivery
that already used them gets exactly one more.