POST request with a JSON payload to every URL registered on that Assistant or Agent. Use them to trigger workflows, sync conversation data, send transcripts to your CRM, or any other external integration.
Hook types
Delivery
Request format
Webhooks are delivered asHTTP POST requests with Content-Type: application/json. Fields whose value is null are omitted from the payload.
Retry behaviour
The platform guarantees at-least-once delivery. If your endpoint returns an HTTP error status or does not respond within 30 seconds, the delivery is retried automatically.
After 20 failed attempts no further retries occur.
Delivery states
Idempotency
Because deliveries are retried, your endpoint may receive the same event more than once. Use the
callId field as an idempotency key on your side.Payload reference
Shared fields
Every event payload contains these top-level fields.Transport object
SIP transport example
SIP transport example
WebSocket transport example
WebSocket transport example
call_started
Fired immediately when the call is connected.
Fields
Example payload
call_concluded
Fired after the call ends. Contains the complete conversation history, LLM-generated summaries, and an optional call recording.
Fields
Example payload
Messages
Themessages array contains every turn of the conversation in chronological order. Each element has a type discriminator field.
Shared message fields
Role values
Message types
text
text
Represents a spoken utterance transcribed to text — from the caller (
USER) or the assistant (ASSISTANT).audio
audio
Represents a message that exists only as raw audio with no transcription available.
tool_call
tool_call
Recorded when the LLM decides to invoke a tool during the conversation.
tool_result
tool_result
Recorded when a tool returns its result back to the LLM.
Configuration
Call Event Hooks are configured per Assistant or Agent — they are not a standalone resource.Dashboard
- Open the Assistant or Agent you want to configure.
- Navigate to the Event Hooks section.
- Click Add Hook (Hinzufügen), select the hook type, and enter your target URL.
- Save. The hook is now active for all future calls on that Assistant or Agent.
REST API
Hooks are managed through the Assistant and Agent endpoints. The examples below use the Assistant path — the Agent path follows the exact same structure.Read hooks — GET /{assistantId}
Read hooks — GET /{assistantId}
Retrieve the full Assistant configuration including its hooks.The Each hook object:
callEventHooks array in the response:Create hooks — POST /assistants
Create hooks — POST /assistants
Include Returns the full Assistant object including the assigned hook
callEventHooks in the request body when creating an Assistant. Omit the id — it is assigned by the platform.id values.Update hooks — PUT /{assistantId}
Update hooks — PUT /{assistantId}
The In this example:
PUT endpoint replaces the entire callEventHooks array. The behaviour depends on whether id is included for each hook:- The
call_startedhook with the givenidis updated with the new URL. - The
call_concludedentry has noid, so a new hook is created. - Any previously existing hooks not listed are removed.
200 OK with an empty success body.The same operations apply to Agents at
/api/v1/vendors/{vendorId}/organizations/{organizationId}/agents/{agentId}. The request and response shapes for callEventHooks are identical.