Start a click-to-call call
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.
ApiKeyAuthorizationBearer <token>An API key from Developers → API keys: Authorization: Bearer gauge_live_… (or pulse_k_live_…).
Gauge-Version?stringA dated version. Default 2026-10-21.
Idempotency-Key*stringRequired on every POST. Retries with the same key replay the first response for 24 h.
1 <= length <= 255application/json- body
to*stringThe customer to call, E.164.
^\+[1-9]\d{6,14}$numberId*stringYour Gauge number the customer sees. See GET /v2/numbers.
uuidagent?maxDurationSeconds?integerThe hard limit on the conversation, enforced by the carrier. Default and ceiling: your workspace's longest API call (Settings → Compliance).
60 <= value <= 14400record?booleanMust 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*stringMarketing needs a recorded opt-in for voice. Transactional is allowed unless the person opted out.
"marketing""transactional"metadata?Your own keys, echoed back on GET /v2/calls/{id}. Up to 20 keys; strings up to 500 characters.
The agent is being rung (status: ringing_agent).
application/json- response
id*stringThe call id. GET /v2/calls/{id} and every call.* webhook use it.
uuidstatus*"ringing_agent""ringing_agent"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"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "status": "ringing_agent"}