Account
Every request authenticates with one of your API keys and counts against your token budgets.
API keys
After we approve your account, you sign in and create keys on the API keys page. A key has the form acs-bm-<prefix>-<secret>, and the page lists each key by its 8-character prefix.
We create your first key when we approve your account and keep an encrypted copy until your first visit to the API keys page. That visit shows the key once and deletes the copy.
For each key you create, we store only a hash. The page shows the key once, when you create it. Copy it before you leave the page. If you lose a key, revoke it and create a new one.
You can pause, resume, rename, or revoke each key. A request that uses a paused or revoked key gets a 401 response. Revoking a key is permanent.
A paused key still counts toward the limit of 10 active keys, but a revoked key does not.
Budgets
Every request counts against up to five token budgets, but a budget with no value set does not limit you. When a budget refuses a request, the 429 budget_exceeded message gives the budget's name from this table, so you know which budget to ask us to raise.
| Budget | Counts | Covers | Resets | Set by |
|---|---|---|---|---|
| key monthly | prompt and completion tokens | one key | the first of each month, UTC | you on the create-key form, or an administrator |
| account monthly | prompt and completion tokens | all your keys together | the first of each month, UTC | an administrator |
| daily | prompt and completion tokens | one key | midnight UTC | an administrator |
| monthly input | prompt tokens | one key | the first of each month, UTC | an administrator |
| monthly output | completion tokens | one key | the first of each month, UTC | an administrator |
We can set a daily budget on a key to pace its usage over a long run.
On the create-key form, No per-key limit starts checked, so a new key has no key monthly budget unless you clear it. Your account monthly budget still applies.
When we set an account monthly budget, the API keys page shows it as "Across all your keys this month." The create-key form caps a key monthly budget at that value. We can set a larger key budget, but the account budget then refuses the request first.
Tokens held by runs that are still active at a reset keep counting until those runs end.
Requests near the cap
Before a request runs, the API reserves its worst case against each budget. Tokens held by your other active runs count as used. In the table, completions is n times the number of prompts.
| Budget | Worst case reserved |
|---|---|
| key monthly, account monthly, daily | prompt + max_tokens × completions |
| monthly input | prompt |
| monthly output | max_tokens × completions |
If the worst case does not fit, the API shortens max_tokens until it fits, so that a script keeps making progress. The Workbench and the Loom never change a value you typed, so they refuse the run instead. To make the run fit, lower max_tokens, shorten the prompt, or choose a key with more budget.
| Surface | When the worst case does not fit |
|---|---|
The API at /v1/completions |
The API shortens max_tokens to fit and runs the request. It returns 429 budget_exceeded when the prompt alone is larger than the remaining monthly input budget, or when not even one token per completion fits. |
| Workbench, single pane | The Workbench refuses the run with 429 budget_exceeded. |
| Loom | The Loom refuses the run with 429 budget_exceeded. The worst case counts every branch. |
| Compare | Compare mode reserves budget one lane at a time. The lanes that fit start, and the other lanes show a budget_exceeded error. |
When the API shortens max_tokens, the response includes this header:
X-Acs-Max-Tokens-Clamped: requested=N,applied=M,reason=budget,source=client
applied is the max_tokens that the request ran with, so the completion can stop at M tokens with finish_reason: "length". Check this header when exact completion lengths matter.
When you leave out max_tokens, the header has source=default instead of source=client. requested is then the API's default. Response headers explains reason.
A refusal clears when your active runs finish and release their holds. A budget reset or a raise from us also clears it.
Account pages
The menu under your email lists Usage, API keys, Settings, and Community once you sign in.
| Page | What you do there |
|---|---|
| Usage | See this month's totals against your budgets, a chart of the last 30 days, and totals by key and by endpoint. Its Recent requests section is the only place that shows which model a request used. |
| API keys | Create and manage your keys, and see each key's last use and tokens this month. |
| Settings | See your profile, change your password, and set preferences. The preference "Show the token heatmap by default in new sessions" sets whether new Workbench sessions, Compare lanes, and looms start with the heatmap on. |
| Community | Connect your Discord account and open the Discord server. |
| Workbench | Run base-model completions in your browser. The server keeps your drafts, so they follow you across browsers. |
| Loom | Grow a tree of base-model completions and continue from any branch. |
Once you sign in, the Feedback button opens a form for a bug report or a feature request.
Request a higher limit
Ask us for a bigger budget, more than 10 keys, a warm window, or a model that is not listed.
- If a budget refused a request, copy the budget name from the
budget_exceededmessage. - Choose Feedback, or email infra@acsresearch.org.
- Include your key prefix or key name.