Limits & errors
Every number the platform enforces, in one place, so you never have to hunt for a cap in a guide.
Runtime
| What | Limit |
|---|---|
| Wake from sleep | About a second, automatic on any message, trigger, or request |
| Chat reply budget (custom agents) | Reply within 30 seconds. If the response is lost after submission, Maritime reports uncertain delivery and does not resend the turn. Run longer work in the background and deliver it on the next message |
| exec (run a command) | 60s attached default, 3,600s detached default; null or omission selects the default. Positive finite timeouts can exceed 120s. Each separate output stream retains 262,144 characters plus a truncation marker. Results are temporary and can be lost on restart or agent replacement. Older agents support attached commands only, capped at 120s, with combined output and no execution ID. |
| File transfers | 100 MB per file; any file call wakes a sleeping agent |
Build & deploy
| What | Limit |
|---|---|
| Typical repo build + ship | 1 to 3 minutes (an idle builder cold-starts first, adding about a minute) |
| Silent build kill | A build that prints nothing for 5 minutes is killed |
| ZIP upload | 500 MB compressed, 2 GB unpacked |
| Template capture | Usually 1 to 10 minutes (snapshots the image and volume) |
| Registries | Pre-built images from public registries only; private code goes through repo builds |
Resources & plans
| What | Limit |
|---|---|
| Base allocation per machine | 2 GB RAM, 5 GB SSD |
| Self-serve ceilings per machine | 8 GB RAM, 100 GB SSD. Create and resize return 400 outside 512 MB to 8 GB RAM or 1 to 100 GB SSD |
| Ephemeral and swarm sandbox sizes | Fixed sizes instead of the allocation above: small 2 vCPU, 4 GB, 12 GB disk (default) · medium 4 vCPU, 8 GB, 50 GB · large 8 vCPU, 16 GB, 125 GB · xlarge 16 vCPU, 32 GB, 250 GB. A swarm run uses the smallest size that fits its request (small or medium) |
| Machines awake at once | Starter and the free trial 5 · Growth 25 · Scale 60 · Dedicated 500 · Enterprise by contract. Agents and computers count alike; sleeping machines do not count. Waking an agent past the limit answers 429 awake_limit_reached with a 15 second retry hint; creating or waking a computer past it answers 429 concurrency with retryAfterS 15, and creating an agent past it answers 429 concurrency |
| Sandboxes per swarm run | Starter and the free trial 100 · Growth 1,000 · Scale 5,000 · Dedicated 10,000. A larger run answers 403 swarm_too_large; sandboxes running at once still count toward the awake limit |
| Free trial | Up to $20 of usage. At the cap machines are put to sleep and new starts answer 402 trial_cap_reached |
| Earlier seat plans | Accounts on an earlier seat plan keep its included-machine counts and limits |
Sizing details in Env vars & sizing, prices in Billing & plans.
Read your own limits
GET /api/v1/account/limits returns the numbers your account runs under now: your plan, included machines, the awake cap, how many machines are awake, the size ceilings, and the agent create and duplicate rate limits. On the current plans billingModel is usage, plan is starter (also during the free trial), growth, scale, or none with no plan (before the free trial starts, or after cancelling), and includedMachines is null, since there is no machine-count cap. Earlier seat plans report seats or wallet with their own plan names and caps. It reads the same code that enforces the limits, so an operator override shows here too. Any API key works. In the SDKs, call maritime.account.limits() (TypeScript) or client.account.limits() (Python). A null cap means no limit applies. Size your concurrency from maxAwakeMachines minus awakeMachines instead of a fixed number.
HTTP errors
| Status | Meaning |
|---|---|
| 401 | Missing, invalid, revoked, or expired API key |
| 402 | Billing refused the start: no free trial or plan yet (trial_required), the free trial's $20 is used (trial_cap_reached), a payment failed (payment_required), or the plan ended (plan_required). Also a seat-plan limit, or an add-on that needs a paid plan |
| 403 | API key lacks the required scope for this endpoint, or this deployment has no host for the machine type (machine_unavailable), or a swarm run is larger than the plan allows (swarm_too_large) |
| 404 | No such agent, or it belongs to a different account |
| 409 | Conflict: agent name taken, deploy already in progress, or a file-move destination exists |
| 429 | Rate limited (back off and retry), or the plan's awake limit is reached (awake_limit_reached or concurrency) |
| 503 | No capacity right now, or the agent could not be woken yet; retry after Retry-After |
Error codes
Some error bodies carry a code next to detail. Branch on code, not on the detail text. A response with a retry hint also sets the Retry-After header and retryAfterSeconds in the body. Computers endpoints (/api/v1/computers) answer {"error", "message", "retryAfterS"} instead: the code is in error, and retryAfterS is the hint in seconds or null.
| code | Status | Meaning | Retry hint |
|---|---|---|---|
| capacity_unavailable | 503 | No host has room for the agent's memory right now | 30 s |
| awake_limit_reached | 429 | Waking an agent while the account has its plan's number of machines awake. The body includes awake and maxAwake | 15 s |
| concurrency | 429 | Creating a machine, or waking a computer, while the account has its plan's number of machines awake | 15 s for computers |
| trial_required | 402 | No free trial or plan yet. Start the free trial with a card on the Billing page | None |
| trial_cap_reached | 402 | The free trial's $20 of usage is used. Start the plan on the Billing page | None |
| payment_required | 402 | A payment failed or a charge is disputed. Pay the open invoice on the Billing page | None |
| plan_required | 402 | The plan has ended. Choose a plan on the Billing page | None |
| machine_unavailable | 403 | This deployment has no host for the machine type | None |
| always_on_not_sold | 400 | Always on was requested on a usage plan; machines run on demand | None |
| wake_transient | 503 | A sleeping agent could not be woken yet. It is still asleep and intact | 30 s |
| insufficient_balance | 402 | The wallet cannot cover the agent creation fee | None |
| seat_limit | 402 | The plan does not include this agent, size, or add-on | None |
A request for more than 8 GB RAM or 100 GB SSD, or less than 512 MB RAM or 1 GB SSD, returns 400 on create and on resize.
Failed deployments
A failed deployment has a failureKind. The agent.error webhook for a failed deploy carries the same value as data.failure_kind.
| failureKind | Meaning | What to do |
|---|---|---|
| build | A step in your source's build failed, for example a Dockerfile RUN | Fix the source, then deploy again |
| build_infrastructure | Maritime's build system failed before your build could finish | Deploy again. Report it if it repeats |
| deploy | The image exists, but the agent did not start | Read the deploy log and the agent logs |
The SDKs raise these as typed errors (SDK error classes); the CLI maps them to exit codes (CLI exit codes).