Skip to main content
Place a call
The 202 is an acknowledgement - the call dials asynchronously. Track its outcome via webhooks or GET /v1/calls/{id}.
The shared Test Number cannot be used here. Every workspace holds Vocily’s Test Number so you can place a dashboard test call before you own any telephony, but it is refused by the API - passing it as from_number returns 403 test_number_not_allowed, and no call is placed.To place a call through the API, use a number from your own carrier account or one rented from Vocily.

Choosing a version

Omit version and the agent’s live version answers, which is what a real caller gets. Pass version to dial a specific one — the same number every other version route takes, so you can test what you just published without looking anything up:
agent_version_id names the same choice by uuid and still works. Sending both is a 400 invalid_request.
An idempotent retry sets a header. Repeating a request with the same Idempotency-Key returns the original call rather than placing a second one, and marks the response Idempotent-Replay: true. The body is identical either way, which is the point of idempotency.

Authorizations

Authorization
string
header
required

Your API key as a Bearer token, e.g. Authorization: Bearer vk_….

Headers

Idempotency-Key
string | null
required

Your own unique string for this attempt. Required for API-key callers: a repeat within 24h returns the ORIGINAL call instead of placing a second one, which is what stops a network timeout from dialling — and charging — twice.

Body

application/json

Outbound call request.

agent_id
string
required

Agent to use for the call

to_number
string
required

Destination number (E.164)

version
integer | null

Which version of that agent to run, by number — e.g. 4, the same number every other version route takes. Omit it and the agent's live version answers.

agent_version_id
string | null

The same choice as version, by uuid. Prefer version: a number is what you already hold after publishing. Omit both and the agent's live version answers.

from_number
string | null

Our number (must be in workspace); optional if only one number

variables
Variables · object | null

Prompt variables e.g. {customer_name: 'Rahul'}

metadata
Metadata · object | null

Opaque customer JSON, stored + echoed on reads/webhooks

Response

Successful Response

A placed call, acknowledged. The call dials shortly after this returns.

id
string
required

The call's id. Use it on GET /v1/calls/{id} and to join webhook events to this call.

status
string
default:started

Where the request got to. The call is placed asynchronously — started means accepted, not answered.

metadata
Metadata · object | null

Exactly what you sent as metadata, echoed back.