Documentation menu

API reference

Changelog

SautiPBX is in closed beta and pre-1.0 — the API and the Browser SDK may still change. This page tracks what's shipped so far.

2026-07-12

Call-control webhooks carry customPayload & endUser

The call-control request now includes customPayload whenever the caller attached one (previously echoed only on events), and — for a browser-phone outbound call — an endUser object identifying the user who placed it (uuid, email, display_name, extension_number). Because From is the account's shared DID, endUser is how your handler attributes an outbound browser call to a specific user.

2026-07-11

Per-purpose webhooks & SDK 0.1.2 — call-failure reasons

Webhooks are now configurable per purposevoice_inbound, voice_outbound, status — both account-wide (POST /account/webhooks takes a purpose) and per number (POST /numbers/configure takes a webhook_urls map). The Number object now includes webhook_inbound (the resolved route + its source). A refused browser-phone call now returns a specific SIP status (e.g. 402 for insufficient balance), and @sauti-pbx/voice-sdk 0.1.2 exports describeFailure() to turn a call's failed reason into a readable line.

2026-07-09

Browser SDK 0.1.1 — standardized ICE config

POST /phone-tokens/mint now returns a single iceServers array, matching what @sauti-pbx/voice-sdk's authenticate() expects directly — no more remapping STUN/TURN fields by hand.

2026-07-08

Browser SDK published

@sauti-pbx/voice-sdk published to npm — call, answer, hold, mute, DTMF, and device selection over WebRTC. See the Browser SDK guide.

2026-07-05

Realtime event stream + idempotent number acquisition

Added POST /stream/token for the WebSocket event feed. POST /numbers/acquire now accepts Idempotency-Key.

2026-06-21

Outbound calling, billing controls, and stable event codes

POST /calls/originate and POST /calls/hangup shipped, both idempotent. Per-account concurrency and calls-per-second caps went live (see rate limits). Every event and terminal outcome now carries a stable dotted code — see Events & codes.

2026-06-20

Call control verbs, V1 complete

The full V1 verb vocabulary — Say, Play, Dial, Record, RecordSession, Redirect, Pause, Hangup — shipped on the call-control interpreter. See Call control (verbs).

2026-06-10

First REST endpoints

Calls, recordings, and the realtime stream became queryable over the REST API for the first time.