Skip to main content
POST
Create Call
This endpoint uses Tuner API key authentication.
Send your API key in the Authorization header as a Bearer token.

Authorizations

Authorization
string
header
required

Use Tuner API key (tr_api_...) or user session token. Find your API key in Workspace Settings > API Keys.

Query Parameters

workspace_id
integer
required
agent_remote_identifier
string
required

Your Agent ID configured in Tuner. Get this value from Agent Settings > Agent Connection > Agent ID.

Body

application/json

Request schema for public call creation.

call_id
string
required

Unique call identifier from your provider (used for idempotency).

Required string length: 1 - 200
call_type
string
required

Call channel/type from your provider (e.g., 'phone_call', 'web_call').

Required string length: 1 - 100
transcript_with_tool_calls
PublicTranscriptSegment · object[]
required

Unified call timeline. Each item represents either a user message, agent message, node transition, or a tool event. Include timing either as word-level ("words") or segment-level ("start_ms + end_ms" or "duration_ms")

Minimum array length: 1
start_timestamp
integer
required

Call start time as Unix epoch. Accepts either seconds or milliseconds.

end_timestamp
integer
required

Call end time as Unix epoch. Accepts either seconds or milliseconds. Must be greater than or equal to start_timestamp.

recording_url
string
required

Publicly reachable recording URL (audio file or provider recording link).

Required string length: 1 - 1024
sip_call_id
string | null

Optional SIP call identifier. When provided, it is used as provider_call_id for persistence and idempotency.

Required string length: 1 - 200
recipient
string | null

Recipient phone number (E.164) or SIP URL for outbound calls.

Required string length: 1 - 500
agent_version
integer | null

The version of the agent that handled this call (e.g. 3).

Required range: x >= 0
transcript
string | null

Diarized plain-text transcript (fallback for display/search). If omitted, we derive it from transcript_with_tool_calls when possible.

duration_ms
integer | null

Call duration in milliseconds. If omitted, we compute it from start_timestamp and end_timestamp.

call_status
string | null

Provider call status at ingest time. Preferred values: 'call_ended'.

Maximum string length: 100
disconnection_reason
string | null

Why the call ended (e.g. user_hangup, agent_hangup).

Maximum string length: 100
caller_phone_number
string | null

Caller phone number in E.164 format when available (e.g., '+14155550123').

Maximum string length: 50
call_successful
boolean | null

Whether the call was successful

user_sentiment
string | null

User sentiment label. Must be one of [positive, neutral, negative, unknown]

Maximum string length: 50
in_voicemail
boolean | null

Whether the call reached voicemail

collected_dynamic_variables
Collected Dynamic Variables · object | null

Dynamic variables collected during the call (free-form JSON)

call_cost
number | null

Total call cost in cents (e.g. 125 for $1.25). Client sends cents; frontend converts from dollars for UX.

call_analysis
Call Analysis · object | null

Provider-native analysis payload (free-form JSON; stored as-is)

metadata
CallMetadata · object | null

Call-level metadata (e.g. context, custom attributes). Supports structured ai_models and usage_token fields; extra keys are also accepted. Merged into general_meta_data_raw for storage. If both are sent, keys are merged; general_meta_data_raw keys win on collision.

general_meta_data_raw
General Meta Data Raw · object | null

Use to store any extra metadata payload as a JSON object

recording_multi_channel_url
string | null

Multi-channel recording URL (separate speaker channels), if available.

Maximum string length: 1024

Response

Successful Response

Response schema for public call creation.

id
integer
required

Internal Tuner call ID

provider_call_id
string
required

Echo of the persisted provider call ID (sip_call_id when provided, else call_id).

is_new
boolean
required

Whether the call was newly created (false means it already existed)