Workspace stats (calls today / failed / minutes / spend)
Aggregates over the window selected by since. Supported
values: today (default), 7d, month. Currency follows the
workspace wallet currency.
Eventual consistency. spend_minor and (to a lesser extent) minutes_total are
finalized asynchronously, after the call's call.completed event
has been processed. The lag between hang-up and stats reflecting
final cost is typically under 5 seconds, and can be longer at
times of high load.
Customers building real-time dashboards SHOULD poll this
endpoint no more frequently than every 30 seconds. For
per-call cost in near-real-time, subscribe to the
call.completed webhook event instead — its payload carries
the final cost_minor after rating.
Authorization
bearerAuth 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
Query Parameters
Value in
- "today"
- "7d"
- "month"
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/calls/stats"{ "total": 0, "failed": 0, "minutes_total": 0, "spend_minor": 0, "currency": "string"}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string" }}Place an outbound call via the PBX POST
Places an outbound call from a workspace number (`from`) to one or more destination numbers (`to`). The call is dialed immediately and the response returns before the remote party answers — poll `GET /v1/calls/{id}` or subscribe to `call.answered` / `call.completed` webhooks for final status. A wallet pre-flight check fires before the PBX is contacted: if the workspace balance is zero the request is rejected 402 (`wallet.insufficient_balance`) without a PBX leg being created. Idempotency & correlation: the `Idempotency-Key` header scopes deduplication — repeated requests with the same key within the active leg's lifetime return the original response. The header value is also forwarded to the PBX as its `clientRequestId`, but the PBX does not reliably echo it back on callbacks — correlate on the `call_id` / `session_id` returned by this endpoint instead (they appear on `call.completed` / `call.failed` webhook payloads as `call_id` / `pbx_call_id`).
Get one call by id GET
Next Page