API referenceVoice

Start a click-to-call call

POST
/v2/calls

Rings your agent first (their Gauge softphone, or agent.phone), then calls the customer into the same call when the agent answers. No audio travels over HTTP: the agent talks on the softphone or their phone. Needs the voice-dial scope, granted only by name. Before anything rings Gauge checks the number, then the do-not-contact list, consent (purpose: marketing needs a recorded opt-in for voice) and quiet hours, then reserves maxDurationSeconds × the per-minute rate against your balance and this key's daily cap. maxDurationSeconds is a hard limit enforced by the carrier. If the agent does not answer the call ends as agent_no_answer: the customer is never dialled and the reservation is released. The actual cost is charged when the call ends and the rest released. Follow it with GET /v2/calls/{id} (bridge.status), call.answered and call.completed.

Authorization

ApiKey
headerAuthorizationBearer <token>

An API key from Developers → API keys: Authorization: Bearer gauge_live_… (or pulse_k_live_…).

Header Parameters

Gauge-Version?string

A dated version. Default 2026-10-21.

Idempotency-Key*string

Required on every POST. Retries with the same key replay the first response for 24 h.

Length1 <= length <= 255

Request Body

application/json
  1. body
to*string

The customer to call, E.164.

Match^\+[1-9]\d{6,14}$
numberId*string

Your Gauge number the customer sees. See GET /v2/numbers.

Formatuuid
agent?
maxDurationSeconds?integer

The hard limit on the conversation, enforced by the carrier. Default and ceiling: your workspace's longest API call (Settings → Compliance).

Range60 <= value <= 14400
record?boolean

Must match your workspace's recording setting for now (omit it to follow the setting). When recording is on, the customer hears the recording notice first.

purpose*string

Marketing needs a recorded opt-in for voice. Transactional is allowed unless the person opted out.

Value in"marketing""transactional"
metadata?

Your own keys, echoed back on GET /v2/calls/{id}. Up to 20 keys; strings up to 500 characters.

Response Body

The agent is being rung (status: ringing_agent).

application/json
  1. response
id*string

The call id. GET /v2/calls/{id} and every call.* webhook use it.

Formatuuid
status*"ringing_agent"
Value in"ringing_agent"
Example Request
curl -X POST 'https://app.gauge.chat/api/v2/calls' \  -H 'Idempotency-Key: string' \  -H 'Content-Type: application/json' \  -d '{  "to": "string",  "numberId": "4960e75f-5738-4a19-bb92-2459f0660f6c",  "purpose": "marketing"}'
Example Response
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "status": "ringing_agent"}