Create Call
Ingest a completed call for analysis.
Accepts the transcript and metadata for a call that has already finished. Tuner queues it
for evaluation; scores, outcomes, and red flags appear on the call record shortly after.
call_id must be unique: re-sending an already-ingested call returns a conflict.
Authorizations
Use Tuner API key (tr_api_...) or user session token. Find your API key in Workspace Settings > API Keys.
Query Parameters
Workspace ID. Find this in Workspace > General Settings.
Your Agent ID configured in Tuner. Get this value from Agent Settings > Agent Connection > Agent ID.
"agent_abc123"
Body
Request schema for public call creation.
Unique call identifier from your provider. Must be unique; a duplicate is rejected with a conflict (409).
1 - 200"call_example_0001"
Call channel/type from your provider (e.g., 'phone_call', 'web_call').
1 - 100"phone_call"
The call timeline in chronological order. Each item is a user turn, an agent turn, a tool call or its result, or a workflow node transition.
User and agent turns must carry timing — as words, as start_ms and end_ms, or as start_ms and duration_ms. Latency and voice metrics are computed from it.
1Call start time as Unix epoch. Accepts either seconds or milliseconds.
Call end time as Unix epoch. Accepts either seconds or milliseconds. Must be greater than or equal to start_timestamp.
Public https URL of the call recording (audio file or provider recording link). Required. A value that isn't a public https URL (e.g. a placeholder such as pending) is stored as sent but treated as no recording: it isn't played back or used for Dataset calls.
1 - 1024Optional SIP Call-ID reported by your provider. Stored as the call's SIP identifier and used to correlate the call with a simulation; it never replaces call_id for persistence or idempotency.
1 - 200Optional SIP headers from the incoming call. For Tuner simulation calls, pass back the X-Correlation-Id header Tuner sent to link the call to its simulation. Only the X-Correlation-Id (or Correlation-Id) header is kept, and it is used only to link the call to its simulation; all other headers are ignored.
Recipient phone number (E.164) or SIP URL for outbound calls. For outbound Tuner simulation calls, send the SIP URI your agent dialed so the call can be linked to its simulation.
1 - 500The version of the agent that handled this call (e.g. 3).
x >= 0Diarized plain-text transcript (fallback for display/search). If omitted, we derive it from transcript_with_tool_calls when possible.
Call duration in milliseconds. If omitted, we compute it from start_timestamp and end_timestamp.
Provider call status at ingest time. Preferred values: 'call_ended'.
100Why the call ended (e.g. user_hangup, agent_hangup).
100Caller phone number in E.164 format when available (e.g., '+14155550123').
50Whether the call was successful
User sentiment label. Must be one of [positive, neutral, negative, unknown]
50Whether the call reached voicemail
Dynamic variables collected during the call (free-form JSON). Evals can read these through metadata.<key> in inputs_used; rules and alerts cannot, so send values you want to filter or alert on in metadata.
Total call cost in cents (e.g. 125 for $1.25).
Provider-native analysis payload (free-form JSON; stored as-is)
Custom data about the call, as a JSON object. Nested objects are allowed and keys are case-sensitive. ai_models and usage_token have a defined structure; any other keys are accepted. Merged with general_meta_data_raw, whose keys win on collision. Evals, rules and alerts can refer to these keys as metadata.<key>: in an eval's inputs_used, in an alert condition, and in the key of a call_metadata rule condition.
Custom data about the call, as a JSON object. Nested objects are allowed and keys are case-sensitive. If metadata is also sent, the keys are merged and these keys win on collision. Evals, rules and alerts refer to these keys the same way as for metadata.
Public https URL of a multi-channel recording (separate speaker channels), if available. A value that isn't a public https URL is stored as sent but treated as no recording: it isn't played back or used for Dataset calls.
1024Supplying this opts the call into receiving a presigned upload target (recording_upload in the response) so you can upload the call's audio directly to Tuner's storage. Provide the file extension without a leading dot (e.g. 'wav', 'mp3'). Omit this field entirely if you are not uploading audio.
Whether the audio being uploaded has the caller and the agent on separate channels rather than mixed into a single channel. Only applies to audio uploaded via recording_file_extension. Omit this field if the recording is a mono mix -- it is treated as a mono mix by default.
The 0-based index of the channel carrying the caller's voice, for audio uploaded via recording_file_extension. Defaults to 0 and is only meaningful when recording_s3_multi_channel is true.
x >= 0Response
Successful Response
Response schema for public call creation.
Internal Tuner call ID
Echo of the provider call ID, which is the call_id supplied in the request.
Always true for a successful create; re-sending an existing call_id returns 409 instead.
Present only when the request set recording_file_extension and the upload target could be prepared; the target is valid for 24 hours. Null if the extension was omitted, if the call already had a recording uploaded, or if preparing the target failed after the call was otherwise saved successfully.