Billing and limits
What a request costs, what a free account gets, and the rate limits.
View as MarkdownBilling
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.
curl -s "$SAI_API_URL/v1/agents/account" \
-H "Authorization: Bearer $SAI_API_KEY"{
"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:
{
"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.
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
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.