Plan limits
- Free and Plus have a payment limit. Enterprise has none.
- Upgrading raises the limit but does not reset the count, which carries across plan changes.
- A refusal for a plan quota is
plan_quota_reached. It is an account setting, not a card setting. - Plan quotas apply on production deployments only. Preview, development, test and staging deployments are not metered.
Spending limits
Set per agent card, in US dollars. Every window is rolling, not a calendar period. A foreign total is converted at a daily reference rate, plus a 3% safety buffer, before it is checked. A currency with no rate, or a rate older than 48 hours, counts as an unknown total.
On Free, the starter agent card carries every default except the daily limit.
The daily, weekly and rolling 30-day limits apply on production deployments
only, like plan quotas. Preview, development, test and staging deployments are
not metered: they ignore those rolling caps and enforce only the per-transaction
cap.
A breach always refuses that fill with
limit_reached. What happens next depends
on Auto-pause on limit exceeded (autoPauseOnLimit), which is on for every
agent card created in the dashboard:
- On: any breach, including a per-transaction one, changes the card’s status
to
limit, and it stops filling until you resume it. - Off: the card stays
active. A smaller cart, or the same purchase once the window rolls past older fills, goes straight through.
Sessions
Tokens never expire. Only sessions do.
Concurrent sessions
- Past the limit,
chromium.launch()is refused withsession_limit. The connect is refused, not queued, and nothing is opened or spent. - Every session holds a slot until it closes.
browser.close()returns once the proxy acknowledges the close, before the slot is released, so a launch right after it can still getsession_limitat the plan limit. Speaking the protocol directly, close the WebSocket: abrowser.closeframe alone leaves the session open. - A slot whose release failed, or one held by a proxy that crashed, frees itself within 3 minutes, when its lease runs out without a renewal.
- Close a session you no longer need, or wait for one to finish, then launch again with backoff. Retrying in a tight loop only spends the connect rate limit below.
- The limit is per account, so another API key does not raise it.
Hosted MCP server
These apply only to the hosted MCP server. The agent gets each refusal as a tool error carrying the message.Waiting for the account holder
Rate limits
Filing a signup request with
POST /v1/logins/requests counts toward the
per-minute login write limit, but not toward the 24-hour credential-change budget.
An ordinary pending request draws on that budget only when the account holder
approves it. If the budget is spent then, the request stays pending and the
agent never sees daily_limit. A pre-approved signup that completes at once
draws on its own allowance instead, listed under Ceilings.
The catalog, connect and token resolution windows are fixed one-minute windows,
not sliding ones. A refused request records nothing, so retrying early is refused
again without pushing the window out. The per-account budgets mean another API
key does not raise the limit. A refused fill leaves the session open, so retry it
on the same page.
Ceilings
Past either pre-approved ceiling,
POST /v1/logins/requests is not refused. It
answers pending instead of approved, and the request waits for the account
holder like any other.
Two more ceilings apply when the account holder adds sites to the
Pre-approved signups list. Each one
refuses the whole add with signup_preapproval_too_many, and nothing from that
add is saved.
Labels per site name
Every login gets a label made from its site’s name, such asexample for
example.com. A label holds at most 32 lowercase letters and digits, so a
longer site name is cut short. When that label is taken, Agent Vault tries example2,
example3 and so on, up to 50 candidates. Sites with the same name share them,
so example.com and example.co.uk draw on the same 50.
When all 50 are taken, a new login for that name is refused, even below the
500-login ceiling:
- The account holder’s Add login form does not save the login, and shows only That login could not be saved. Check the fields.
- An agent’s signup request cannot be approved. It stays
pending, and the request on Logins says Could not find a free name for this login. Its failure reason islabel_unavailable. The agent never sees this code: its request simply stayspending. A pre-approved signup falls back topendingfor the same reason.
Payload sizes
Field lengths
Tool limits
Generated passwords
Applies to the passwords the vault generates for agent signups and password rotations (createLogin, rotateLoginPassword, the create_login and
rotate_login_password tools, and POST /v1/logins/requests and
POST /v1/logins/password).
Automatic key revocation
Each refusal is counted once, at the proxy.
Data retention
Expired data is removed hourly.
Attested checkout concurrency
Applies only to attested detokenization, which is off by default. One code,attested_checkout_busy, covers four ceilings on attested checkouts
running at once: by default 1 per session, 2 per key, 2 per account and 4 per
proxy instance. It is the one attested code that clears on its
own. Back off and retry rather than opening more sessions: the per-key and
per-account ceilings mean extra keys do not raise the limit.