Get one call by id
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
Path Parameters
uuidResponse Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/calls/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "call": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9", "session_id": "string", "direction": "inbound", "local_e164": "string", "remote_e164": "string", "country": "string", "started_at": "2019-08-24T14:15:22Z", "answered_at": "2019-08-24T14:15:22Z", "ended_at": "2019-08-24T14:15:22Z", "duration_seconds": 0, "status": "ringing", "cost_minor": 0, "cost_currency": "string", "rate_per_minute_minor": 0, "ledger_entry_id": "34c94b99-ae7e-4ed1-928e-78f0df05c275", "pbx_call_id": "string", "failure_code": "string", "metadata": {}, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "events": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "call_id": "0d0a16ab-a508-4d58-bf24-5dc3cb248f3e", "kind": "string", "payload": {}, "occurred_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string" }}Workspace stats (calls today / failed / minutes / spend) GET
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.
Live Server-Sent Events stream of a call's lifecycle GET
Opens a `text/event-stream` (SSE) connection that pushes call lifecycle transitions (ringing, answered, completed, failed, …) as they happen. Intended for the in-app dialer's live call view. Past lifecycle events are also embedded inline on the Call resource (`Call.events`) — this endpoint is only for the live tail; there is no separate read endpoint for historical events. The connection stays open until the call reaches a terminal state or the client disconnects. Workspace isolation: the call must belong to the active workspace, otherwise this endpoint returns 404.