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_idThe call's identity. Required
metadata.phone_call.external_numberThe 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_secsWhen the call started
metadata.call_duration_secsHow long it ran. The end of the call is the start plus this, not an event of its own
transcript[].role, .messageThe turns. Roles agent and user
transcript[].time_in_call_secsWhen each turn happened, as whole seconds from the start of the call
transcript[].tool_calls, .tool_resultsWhat the agent called, what came back, and whether it failed
version_idWhich 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

Channelvoice
AudioYes
TimestampsSeconds, on ElevenLabs's clock
DeliveryWebhook, push
RetriesElevenLabs retries

Read next

This page as markdown