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