Limits per plan
Who this is for: admins who plan how much their company will run, and people who hit a limit.
Before you start: nothing. To see your own usage, read Understand usage and limits.
Every company has a plan. The plan sets limits such as how many runs you can have each month. We can also change single limits for your company, for example to give you more runs; such an override replaces the plan’s value for that limit only.
Plan limits
Section titled “Plan limits”| Limit | Key | Starter | Pro | Enterprise |
|---|---|---|---|---|
| Run time of one script step | sandbox.wall_clock_ms |
10 seconds | 60 seconds | 300 seconds |
| Memory of one script step | sandbox.memory_mb |
32 MB | 128 MB | 512 MB |
| Size of one step’s output | output_max_bytes |
256 KB | 2 MB | 10 MB |
| Runs at the same time | concurrent_runs |
2 | 10 | 50 |
| Shortest time between scheduled runs | min_cron_interval_s |
15 minutes | 5 minutes | 1 minute |
| Runs per month, warning at | runs_per_month (soft) |
4,000 | 40,000 | unlimited |
| Runs per month, stop at | runs_per_month (hard) |
5,000 | 50,000 | unlimited |
| How long run logs are kept | retention_days (logs) |
30 days | 90 days | 365 days |
| How long webhook deliveries are kept | retention_days (inbound events) |
14 days | 14 days | 30 days |
| Compute units per month | cu_per_month |
500 | 5,000 | unlimited |
| Emails per month | emails_per_month |
1,000 | 10,000 | unlimited |
| Webhook requests per month | webhook_requests_per_month |
50,000 | 500,000 | unlimited |
| Webhook endpoints | webhook_endpoints |
10 | 50 | 500 |
| Storage | storage_mb |
1 GB | 10 GB | 100 GB |
| Runners in your own environment, with unused registration tokens | self_hosted_runners |
0 | 3 | 20 |
What is enforced today
Section titled “What is enforced today”| Limit | What happens when you reach it |
|---|---|
sandbox.wall_clock_ms, sandbox.memory_mb |
The step stops with timeout or memory_limit. |
output_max_bytes |
The step fails with output_too_large. |
concurrent_runs |
Extra runs wait in the queue until a run finishes. |
min_cron_interval_s |
A schedule that runs more often can’t be saved, and an old one that became too frequent doesn’t start runs. |
runs_per_month |
At 80% and 100% of the soft limit, admins get a warning. At the hard limit, no new production run starts until the next month, however it is started (schedule, chain, webhook, Run now, API, replay), and admins get a quota_exceeded alert. Test runs and dry runs don’t count. |
retention_days |
Older run logs and webhook deliveries are deleted every hour. Files that runs store (artifacts) are kept as long as the run logs, unless your plan sets a separate time for files. When that time is up, the file and its contents are deleted, and its download link answers “not found”. |
| cu_per_month | New production runs end at once with quota_exceeded until the next month. Test runs don’t count. |
| emails_per_month | An email.send step fails with quota_exceeded, and the email is not sent. |
| webhook_requests_per_month | Webhook senders get 429 quota_exceeded with Retry-After and can retry later. |
| webhook_endpoints | Adding one more endpoint fails with webhook_endpoint_limit. A plan without this limit allows 25. |
| self_hosted_runners | Creating one more registration token fails with runner_limit_reached. Runners you already have keep working. |
| storage_mb | A step that stores a file or saves workflow state fails with quota_exceeded until older files expire or are removed. Storage counts files, large step data, run logs and workflow state. |
| ai_tokens_per_run | An ai.generate call that would go over the run’s AI token limit is not sent, and the step fails with ai_token_limit. The example plans don’t set it yet, so every run gets 100,000 tokens unless we change it for your company. |
At 80% and 100% of each of these limits, admins get a quota_warning alert, and at the limit a quota_exceeded alert, once per month each.
Months are calendar months in UTC.
Limits for every company
Section titled “Limits for every company”These apply on every plan.
| What | Limit |
|---|---|
| CPU of one script step | about 1 second of busy work (a fuel budget of 10 000 000 000) |
| Memory and run time of one script step, when the plan sets none | 64 MiB and 30 seconds |
| Script source, input and trigger data | 1 MiB script, 4 MiB input and trigger data |
| Log lines per script step | 1,000 lines, 256 KiB in total, 8 KiB per line |
| AI tokens in one run | 100,000, unless your plan says otherwise (ai_tokens_per_run) |
Calls of one ai.generate step |
3, including tries again after a busy provider |
| Steps per workflow | 100 |
| Schedules per workflow | 10 |
| Shortest time between scheduled runs | 5 minutes (unless your plan says otherwise) |
| Retry attempts of a step | 10 |
Timeout of a step (timeout_minutes) |
60 minutes (default 15) |
| Items of one for-each step | 1,000 |
Items run side by side (max_parallel) |
20, and at most your plan’s cap (default 5) |
Inline run: script |
64 KiB |
| Workflow YAML | 512 KiB, nesting depth 32, 50,000 nodes |
| Workflow calls nested in each other | 5 |
| Webhook request body | 256 KB |
| Webhook requests per endpoint | 60 per minute by default (burst of 60) |
| Webhook requests per company | 600 per minute by default (webhook_requests_per_min) |
| Refused webhook requests from one sender address | 60 per minute, then 429 until the minute has passed (correctly signed deliveries to an endpoint in use still get through) |
| Time to send a webhook body | 10 seconds |
| Email recipients | 100 per email, 50 per list (to, cc, bcc) |
| Email size | 1 MB text, 2 MB HTML, 10 attachments and 20 MB of attachments |
| HTTP request and response body | 10 MiB each, 60 seconds in total |
| Download of one file from a run | 25 MiB |
| Files one run stores | 100 files and 100 MiB together (artifact_run_max_bytes); one more fails with limit_exceeded or artifact_too_large |
Reading one file or body in a built-in step (XML, CSV, Excel, fixed-width, zip, JSON answers of http.request and AI models, webhook bodies) |
60 seconds, 1 GiB of memory, a fuel budget of 40 000 000 000 and a 512 MiB result; past any of them the step fails with format_error (a JSON answer of http.request is returned as text instead). Plans can set lower values (codec.wall_clock_ms, codec.memory_mb, codec.fuel), never higher ones. The CPU and memory used count toward compute units. |
| Files unpacked from one zip file | 100 files and 100 MB, and a file may unpack to at most 100 times its packed size |
| How long a run’s files are kept | as long as run logs (at least 1 day, at most 400 days) |
| Workflow state value | 64 KB |
| Workflow state keys | 1,000 per workflow, and the values count toward your plan’s storage |