Levels and limits
Every CoAI Sandbox account has a level. A new account starts at A0 and moves up automatically after payments.
| A0 | A1 | A2 | |
|---|---|---|---|
| Running at the same time | 5 | 20 | 100 |
| New sandboxes per second (burst) | 1 (5) | 5 (20) | 20 (50) |
| New sandboxes per UTC day | 300 | no limit | no limit |
| API requests per second per key | 10 | 50 | 200 |
| Longest timeout | 30 minutes | 6 hours | 24 hours |
| Longest running time | 30 minutes | 6 hours | 24 hours |
| Internet access | allowlist only | allowlist only (open internet access is planned) | allowlist only (open internet access is planned) |
| Outbound speed per sandbox | 10 Mbit/s | 20 Mbit/s | 20 Mbit/s |
| New outbound connections per second / open at once | 10 / 64 | 30 / 256 | 30 / 256 |
| Outbound traffic per UTC day | 1 GiB | 50 GiB | 200 GiB |
| Ports reachable from the internet | no | yes | yes |
| Daily spending limit of a new account | — | $20 a day for the first 7 days | — |
A0 → A1: one paid Add Funds deposit of at least $10 that was not refunded in full, or $10 of paid settlement invoices. A1 → A2: at least $50 of Add Funds deposits (less refunds) and paid settlement invoices together, the first payment at least 30 days old, and no high or critical abuse signal in the last 30 days.
- Timeout and running time. The longest timeout is what
Sandbox.create(timeout=…)andset_timeoutaccept; a larger one is refused with 400timeout_too_long. The longest running time counts from when the sandbox started: extending the timeout or connecting again never takes a sandbox past it. - Creating too fast is answered with 429
create_rate_limitedand aRetry-After: the SDK waits and retries by itself. Too many running sandboxes (429sandbox_concurrency_limit) and the daily number of new sandboxes (429daily_create_limit) are not retried. - Network. For now every level reaches only the allowlist of the network page: A1 and A2 have the same allowlist-only internet access as A0, with higher speed and connection limits. Open internet access for A1 and A2 is planned. Outbound e-mail ports are blocked at every level.
- Public ports. At A0 the ports of a sandbox need its traffic access token. Asking for public access
(
allow_public_traffic=True,allowPublicTraffic: true) is not refused: the sandbox is created as without the option, with the token required. The Python SDK sends that option whenever you setnetwork=, so the outbound lists work at A0 too. Send the token in thee2b-traffic-access-tokenheader (sandbox.traffic_access_token,sandbox.trafficAccessToken).
Spending caps
In the console you can set a daily and a monthly spending cap. They count your usage per UTC day and per UTC calendar month.
At A1 the daily limit of the first days in the table applies as well: your own cap can only be lower. When a cap is reached,
new sandboxes are refused with 429 spend_cap_reached and running ones are stopped after the grace period of the
pricing page.
Moving down and freezes
A refund of a payment can move an account back down. An account can also be frozen (403 account_frozen): after a
disputed payment, an unpaid settlement invoice that was cancelled again, a negative balance, or under the Acceptable Use
Policy. A frozen account cannot create sandboxes, and its running sandboxes are stopped; contact support.