Get concurrency-seat usage for the workspace
Live read of seats_in_use / seats_total — a claim/release cycle is visible on the next call.
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
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/agents/limits"{ "seats_total": 0, "seats_in_use": 0, "seat_tier": "free", "workspace_id": "0967198e-ec7b-4c6b-b4d3-f71244cadbe9"}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}Place a one-off AI agent call POST
The single-call primitive: dials one number, composing the agent's `base_prompt` with the per-call `prompt_template` (+ `variables`), bypassing broadcast schedule/retry machinery. Billed normally; occupies a concurrency seat like any broadcast dial. The caller-ID is the workspace's own dialable number (422 `send.no_caller_number` if none). Pass `revision` to compose against a pinned published revision instead of the mutable draft.
Get the workspace's agent seat state GET
A seat is one CONCURRENT AI agent call. `seats_total` is what you can run at once: `tier_seats` (from your plan) plus `purchased_seats` (bought with `POST /v1/agents/seats/purchase`). `seats_in_use` is read live from the seats ledger, not cached. When `past_due` is true the seat subscription failed to renew; purchased seats are at risk until the wallet is funded.