Skip to main content
Every call in Zelto arrives through one of four ingestion paths. This guide helps you pick the right one and confirm it’s working; each provider’s own page has the click-by-click steps.

Which integration do I need?

If you run on Vapi, Retell, or ElevenLabs, use the native integration: connect with an API key, import an agent, and Zelto starts pulling calls automatically. Optional webhooks configured under Settings → Integrations make new calls arrive sooner. LiveKit and the custom path are push-based: your code forwards each finished call with an org API key. Every path lands in the same conversations list, tagged with the originating agent.

What “connected” looks like

However a call arrives, the path through Zelto is the same:
1

The payload is recorded

Zelto records the raw payload in an append-only log before anything else, so ingestion is replayable and no delivery is lost.
2

A conversation appears

A row shows up in Conversations with the transcript and, when present, the re-hosted recording.
3

Analysis runs

The call is analyzed in the background; findings attach as they surface.

Verify your first call

Place a test call to your agent, then:
  1. Open Conversations and confirm the call is listed with its transcript.
  2. Check the agent’s Connections card for its most recent call or ingestion error.
That round trip — call placed, provider sync runs, conversation visible — means the integration is live. An optional webhook shortens the wait.

Troubleshoot a missing call

If a call doesn’t appear in Conversations, where you look depends on how it arrives:
  • Vapi, Retell, or ElevenLabs — open the agent and check its Connections card. A recent “last call received” time means calls are flowing. If nothing arrives after the next sync, confirm you imported the right agent and that the connected API key still works. If you enabled the optional webhook, also check its most recent delivery status.
  • LiveKit or a custom stack — check the HTTP response your code got back from /webhooks/calls. A { "received": true } body means Zelto accepted the call; a 4xx returns the reason in the body — a missing or wrong X-Zelto-Provider header, a failed field validation, or an invalid API key. Fix the payload against the canonical fields in Custom & other providers, then re-send.