Limits
The attempt limits, token lifetimes and size limits you can run into, in one place.
Attempt limits
These stop passwords, codes and vault keys from being guessed. Only failures count, and a success clears the counter, so ordinary use never reaches them. A request over the limit gets 429 with a Retry-After header. Why they work this way is explained in authentication.
| Attempt | Limit | Counted per |
|---|---|---|
| Password sign-in | 10 failures per 15 minutes | Account and source address |
| Authenticator (TOTP) code | 5 failures per 15 minutes | Account and source address |
| Custom vault key (web, CLI, MCP and API) | 10 failures per 15 minutes | User or service token, and source address |
| Email OTP code | 5 failures, then the code is destroyed | Issued code |
| Sending an email OTP code | One every 60 seconds | Email address |
CLI connection requests (apivault login) | 5 per 10 minutes | Source address |
Token lifetimes
| Credential | Lifetime | Afterwards |
|---|---|---|
| CLI device token | 90 days | Run apivault login again |
| Service token | 7, 30, 90, 180 or 365 days | Create a new one |
| MCP access token | 1 hour | Refreshed automatically by your client |
| MCP refresh token | 30 days | Approve the connection again |
| MCP authorization code | 5 minutes | Start the connection again |
| Email OTP code | 10 minutes | Request a new code |
Service token expiry
Service tokens default to 90 days and have no never-expires option, so a forgotten pipeline credential cannot outlive the pipeline. See expiry.
Request limits
| Request | Limit |
|---|---|
| Audit log entries per request | 50 by default, 1000 at most |
Integration limits
These are set by the platform you sync to. Details, including what happens to keys that don't fit, are on each integration's page.
| Platform | Limit |
|---|---|
| Supabase | 100 secrets per project, not counting its built-in SUPABASE_ secrets |
| Cloudflare Workers | Values up to 5 KiB; the number of variables depends on your Cloudflare plan |
| GitHub Actions | Environment names up to 255 characters, without " < > \ / : * ? | |
Was this page helpful?