On a Python stack? Use the Python SDKs instead — they capture the timeline for you and send it in one call. This guide is for every other language.
- the turn-by-turn timeline — user speech, agent speech, tool calls, tool results — each with start and end timestamps relative to call start
- per-turn latency fields, if you want them: STT time-to-transcript, LLM time-to-first-token, TTS time-to-first-byte, end-to-end
- interruption detection, by comparing when a user turn starts against when the agent’s turn ended
Prerequisites
- Tuner Active Account
- A Tuner agent with provider Custom API
- Your Tuner API key and workspace ID — see the contract and authentication
Happy path
The video below walks through the full flow.- Create a Tuner Agent and select Custom API as the integration type.
- In your voice system, after the call ends, capture:
- the full structured conversation timeline (agent and user messages, tool calls, and any node or state transitions)
- call start and end timestamps
- a publicly accessible recording URL
- any relevant operational or enrichment data — cost, call outcome, dynamic variables, or provider-native analysis
- Call the Create Call endpoint with all data, following the API reference.
- Open Tuner → Calls to see the processed results.
API reference
The full Create Call request and response schema, with examples: → Create Call API ReferenceBest practices
- Make retries safe. Treat
call_idas immutable and retry the same request on failure. A duplicatecall_idreturns409, which counts as success. - Send the final transcript. If you only have partial transcripts, send only when final, or the analysis runs on incomplete data.
- Log request IDs and responses. You’ll want them when debugging ingestion.
Common issues
Calls don’t appear in Tuner
Usually one of:- wrong
workspace_id agent_remote_identifierdoesn’t match the agent mapping you intended- the call was sent but the transcript is empty or invalid
Unauthorized (401)
- Ensure you’re sending
Authorization: Bearer <API_KEY>, notX-API-Key. - Confirm the key belongs to the workspace you’re sending to.
Validation errors (4xx)
- Follow the API reference for required fields and types.
- If you’re unsure which field failed, start from the minimal example in the API reference and add fields incrementally.
Next steps
Create Call API reference
Required fields, types, and a minimal example.
Worked example
A full single-file integration built on this API.
Webhooks
Receive events when analysis finishes or an alert fires.
Review your first call
What Tuner does with the data once it lands.