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

Estimate call cost

Pre-call cost estimate for a PSTN call: the carrier leg plus optional recording and transcription add-ons. Same billing formula as the post-call invoice, so the quote and the final charge can't disagree. The per-minute figure is deliberately conservative (the real cost comes from the settled carrier record after the call), so estimates trend slightly over the actual invoice. Parity endpoint of GET /v1/whatsapp/calls/estimate, minus the Meta line (PSTN calls have no separate Meta bill, so totalCostUSD equals billableCostUSD).


GET
/v1/voice/calls/estimate

Authorization

bearerAuth
AuthorizationBearer <token>

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

In: header

Query Parameters

to*string

Destination number, E.164 (leading + optional).

from?string

The number the call would dial from, E.164. When it is verified on a Branded Calling identity and to is a US number, the estimate includes the per-call Branded Calling surcharge.

minutes?integer
Range1 <= value <= 120
Default1
recording?boolean
transcription?boolean

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.getVoiceCallEstimate({  query: {    to: 'string',  },});console.log(data);
{  "destinationCountry": "string",  "minutes": 0,  "perMinuteUsd": 0,  "breakdown": {    "telnyxCostUSD": 0,    "recordingCostUSD": 0,    "transcriptionCostUSD": 0,    "brandedCallUSD": 0,    "billableCostUSD": 0,    "totalCostUSD": 0  }}
Was this page helpful?

Get a call recording

Resolves a fresh, playable MP3 URL for the call's recording (provider-signed URLs expire ~10 minutes after signing, so this endpoint re-signs on demand). Default responds `302 Found` redirecting to the fresh URL; pass `as=json` to receive `{ url }` instead.

Mint a browser softphone session

Step 1 of the two-step browser softphone handshake. Mints a WebRTC session (token + credential) the browser registers with the `@telnyx/webrtc` SDK. Once registered, call `POST /v1/voice/calls/web/dial` with the returned `credentialId` to place the call. The split avoids bridging to a browser that has not finished registering. The token lives ~1 hour (it must outlive the whole call, not only the handshake).