# Audit voice agents built on ElevenLabs

> Evidova reads the post-call transcript ElevenLabs already sends, and scores the call it describes.

## What it catches

ElevenLabs hands you the transcript and the recording. It does not tell you whether the agent did the job you built it for. Evidova scores that transcript against the checks you approved: whether the agent answered what was asked, whether it said it was not a person when asked, whether it read back a price nobody gave it, which tool call failed, and where the caller gave up.

## Connect ElevenLabs

1. In Evidova, open Setup, choose ElevenLabs, and paste your signing secret.
2. Copy the URL we generate.
3. In the ElevenLabs dashboard, add it as a post-call webhook on the agent.

```
https://app.evidova.com/ingest/webhooks/elevenlabs/<your-token>
```

> The token in the path names your workspace, and the secret proves the request is ElevenLabs's. A request that fails that proof is refused with a 401 and recorded, not dropped quietly.

## What we read from ElevenLabs

| | |
|---|---|
| conversation_id | The call's identity. Required |
| metadata.phone_call.external_number | The caller's number on a telephone call, so repeat calls from one caller group. An embedded or in-app call falls back to the conversation id |
| metadata.start_time_unix_secs | When the call started |
| metadata.call_duration_secs | How long it ran. The end of the call is the start plus this, not an event of its own |
| transcript[].role, .message | The turns. Roles agent and user |
| transcript[].time_in_call_secs | When each turn happened, as whole seconds from the start of the call |
| transcript[].tool_calls, .tool_results | What the agent called, what came back, and whether it failed |
| version_id | Which build of the agent spoke |

## What we ignore, and why

More than one kind of post-call webhook arrives at the same URL. We read post_call_transcription and nothing else. The audio-only delivery carries no metadata, so there is no call to file it under and nothing to score in it. A delivery we do not read still gets its 202 and is kept as the raw body. It just produces no turns.

## One trap worth knowing

ElevenLabs signs the delivery time and the body together, and we refuse a delivery whose time is more than 30 minutes from our own clock. That limit is deliberate. It covers the documented retry backoff and ordinary clock drift, and it stops a delivery somebody captured being replayed at us the next day. A retry that arrives later than that is refused with a 401 and recorded against the connector, so it reads as a refusal you can query rather than a call that quietly never arrived.

## What ElevenLabs gives us

| | |
|---|---|
| Channel | voice |
| Audio | Yes |
| Timestamps | Seconds, on ElevenLabs's clock |
| Delivery | Webhook, push |
| Retries | ElevenLabs retries |

---

Source: https://evidova.com/platforms/elevenlabs
