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?

Your stackUseHow calls arrive
VapiNative API keyWebhooks — you paste Zelto’s URL into Vapi
RetellNative API keyWebhooks — you paste Zelto’s URL into Retell
SpeechifyNative API keyPer-agent webhook — you set Zelto’s URL as the agent’s webhook_url
TelnyxNative API keyImport assistants today; forward calls via Custom & other providers for now
LiveKitPush from your workerYour agent forwards each finished session with an API key
ElevenLabsNative API keyPost-call webhook you add in ElevenLabs (signed), with hourly pull as backup
Anything else — Bland, Pipecat, in-houseCustom & other providersYou POST calls to /webhooks/calls
If you run on Vapi or Retell, use the native integration — you connect with an API key, paste Zelto’s webhook URL into the provider, and recordings are fetched for you. LiveKit and the custom path are push-based: nothing pulls calls for you, so your code forwards each finished call with an org API key. All four land 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 — it shows whether a webhook has arrived recently, the fastest “is anything getting through?” signal.
That round trip — call placed, webhook arrives, conversation visible — means the integration is live.

Troubleshoot a missing call

If a call doesn’t appear in Conversations, where you look depends on how it arrives:
  • Vapi or Retell — open the agent and check its Connections card. A recent “last call received” time means calls are flowing; “no recent calls” means nothing has arrived lately; “last webhook errored” means the most recent delivery reached Zelto but couldn’t be turned into a conversation. No calls at all? Re-check the webhook URL in the provider, and that the provider is actually sending events.
  • 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.