Buy additional concurrent agent seats
Charges the wallet immediately and raises seats_total by quantity.
Seats are a monthly subscription: they renew from the wallet, and a
failed renewal sets past_due rather than removing capacity silently.
Requires a writer role — buying capacity spends money.
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
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/agents/seats/purchase" \ -H "Content-Type: application/json" \ -d '{ "quantity": 1 }'{ "quantity": 0, "purchased_seats": 0, "charged_minor": 0, "monthly_minor": 0, "currency": "string", "renews_at": "2019-08-24T14:15:22Z"}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ] }}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.
Give back purchased agent seats POST
Lowers `purchased_seats` so the next renewal bills for fewer seats. Only seats you bought can be released; the plan's `tier_seats` are not affected.