Each plan
Compute, at once, in all projects of the account
| Free | Paid | |
|---|---|---|
| Largest instance | 2 vCPUs, 4 GiB | 8 vCPUs, 16 GiB |
| Instances awake at once | 5 | 500 |
| Their vCPUs together | 10 | 500 |
| Their memory together | 10 GiB | 1,000 GiB |
| Sleeping instances kept | 20 | 10,000 |
How fast things are made
| Free | Paid | |
|---|---|---|
| Sandboxes made a minute | 10 | 600 |
| Sandboxes one project makes an hour | 200 | 10,000 |
| Cubes and versions made an hour | 10 | 500 |
Cube
| Free | Paid | |
|---|---|---|
| Cubes | 10 | 500 |
| Environment variables and secrets of one app | 64 | 128 |
| Cubes and versions made an hour | 10 | 500 |
| Free | Paid | |
|---|---|---|
Instances of one app in a region: without max_instances / at most |
2 / 5 | 50 / 500 |
| Instances awake at once | 5 | 500 |
| Their vCPUs together | 10 | 500 |
| Their memory together | 10 GiB | 1,000 GiB |
| Free | Paid | |
|---|---|---|
| Requests a second one Cube is given, at each edge | 50 | No limit |
An app’s instances in a region are all it has there, awake, paused or asleep. Keyed instances are sandboxes: they count among the sandboxes awake and kept asleep, and the sandboxes made a minute and an hour, and there is no number of keys apart from those. The requests a second are counted at each edge on its own, before a request reaches an instance: past them the edge answers 429 app_rate_limited with Retry-After: 1, and the request is not counted or billed. A request with a key counts the same.
Drives and volumes, of one project
| Free | Paid | |
|---|---|---|
| Drives and volumes of one project | 3 | 500 |
| Largest Drive | 10 GiB | 1 TiB |
| All Drives of a project together | 15 GiB | No limit |
| Drives and volumes one sandbox mounts | 8 | 8 |
A fork of a Drive counts as a new Drive of its size. A Drive’s snapshots are not counted: a Drive may have any number, each billed for what it keeps alone. See Drive snapshots and forks.
Secrets, of one project
| Free | Paid | |
|---|---|---|
| Secrets of one project | 100 | 1,000 |
| Largest secret | 64 KiB | 64 KiB |
| Secrets given to one sandbox, together | 64 KiB | 64 KiB |
Logs
| Free | Paid | |
|---|---|---|
| Days a Cube’s log lines are kept | 3 days | 30 days |
| Log export destinations | 1 | 10 |
| Readers following the logs of an account’s apps at once | 10 | 100 |
Connections out, on each machine
| Free | Paid | |
|---|---|---|
| Connections out through one machine’s egress proxy at once, the account’s sandboxes there together | 1,024 | 8,192 |
A sandbox whose network rules name hosts sends each of its TCP connections out, over IPv4 and IPv6 alike, through its machine’s egress proxy; one with no rules, or rules of addresses alone, does not. On each machine, the account’s sandboxes there share the number above, together, however many projects they are of. Past it, their new connections are refused, in words that say to try again (the first request of a plain HTTP connection is answered 503 egress_connections_full, retryable; a TLS handshake ends with an alert; any other connection is reset), and every other account’s go on. One sandbox has at most 2,048 such connections at once, and a connection that carries nothing either way for 15 minutes is closed.
- New connections are taken in at up to 2,000 a second for the account’s sandboxes together, 4,000 at once. Those past it wait, and are taken in at that pace: none is refused for it.
- When the plan changes, Paid’s share holds on each machine within seconds; Free’s from the next month, as the bill’s terms do. Connections already open past a smaller share are not cut: they end by themselves.
How the plan’s limits work
- They are quotas, not reservations. A call within them can still be refused when the machines are full (503
no_capacity). - Reaching one refuses only new things. What is awake keeps running. A call that would go past a limit of what is awake or made answers 403
plan_cap_reached, withparamnaming the limit and a message that says what the limit is, what is used, and how to get more: Paid, or asking us to raise it for your account. The rates (made a minute, made an hour) areretryable, withRetry-After. - Wakes count, however they come. A call that wakes a sleeping sandbox (a command, its files, a restart, a snapshot, a restore) is held to the limits of what is awake, and so is a request at a sandbox’s link or at a keyed instance’s address that would wake one, over HTTP/1.1, HTTP/2 or HTTP/3: past them, its machine refuses the request with 403
plan_cap_reached, and nothing wakes. So is a connection to a sleeping sandbox’s own IPv6 address, or to its address on the project’s network: past them, it is refused (reset). A timer that comes due in a sleeping sandbox (its processes’ timers, the time of day it names inwake_daily_at, a database’spg_cronjobs) wakes it only within them too: past them, the wake waits, and is tried again every few seconds until the account has room. An app’s sleeping instances are woken for its requests only while the account has room for them; past it, the requests go to its instances that are awake. Each machine with something of the account asleep is told its part of the account’s room every few seconds, and the parts together are the room, so sandboxes woken on several machines at once never go past a limit together. An app’s instances are woken within the app’s own share of the room: what the account has left for them is shared between the app’s regions every few seconds, by how much each one used it lately, so its instances in all regions together stay within the limits too; a region that needs more than its share is given what the other regions do not use within seconds. A wake on one machine may be refused for a few seconds while the account has room left on another (in another region, as a rule); its message says so, and the parts are shared out again within seconds. A burst of requests to one sleeping sandbox wakes it once, and none of them is refused for it. - Never refused by them: putting a sandbox to sleep, and deleting.
- Moving back to Free keeps what you have: sandboxes larger than Free allows sleep with their data, and Drives and secrets past its numbers stay. Only the next new one is refused.
- What a project keeps: a Drive past the plan’s numbers is refused with 403
drive_limit_reached, a volume with 403volume_limit_reached, a secret with 403secret_limit_reached. What an account keeps, in all its projects: an app past the plan’s number with 403app_limit_reached; an app with more environment variables and secrets than the plan allows with 403env_limit_reached, an instance larger than its largest with 403plan_size_exceeded. - Raised on request: what an account may have at once and how fast it makes things, the number of Drives on Paid (a soft limit), and Drives of up to 16 TiB for an enterprise account. The account asks with
POST /v1/limits/requests, and is told the answer by an event and by mail: see raising a limit.
GET /v1/account (caps) shows each limit of the account with what is used now; GET /v1/billing shows the plan’s.
When a limit is reached
Every refusal of a limit has a section on the errors page, where its docs_url leads: what it refuses, and what lifts it. Those marked on request we raise for one account: raising a limit.
| What reached its limit | Refused with | Lifted by |
|---|---|---|
| What the account has awake at once, keeps asleep, and makes in a minute or an hour; an app’s instances in a region | 403 plan_cap_reached |
Sleeping or deleting; a larger plan; on request |
| A project’s Drives and volumes | 403 drive_limit_reached, volume_limit_reached |
Deleting; a larger plan; how many on a paid plan, and how large for an enterprise account, on request |
| The largest sandbox | 403 plan_size_exceeded |
A smaller size; a larger plan |
| A project’s or a sandbox’s spend limit | 403 spend_limit_reached |
Raising your limit |
| What the plan includes, with no balance to pay for more | 403 balance_used_up; to a visitor, plan_limit_reached |
A top-up; a larger plan; the next period |
| A project’s secrets | 403 secret_limit_reached |
Deleting; a larger plan |
| An account’s apps; an app’s variables and secrets; an app’s key secrets | 403 app_limit_reached, env_limit_reached, key_secret_limit_reached |
Deleting; a larger plan |
| A project’s domains and shared variables; an account’s destinations of its logs | 403 domain_limit_reached, variable_limit_reached, destination_limit_reached |
Deleting; a larger plan, of destinations |
| An account’s share of a machine’s drive | 403 account_share_reached |
Deleting; a moment later, another machine |
| An app’s requests a second at an edge | 429 app_rate_limited |
A second later; a paid plan |
| Readers following the logs at once | 429 too_many_followers |
Ending one |
| The account’s connections out on a machine | 503 egress_connections_full |
Closing connections |
| A sandbox’s Drives; an account’s projects; a user’s free accounts; a sandbox’s tokens revoked one by one | 409 too_many_drives, too_many_projects, too_many_free_accounts, too_many_revoked_tokens |
Fewer of them |
| A sandbox’s volumes; a project’s SSH keys | 409 too_many_volumes, too_many_ssh_keys |
Fewer of them |
| Connections from the SSH gateway to one sandbox at once | 503 too_many_forwards |
Ending one |
| What a paid plan alone has: a database’s tiered storage, a Browser session’s proxy | 403 paid_plan_required, proxy_not_on_plan |
A paid plan |
| A project’s usage reports, one at a time | 429 report_in_progress |
Asking again when the other is answered |
| Tries at signing in and signing up | 429 rate_limited |
Retry-After |
| Requests from one address at an edge at once; a request’s body | 429 too_many_connections, 413 body_too_large |
Fewer at once; less in one call |
| What top-ups may come to in a month | 403 trust_limit_exceeded |
The trust level rising; on request |
| Which plans the account may buy | 403 plan_not_open |
A whole period of the plan below; on request |
Limits of the API
| What | Limit |
|---|---|
| Names of sandboxes, snapshots, Drives and volumes | 1 to 63 lower-case letters, digits and hyphens; not starting or ending with a hyphen |
| Names of apps | 1 to 40 lower-case letters, digits and hyphens, starting with a letter |
Labels (metadata) |
64 a sandbox (60 an app); keys up to 64 characters, values up to 1,024 |
| Environment variables | Names like [A-Za-z_][A-Za-z0-9_]*; 256 KiB in all |
| A request | Head up to 64 KiB. A body of JSON up to 1 MiB for a sandbox’s calls, 64 MiB where it carries a command’s input (run, exec, …/stdin), up to 1 GiB for the platform’s own calls (413 body_too_large, whose message says the limit) |
| A request through the proxy to an app or a link | Body up to 100 MB, an answer that pauses up to 125 seconds; more with an app’s direct_url (addresses) |
| Reading and writing a file | Any length in one call: the bytes pass through as they come, the sandbox’s disk is the limit (written with a sandbox’s token: up to 1 GiB a call) |
| A command’s output | The last 16 MiB of each command is kept |
| Forks | 1 to 64 in one call |
| Lists | limit 1 to 1,000, 100 unless you say |
Idempotency-Key |
1 to 255 characters; remembered for 24 hours |
| Tokens for one sandbox | An hour unless you say; 30 days at most; 1,000 revoked one by one at once, until they run out (409 too_many_revoked_tokens past it: one token alone) |
| Network rules | allow and deny up to 1,000 entries each; http and inject up to 100 hosts each |
| Connections through the egress proxy | 2,048 at once for one sandbox, within the account’s share of the machine (above) |
| Requests one app instance takes at once | scale.concurrency, 1 to 1,000, or no limit |
| Readers following the logs of an account’s apps at once | By the plan: see logs above (429 too_many_followers past it) |
| An image | Up to 8 GiB, as its layers are in its registry and unpacked: a larger one fails its version or its sandbox with image_unpack_failed, which says both sizes |
| Shared variables | 1,000 a project, values up to 32 KiB |
| Your own domains | 100 a project |
| An object | One PutObject up to 5 GiB; multipart uploads of up to 10,000 parts of 5 MiB to 5 GiB |