Skip to main content
POST
Place a call

Authorizations

Authorization
string
header
required

Your Wixzel Voice API key: Authorization: Bearer wv_live_.... Keys are scoped; grant only what the integration needs.

Headers

Idempotency-Key
string
required

A unique value per call attempt, e.g. a UUID.

Required string length: 1 - 255

Body

application/json
to
string
required
Pattern: ^\+[1-9]\d{6,14}$
Example:

"+14155550100"

agent_id
string
required
Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

from_number_id
string

Defaults to the agent's outbound number.

Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

lead_id
string

Existing lead to attribute the call to. One is created if omitted.

Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

lead_name
string
Maximum string length: 200
metadata
object

Your own identifiers — an order number, a ticket id, a tenant — kept verbatim on the call and echoed back on it and in its outboundCall and callCompleted webhooks. Flat, string to string. Never sent to the model.

Response

The call, queued for dialling

id
string
required
Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

object
enum<string>
required
Available options:
call
session_id
string
required

Stable id for this call across logs, usage and webhooks.

status
enum<string>
required
Available options:
queued,
ringing,
in-progress,
completed,
failed,
busy,
no-answer,
canceled
direction
enum<string>
required
Available options:
inbound,
outbound
channel
enum<string>
required

phone for a call over your SIP trunk; web for a realtime session from a browser or app (POST /v1/realtime/sessions). Web sessions are inbound and have no from/to.

Available options:
phone,
web
agent_id
string | null
required
Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

lead_id
string | null
required
Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

campaign_id
string | null
required
Pattern: ^[0-9a-f]{24}$
Example:

"6a96a3ead6e886d42462dd3e"

from
string | null
required
to
string | null
required
duration_seconds
integer | null
required
engine
string | null
required
recording_url
string | null
required
summary
string | null
required
cost_micros
integer | null
required

Micro-USD. 1_000_000 = $1.00.

Example:

194000

metadata
object | null
required

Whatever you attached to POST /v1/calls, returned verbatim. Null if you attached none.

failure_code
integer | null
required

Q.850 hangup cause from the carrier, or null if the call connected. Branch on this rather than on failure_reason, which is prose and may be reworded. 17 busy, 19 no answer, 21 rejected by the carrier, 34 congestion, 102 timeout.

Example:

21

failure_reason
string | null
required

What to actually do about the failure, in plain language. Null if the call connected.

Example:

"The provider rejected the call outright (403/407). In order of likelihood: your carrier account is suspended, closed, or out of balance; …"

started_at
string<date-time> | null
required

ISO 8601, always UTC.

Example:

"2026-09-01T12:00:00.000Z"

ended_at
string<date-time> | null
required

ISO 8601, always UTC.

Example:

"2026-09-01T12:00:00.000Z"