> ## Documentation Index
> Fetch the complete documentation index at: https://docs.talking-avatar.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Post-call webhook

> Get every finished call and its transcript on your server, signed.

The post-call webhook sends each finished call, with its transcript, to your server: for your CRM, analytics, follow-up emails or interview scoring. It works with no-code tools too, such as a Zapier, Make or n8n webhook.

## Set it up

1. Open the agent's **Webhook** tab.
2. Enter your **Endpoint**. It must start with `https://`.
3. Click **Save changes**.

We `POST` to it when each call ends.

## Payload

```json theme={null}
{
  "event": "call.ended",
  "call": {
    "id": "8b0c6c5e-…",
    "agentId": "3f1e2d4a-…",
    "startedAt": "2026-10-23T09:30:00.000Z",
    "endedAt": "2026-10-23T09:34:12.000Z",
    "durationSeconds": 252,
    "endedReason": "agent ended the call"
  },
  "transcript": [
    { "role": "agent", "text": "Hi, I'm Maya. What can I help you with today?" },
    { "role": "user", "text": "Where's my order?" }
  ]
}
```

See the [field reference](https://docs.talking-avatar.dev/api-reference/call-ended-event.md) for every field and value.

## Delivery

* We send the webhook once per call, for calls that went live. A call that never connected (for example, the caller left while it was starting) isn't sent.
* Reply with a `2xx` status within 10 seconds.
* We don't retry. Each call's **Webhook** status on the [Calls tab](https://docs.talking-avatar.dev/voice-agents/calls.md) shows how your endpoint answered: *Delivered (200)*, *Failed (500)*, or *Couldn't reach it*.
* If a delivery fails, the call and its full transcript are still in the dashboard.

## Signing secret

Every agent has its own **signing secret** (`whsec_…`). We sign each webhook and each [tool](https://docs.talking-avatar.dev/voice-agents/tools.md) request with it, using the [Standard Webhooks](https://www.standardwebhooks.com) scheme, so your server can check that a request came from your agent.

On the **Webhook** tab, click **Show** to see the secret, or the copy button to copy it. Keep it on your server.

```js theme={null}
import { Webhook } from "standardwebhooks";

const webhook = new Webhook(process.env.AGENT_SIGNING_SECRET); // whsec_…
// Throws if the signature is wrong or the request is over 5 minutes old
const payload = webhook.verify(rawBody, request.headers);
```

See [Verify signatures](https://docs.talking-avatar.dev/api-reference/verify-signatures.md) for Node.js, Python and manual verification.

### Rotate the secret

Click **Rotate secret**, then confirm. Calls that start from then on are signed with the new secret; calls already in progress keep the old one until they end. Update your servers with the new secret, or they'll reject this agent's requests.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.