Skip to main content

Connect

  1. Open Settings → Integrations → ElevenLabs and click Connect ElevenLabs.
  2. 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.
The Connect ElevenLabs dialog, with fields for a label and the ElevenLabs API key.
You can connect multiple ElevenLabs accounts to one organization.

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.
The ElevenLabs manage view, showing the webhook URL and a field to paste the signing secret per account.
Paste the signing secret into Zelto as soon as you create the webhook. Until it’s saved, Zelto can’t verify deliveries and rejects them with a 401 — and ElevenLabs auto-disables a webhook after 10 consecutive failures, so one left unverified can stop firing until you re-enable it in ElevenLabs.
Until a signing secret is set, the webhook is inactive on Zelto’s side and calls still arrive through the recurring pull below — so the integration works either way.

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.
Import an agent from Agents → Add Agent → ElevenLabs, which lists the agents in your connected account.
The Add Agent dialog on the ElevenLabs tab, listing an ElevenLabs Conversational AI agent ready to import.
Zelto also captures the agent’s tool calls — the function calls it makes mid-call, from the ElevenLabs transcript’s 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 needs CONVAI_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.
The integrations page with the ElevenLabs card showing a Connected badge and a Manage button.