Connect
- Open Settings → Integrations → ElevenLabs and click Connect ElevenLabs.
- Paste your ElevenLabs API key. Create one at elevenlabs.io under your profile’s API Keys. We use it to fetch agent metadata and call data on demand.

Turn on real-time delivery
By default calls arrive via a recurring pull. To have them land within seconds instead, add an ElevenLabs post-call webhook that points at Zelto, then paste its signing secret back into the integration so Zelto can verify each delivery. The webhook is a workspace-level setting in ElevenLabs — it covers every agent in the workspace (you can also scope it per agent through an agent’s webhook overrides), and only workspace admins can configure it.1
Copy Zelto's webhook URL
Open Settings → Integrations → ElevenLabs → Manage. The card shows the
webhook URL Zelto exposes — copy it.
2
Create the webhook in ElevenLabs
In ElevenLabs, open Settings → Webhooks and create a webhook with HMAC
authentication pointing at Zelto’s URL. ElevenLabs shows the signing secret
once, at creation — copy it now.
3
Enable it for post-call transcription
In Agents → Settings, turn on post-call webhooks and select the webhook you
just created, so each finished call fires the
post_call_transcription event.
You don’t need to enable Send audio data — Zelto fetches each recording
itself over the authenticated audio endpoint.4
Paste the signing secret into Zelto
Back in the ElevenLabs card, paste the signing secret next to the matching
account and save. Zelto verifies every webhook’s
ElevenLabs-Signature
against it, so an unsigned or tampered request is rejected.
What gets ingested
Zelto ingests ElevenLabs Conversational AI calls two ways:- Post-call webhook — once the webhook above is configured, each finished call is pushed to Zelto with its transcript inline, so it lands as a conversation within a few seconds. The recording is fetched for you over the authenticated audio endpoint (ElevenLabs exposes no recording URL), so it re-hosts shortly after.
- Recurring pull + 14-day backfill — every imported agent is pulled about every 15 minutes, and importing an agent backfills its calls from the past 14 days. Re-import an agent at any time to refresh that history. The two paths dedupe on the ElevenLabs conversation id, so a call never lands twice.

tool_calls / tool_results — with
their name, arguments, and result. They render inline in the transcript, feed
the AI analysis, and are recorded as queryable
tool-call traces. Nothing to configure.
Traces and diagnostic logs
For newly imported calls and post-call webhook deliveries, Zelto also fetches ElevenLabs’ OpenTelemetry export in a separate background job. Native trace IDs, parent/child spans, timestamps, tool attributes, and error statuses are retained and linked to the call and agent in Traces. Your API key needsCONVAI_READ.
ElevenLabs regenerates span IDs on each export; Zelto assigns stable span IDs
for retry deduplication and keeps the original IDs in span attributes.
Logs includes errors, warnings, and the termination reason exposed in the
conversation metadata. These are diagnostic records derived from that metadata,
not ElevenLabs’ internal server logs. Their timestamps use the end of the call;
they do not indicate exactly when each warning occurred.
Keep your post-call webhook in the default JSON transcript format
(post_call_transcription). Zelto requests OpenTelemetry separately through the
API, so no webhook format change or collector configuration is needed.
Post-call spans use transcript timing; they are not measurements of each internal
STT, LLM, or TTS operation. Live monitoring is not included. Missing or deleted
provider data cannot be recovered, and calls at least 89 days old are skipped to
avoid importing data about to expire under Zelto’s 90-day telemetry retention.
Verify the first call
Place a test call to your ElevenLabs agent, then open Conversations — with the webhook configured the call shows up within a few seconds with its transcript. If it doesn’t, the agent’s Connections card shows whether calls are arriving and flags the most recent delivery if it errored. A signed delivery that’s rejected usually means the signing secret in Zelto doesn’t match the one in ElevenLabs. See Connect a voice provider.Connection status & disconnecting
The card shows the connected account, the webhook URL, and whether a signing secret is configured. The Disconnect action removes the stored API key and signing secret; remove the webhook from your ElevenLabs settings separately to stop the push side.
Related
- Connect a voice provider — pick a path and verify ingestion.
- Conversations — where ElevenLabs calls land.
- Agents — how Zelto models each agent.
- Findings — what analysis surfaces from each call.
- Speechify · Retell · Vapi — the other native voice integrations.

