Skip to main content

Webhooks

End of Call

Sends an HTTP notification to your endpoint when a call ends, regardless of attempt. The payload contains the full transcript, recording, duration, and analysis of the completed call.

Delivery​

  • Method: POST
  • Content-Type: application/json
  • Request timeout: 30 seconds. If your endpoint does not respond in 30s, the attempt is treated as failed and retried.
  • Authorization: If a bearer token is configured for the agent, requests include an Authorization: Bearer <token> header.

Payload​

idstring
Unique call ID, consistent across all webhooks for the same call.
session.idstring
Session ID that groups all call attempts to the same customer.
startedAtstring
Call start date-time in ISO 8601.
endedReasonstring
Why the call ended (for example customer-ended-call, user-not-contacted).
messagesarray
Full conversation transcript.
customer.namestring
Optional. Present when a name was provided when creating the call.
customer.phoneNumberstring
Destination phone number in E.164 format.
variableValuesobject
Input variables provided when the call was created.
durationSecondsinteger
Total call duration in seconds.
detailsURLstring
URL to view call details in the dashboard.
recordingURLstring
Optional. URL to download the audio recording. Present only when a recording is available.
analysis.successEvaluationboolean
Whether the success criteria was met.
analysis.structuredDataobject
Output variables and extracted values.
analysis.summarystring
Natural-language summary of the call.

Message details​

The messages field contains the complete call transcript:

  • role: Participant role (system, agent, user)
  • message: Message content

Responding to events​

Return any HTTP 2xx status code to acknowledge receipt. Response body is ignored.

Any of the following is treated as failure and triggers a retry:

  • 3xx, 4xx, or 5xx response
  • Network error (connection refused, DNS failure, TLS error)
  • No response within the 30-second timeout

Your endpoint must be idempotent. Since non-2xx responses are retried, the same event may be delivered multiple times. Deduplicate using id.

Respond well under 30 seconds—ideally acknowledge immediately (for example by queueing the event) and do heavy processing asynchronously.

Retry policy​

Failed deliveries are retried automatically with exponential backoff (each delay is 3× the previous one):

AttemptDelay after previous attempt
1— (initial delivery)
25 seconds
315 seconds
445 seconds
52 min 15 sec
66 min 45 sec
720 min 15 sec
81 hr 45 sec
93 hr 2 min 15 sec

After nine attempts the event is dropped and won't be resent. If your endpoint was down longer than the retry window, reconcile state using the API instead of waiting for redelivery.