Docs/Billing and limits
Concepts

Billing and limits

What a request costs, what a free account gets, and the rate limits.

View as Markdown

Billing

Sai is credit-based. Each task draws credits from your account. The computer and the model are included; you do not bring your own model keys and there is nothing to configure.

  • Free accounts get one pooled Windows cloud computer, a daily time limit on it, and a daily credit grant. Phone verification is required before the first API key. The exact daily figures are shown in the portal.
  • Paid accounts get their own computers, a larger credit balance and top-ups.

Upgrade at platform.simular.ai.

Check your balance

GET /v1/agents/account returns the plan and the credit a task can spend right now.

bash
curl -s "$SAI_API_URL/v1/agents/account" \
  -H "Authorization: Bearer $SAI_API_KEY"
json
{
  "userId": "3fA9kQ2xYz",
  "userState": "active",
  "plan": {
    "id": "sai_subscription",
    "title": "Sai Subscription",
    "free": false,
    "unlimited": false
  },
  "credits": { "usd": 12.4 },
  "authType": "apiKey"
}

credits is null when Billing cannot be reached, and credits.usd is null on the unlimited plan. When a task ends with an insufficient-credits error, this call tells you whether to top up or wait for the free plan's daily grant. See Account.

When you run out

A task that stops for lack of credits or computer time ends with an error or tool-output-error event carrying a code:

codeWhat happenedWhat to do
insufficient_creditsNo spendable credit. The event's resetsAt is the next UTC midnight, when a free account's daily credits refresh.Free: wait for resetsAt. Paid: top up at platform.simular.ai.
free_computer_time_exhaustedThe free plan's daily computer time is spent and the workspace shut down. It resets daily; the Sai app shows the local time.Free: come back tomorrow, or upgrade. Do not retry today.
json
{
  "type": "error",
  "errorText": "insufficient_credits: your free credits for today are used up.",
  "code": "insufficient_credits",
  "resetsAt": "2026-09-30T00:00:00.000Z"
}

Neither error is retryable today. Stop the loop, report it, and check GET /account if you want the numbers. See Events.

Models

Each task runs on the session's model. The default, auto, lets Sai pick. GET /v1/agents/models lists the catalog with an allowed flag per plan; the free plan is limited to an allowlist. Pass model on POST /message to change it. See Models.

Rate limits

Limits apply per account on a rolling one-hour window, shared across every client (API keys, the CLI, the desktop app). Exceeding one returns 429 with an error string. Back off and retry after a minute.

ActionLimit
POST /message60 per hour
POST /upload30 per hour, 25 MB per file
POST /abort20 per hour
POST /new-session20 per hour
POST /approve20 per minute
POST /account/keys5 per hour
GET /events1200 per hour; wait at most 60 seconds

Polling /events with wait=0 in a tight loop hits its limit in twenty minutes. Long-poll with wait=30 or more and the same hour costs about a hundred calls.

Key limits

PlanLive keys per account
Free1
Paid20

Creating a key past the limit returns 422. Revoke one in the portal first.

Storage

Uploads count against your account's file storage. When it is full, POST /upload returns 409 with { "error": "storage_quota_exceeded" }. The quota is shown in the portal.