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

# ElevenLabs

> Connect an ElevenLabs account and stream calls from your Conversational AI agents into Zelto.

## Connect

1. Open **Settings → Integrations → ElevenLabs** and click **Connect ElevenLabs**.
2. Paste your ElevenLabs API key. Create one at
   [elevenlabs.io](https://elevenlabs.io) under your profile's **API Keys**. We use
   it to fetch agent metadata and call data on demand.

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zelto-a802dbf4/public/elevenlabs-connect.png" alt="The Connect ElevenLabs dialog, with fields for a label and the ElevenLabs API key." />
</Frame>

You can connect multiple ElevenLabs accounts to one organization.

## Turn on real-time delivery

By default calls arrive via the hourly 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.

<Steps>
  <Step title="Copy Zelto's webhook URL">
    Open **Settings → Integrations → ElevenLabs → Manage**. The card shows the
    webhook URL Zelto exposes — copy it.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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.
  </Step>

  <Step title="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.
  </Step>
</Steps>

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zelto-a802dbf4/public/elevenlabs-webhook.png" alt="The ElevenLabs manage view, showing the webhook URL and a field to paste the signing secret per account." />
</Frame>

<Warning>
  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.
</Warning>

Until a signing secret is set, the webhook is inactive on Zelto's side and calls
still arrive through the hourly 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](/docs/conversations) 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.
* **Hourly pull + 14-day backfill** — every imported agent is also pulled once an
  hour as a backfill and safety net, 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.

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zelto-a802dbf4/public/elevenlabs-import.png" alt="The Add Agent dialog on the ElevenLabs tab, listing an ElevenLabs Conversational AI agent ready to import." />
</Frame>

## Verify the first call

Place a test call to your ElevenLabs agent, then open
[Conversations](/docs/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](/docs/guides/connect-a-voice-provider#troubleshoot-a-missing-call).

## 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.

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/zelto-a802dbf4/public/elevenlabs-connected.png" alt="The integrations page with the ElevenLabs card showing a Connected badge and a Manage button." />
</Frame>

## Related

* [Connect a voice provider](/docs/guides/connect-a-voice-provider) — pick a path and verify ingestion.
* [Conversations](/docs/conversations) — where ElevenLabs calls land.
* [Agents](/docs/agents) — how Zelto models each agent.
* [Findings](/docs/findings) — what analysis surfaces from each call.
* [Speechify](/docs/integrations/speechify) · [Retell](/docs/integrations/retell) · [Vapi](/docs/integrations/vapi) — the other native voice integrations.
