Zernio
Zernio
API Reference

Voice & Calling

Calls

List phone callsGETPlace an outbound phone callPOSTGet a phone callGETHang up a live callPOSTBlind-transfer a live callPOSTGet a call recordingGETEstimate call costGET

Browser Softphone

Mint a browser softphone sessionPOSTDial from the browser softphonePOST

Number Setup

Enable phone calling on a numberPOSTDisable phone calling on a numberDELETEAttach a number to a SIP trunkPOSTDetach a number from its SIP trunkDELETE

SIP Trunks

List SIP trunksGETCreate a SIP trunkPOSTGet a SIP trunkGETDelete a SIP trunkDELETERotate a SIP trunk's passwordPOST
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources
Voice & Calling

Place an outbound phone call

Dials to FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number's stored forward destination, or to the per-call forwardTo override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional greeting is spoken to the callee before the bridge.

The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via GET /v1/voice/calls/{id} or the call.* webhooks). Outbound calls are capped per rolling hour (429 when hit).

Idempotency: send an Idempotency-Key header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.


POST
/v1/voice/calls

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Header Parameters

Idempotency-Key?string

Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.

Lengthlength <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.voice.createVoiceCall({  body: {    to: 'string',  },});console.log(data);
{  "success": true,  "callId": "string",  "telnyxCallControlId": "string",  "status": "dialing",  "direction": "outbound",  "from": "string",  "to": "string",  "forwardTo": "string",  "greeting": "string",  "recordingEnabled": true,  "transcriptionEnabled": true,  "transcriptionLanguage": "auto"}
Was this page helpful?

List phone calls

Your PSTN voice calls (inbound + outbound), newest first. Cursor pagination: pass the returned `nextCursor` as `before` for the next page. For a history that also includes WhatsApp calls, use `GET /v1/calls`.

Get a phone call

Full call detail, including the transcript segments when transcription was on.

to*string

Destination to dial, E.164 with leading +.

Match^\+\d{6,15}$
fromNumber?string

Which of your voice-enabled numbers to dial from. Optional when you have exactly one.

Match^\+\d{6,15}$
forwardTo?string

Per-call agent override (tel:+E164, sip:..., or wss://...); defaults to the number's stored forward destination.

greeting?string

Spoken to the callee when they answer, before the bridge.

Lengthlength <= 1000
recordOverride?boolean

Per-call recording toggle; defaults to the number's setting.

transcribeOverride?boolean

Per-call transcription toggle; defaults to the number's setting.

transcriptionLanguage?string

'auto' derives from the callee's country; 'en'/'es' force it.

Value in

  • "auto"
  • "en"
  • "es"
amd?boolean

Answering-machine detection; defers the bridge until human vs machine is known.

voicemailDropMessage?string

Spoken to a detected machine, then hang up (implies amd). For outbound voicemail drops.

Lengthlength <= 1000