What this is
Tuner needs one thing from your stack: the completed call, meaning a structured conversation timeline plus metadata, sent once after the call ends. Tuner then processes it and runs your configured analyses.Choose your path
The two paths produce identical results in Tuner and follow the same contract. Use the SDKs on a Python stack and the API from any other language.Python SDKs
On a Python stack, start here. Attach observers to your STT, TTS, and LLM framework. They capture the transcript, per-turn timing, tool calls, usage, and cost for you, and send everything in one
flush() at call end.Direct API
Any other language. Build the call timeline yourself and POST it to the Create Call API after the call ends. This is more work: you assemble the per-turn timing and interruption data the SDKs derive automatically.
The contract
However you send calls, these identifiers decide which agent a call lands under:workspace_id: the Tuner workspace receiving the callagent_remote_identifier: your Agent Remote ID, from Agent Settings > Agent Connectioncall_id: your unique identifier for the call. Use the same value on every retry so ingestion stays idempotent.
Simulation
To use Call Simulation, your calls also need the SIP data Tuner puts on the call (inbound) orrecipient (outbound). Follow Enable simulation on your path’s page: Python SDKs or Direct API.
Authentication
All API requests use Bearer authentication. Send your Tuner API key in theAuthorization header. Create the key on the API Keys page of your workspace; see API keys.
tuner-core and the LiveKit SDK read the key from the TUNER_API_KEY environment variable and send it for you. The Pipecat Observer takes it as the api_key argument.
Webhooks
Tuner can send events about this agent’s calls to a webhook. See Webhooks.Next steps
Python SDKs
The session lifecycle, observers, and one flush at call end.
Direct API
Build the payload yourself and POST it.
Create Call API reference
The full request/response schema both paths feed into.
Review your first call
What Tuner does with the data once it lands.