API Reference
Calls

Terminate an active call

POST
/v1/calls/{call_id}/hangup

Requests termination of an in-progress call via the PBX. The browser SDK dials directly over WebRTC; this server-side endpoint is the control-plane hangup used to force-end a live call.

Workspace isolation: call_id must belong to the active workspace, otherwise this endpoint returns 404 (cross-tenant existence is not leaked).

Idempotent: if the PBX reports the call already ended, the request still succeeds. Keys on the Sautikit call row UUID (the call_id from POST /v1/calls / the id from GET /v1/calls), never the PBX session id — the server resolves the stored PBX session itself.

Authorization

bearerAuth
AuthorizationBearer <token>

Long-lived ES256 JWT minted from the dashboard (https://app.sautikit.com/developers/api-keys). Signed by the platform keyring. Carries workspace_id and scopes claims; revoked via the platform deny-list.

In: header

Path Parameters

call_id*string

UUID of the Sautikit call row.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/calls/497f6eca-6276-4993-bfeb-53cbbbba6f08/hangup"
{  "call_id": "9d2b1f53-8c0e-4f1d-9a6b-5d3a8c47e9f0",  "status": "hung_up"}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string"  }}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string"  }}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string"  }}
{  "error": {    "code": "validation.bad_request",    "message": "string",    "request_id": "string"  }}