Elizon Docs
Telephony

Place an Outbound Call

POST /api/v1/calls — dial out through an already-configured phone configuration.

Places a real outbound call through a phone configuration you've already set up in Studio (see Providers). The response doesn't arrive until the call is answered, fails, or times out — there's no separate status-polling endpoint.

POST /api/v1/calls

Requires an outbound phone configuration

trunkId must reference a phone configuration that's direction: outbound, status: active, and has finished provisioning. Trunk creation and provisioning happen in Studio, not via this API — see Providers.

Request body

FieldTypeRequiredDescription
trunkIdstring (UUID)YesThe outbound phone configuration to call through. Must belong to your organization (and, for a project-scoped key, your project).
tostringYesDestination number, E.164 or digits-only.
phoneNumberIdstring (UUID)YesWhich caller-ID number on the trunk to dial from. It must have a voice configuration bound to it — that's what tells the agent how to speak.

Response

201 Created:

{
  "roomName": "elizon-call-8f2a1c9e-...",
  "sipCallId": "d290f1ee-...",
  "to": "+15551234567",
  "from": "+15557654321",
  "trunkId": "3f9c1a2e-..."
}

Errors

StatuserrorWhen
400validation errorRequest body fails validation
400wrong_directiontrunkId refers to an inbound trunk
400trunk_not_provisionedThe trunk hasn't finished provisioning yet
400phone_number_missing_voice_configphoneNumberId has no voice configuration bound to it
403forbiddentrunkId doesn't belong to your organization/project
403budget_requiredYour organization has no voice_minutes budget configured — see below
429budget_exceededYour configured voice_minutes budget for this call's scope is exhausted
502call_failedThe carrier rejected the call (busy, no answer, invalid number) — the message has the detail

A voice_minutes budget is required

Unlike starting a voice session, placing an outbound call over the public API requires your organization to have a voice_minutes budget configured (Settings → Budgets) before any call can be placed at all — there's no "unlimited by default" option here. This is a deliberate guardrail: an outbound, pay-per-minute dial-out with no cap is a real fraud-risk surface for a third-party-callable endpoint.

Example

curl -X POST https://api.elizon.com/api/v1/calls \
  -H "X-API-Key: elz_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "trunkId": "3f9c1a2e-...",
    "to": "+15551234567",
    "phoneNumberId": "8b1e4a2f-..."
  }'