Upload a call
Provider-agnostic call ingestion. POST a call in Zelto’s canonical shape (the default), or a native Vapi/Retell webhook payload selected with the X-Zelto-Provider header. The delivery is acknowledged immediately and processed asynchronously into a conversation + transcript. Deduplicated by call id: re-uploading the same call updates it in place and never double-charges. Non-terminal native events (e.g. Vapi status-update) are accepted and ignored.
Authorizations
Send Authorization: Bearer YOUR_API_KEY. The key resolves to a single organization.
Headers
Which schema the request body uses. Defaults to zelto (the canonical CallIngest shape, also used by livekit). Native vapi / retell webhook payloads are also accepted.
zelto, vapi, retell, livekit Body
When X-Zelto-Provider is zelto (or omitted), the canonical CallIngest body. When vapi / retell, that provider's native webhook payload.
Zelto's canonical call upload shape (X-Zelto-Provider: zelto). Provide either agent.externalId (find-or-create) or agentId (attach to an existing agent).
Find-or-create an agent by your own id. Required unless agentId is given.
Attach to an existing Zelto agent. Takes precedence over agent.externalId.
Version label for the agent build that handled this call (e.g. v3 or a prompt hash). Recorded as the call's agent version so analytics can segment by it. Optional; wins over any rotating-id derivation when both apply.
1 - 255Agent system prompt. A leading system transcript turn is used if this is omitted.
Free-form metadata stored on the conversation.
Response
Accepted for processing. Also returned for duplicate deliveries and dropped (non-terminal) events.

