Skip to main content
Monitor every deployment and call.

Call Observability Demo

Deployment

Each deployment generates a unique ID. View logs in the console.
Sample Deployment Logs

Call Logs

You can click into a call and view any logging statements generated by your reasoning code.

Call Logs

Transcripts

Each call has a transcript with independently separated transcribed audio and text to be generated. When you export these transcripts with the API or CLI, these include more granular turn level timestamps.
Sample Call Transcripts

Loggable Events

Record events without tying them to tool calls.

SDK

In the SDK, yield LogMessage events from your agent or tools to record custom events:
Events are automatically sent to the platform when yielded.

Websocket

If you’re not using the SDK and instead just relying on the bare websocket, logging events will look like this:

Playground

You can view these events in the Playground under the Transcript tab of the call.

Loggable Metrics

Record metrics at any point in your workflow.

SDK

In the context of the SDK, we can log a metric by broadcasting the LogMetric event. Here’s a snippet from the form filling template that exhibits this:
The user bridge is subscribed to the LogMetric event by default, and it will log it over the websocket by default when it sees that LogMetric has been broadcast.

Websocket

If you’re not using the SDK and instead just relying on the bare websocket, logging metrics will look like this:

Playground

You can view these events in the Playground under the Transcript tab of the call.
Loggable Metrics in the Playground

Call Recordings

Call recordings can be downloaded from the playground.
Sample Call Recordings

Webhooks

Cartesia sends webhook events to your HTTPS endpoint throughout the call lifecycle. Expose POST + application/json and verify the x-webhook-secret header matches your stored secret.
Sample Call Webhooks

Register a webhook

Use webhooks to receive call and turn events. Attaching a webhook (URL + secret) to an agent turns on delivery for that agent’s calls, and one webhook can be attached to multiple agents.
Open your agent’s Webhook settings and enter an https URL and a secret (Cartesia returns the string in the x-webhook-secret header on every delivery so you can verify the request).

Delivery retries

Cartesia attempts a webhook delivery up to 3 times when the request fails due to a network error or returns HTTP 403, 408, 429, or any 5xx status. Other 4xx responses (400, 401, 404, etc.) are treated as permanent failures and aren’t retried. Because of retries, your endpoint can receive the same event more than once. Use webhook_request_id to skip events you’ve already processed: it stays the same across every delivery attempt of one event and differs between distinct events.

Verify the webhook secret

Event types

Envelope fields

Every webhook event includes these top-level fields:

call

Present on call_started, call_completed, and call_failed events. Matches the GET /agents/calls/{call_id} response. Some events (e.g. call_started) may omit fields like end_time that do not yet have a valid value.

turn

Present on call_turn events. One turn per agent or user utterance.

analysis

Present on post_call_analysis events. Sent after async analysis completes (currently summary generation; evaluations and metrics will be added here in the future).

Example: call_completed

Example: post_call_analysis

Test your endpoint

For backwards compatibility:
  • call_completed and call_failed events also include a top-level body (transcript array) and a top-level end_reason. Use call.transcript and call.end_reason instead.
  • call_turn events also include a top-level body containing the raw turn payload. Use turn instead.
These deprecated fields will be removed in a future release.