Limits
What a workspace may use on each plan, and how fast it may call shiftlabs.
Limits by plan
Each workspace gets its plan's limits. Enterprise limits are set for each workspace on a contract, up to the values in the Enterprise column. GET /v1/me returns your workspace's limits, and GET /v1/usage what it has used against them.
| Limit | Free | Pro | Enterprise |
|---|---|---|---|
Runs per 24 hours runsPerDay | 1,000 | 250,000 | up to 1,000,000 |
Runs at once concurrentRuns | 10 | 100 | up to 10,000 |
Runs waiting per workflow, past its concurrency concurrencyQueue | 1,000 | 10,000 | up to 100,000 |
Workflows workflows | 10 | 50 | up to 1,000 |
New versions per 24 hours versionsPerDay | 100 | 100 | up to 10,000 |
Active triggers triggers | 20 | 100 | up to 10,000 |
Schedules schedules | 5 | 50 | up to 500 |
Shortest time between two runs of a schedule scheduleIntervalMinutes | 5 minutes | 1 minute | as agreed |
Secrets secrets | 25 | 250 | up to 1,000 |
Connections connections | 10 | 100 | up to 500 |
TCP targets tcpTargets | 0 | 20 | up to 500 |
Outbound requests per 24 hours egressPerDay | 3,000 | 1,000,000 | up to 10,000,000 |
Steps per 24 hours stepsPerDay | 5,000 | 1,000,000 | up to 10,000,000 |
CPU time per 24 hours cpuSecondsPerDay | 300 seconds | 50,000 seconds | up to 500,000 seconds |
Steps per run stepsPerRun | 100 | 1,000 | up to 10,000 |
Times the engine dispatches one run dispatchesPerRun | 50 | 50 | up to 10,000 |
Run lifetime runLifetimeHours | 168 hours | 168 hours | up to 8,760 hours |
CPU time per invocation cpuMs | 2,000 ms | 2,000 ms | up to 30,000 ms |
CPU time per run, all its invocations cpuMsPerRun | 10 seconds | 60 seconds | up to 3,600 seconds |
State keys per workflow stateKeysPerWorkflow | 1,000 | 10,000 | up to 100,000 |
One state value, as JSON stateValueBytes | 64 KiB | 256 KiB | up to 1 MiB |
All workflows' state, keys included stateBytes | 10 MiB | 1 GiB | up to 2 GiB |
Agents, not counting the helper agents | 3 | 25 | up to 250 |
Model tokens per 24 hours, agents and the helper modelTokensPerDay | 50,000 | 5,000,000 | up to 100,000,000 |
Model cost per UTC month, agents and the helper modelCentsPerMonth | $1 | $10 | up to $1,000 |
Tool calls one model response may make toolCallsPerTurn | 10 | 50 | up to 500 |
Member invitations per 24 hours invitesPerDay | 20 | 200 | up to 5,000 |
Alert emails per UTC day, each recipient counted alertEmailsPerDay | 50 | 500 | up to 5,000 |
Runner tokens runnerTokens | 2 | 20 | up to 200 |
Longest command on a runner execTimeoutMinutes | 30 minutes | 12 hours | up to 168 hours |
Commands waiting for a runner execQueue | 20 | 500 | up to 5,000 |
- Past a limit on what you keep, such as workflows or secrets, creating one more returns
403 {"error": "quota exceeded", "limit", "max"}.limitis the name under each row above, andmaxyour workspace's value. - Past a limit on what you use, such as runs or invitations per 24 hours, the request returns
429with the same body and aRetry-Afterheader with the seconds to wait. See Rate limits and retries. - Past a limit inside a run, such as steps or CPU time per run, or a state limit, the step or the run fails with an error that names it, such as
limit stepsPerRun=100. - Limits per 24 hours count the last 24 hours, not a calendar day. Steps and CPU time count by the hour: the current UTC hour and the 23 before it.
- On Pro, runs, steps, CPU time and outbound requests per 24 hours are set at the whole monthly pool, so the pool and your spending limit stop a workspace first. See Pro's monthly pool.
- The shortest time between two runs of a schedule works the other way: a shorter one allows more. On Enterprise it is what the contract says.
Pro's monthly pool
Pro includes these each billing month. Past them, Pro bills overage up to the spending limit you set. See Overage and the spending limit.
| Meter | Included each month | Overage per 1,000 |
|---|---|---|
| Runs | 250,000 | $0.10 |
| Steps | 1,000,000 | $0.02 |
| CPU-seconds | 50,000 | $0.05 |
| Outbound requests | 1,000,000 | $0.02 |
Every plan
These are the same on every plan, and no contract changes them.
| Limit | Every plan |
|---|---|
| Outbound requests to one host | 30 a minute, per workspace and host |
| New TCP connections to one target | 10 a minute, per workspace and host:port |
| One TCP connection's lifetime | 15 minutes |
| Bytes one TCP connection carries each way | 1 GiB |
| Highest spending limit on Pro | $10,000 a month |
Request rates
Over a rate, a request gets 429, most with a Retry-After header that gives the seconds to wait. A sign() call throws instead. Rates are counted at each Cloudflare location, so they are approximate. They don't depend on the plan, apart from sign() calls.
| Requests | Limit | Counted per |
|---|---|---|
| Any request to the API, webhooks or the dashboard | 600 a minute | IP address |
| Failed authentication: a bad API key, chat token or runner token, or a failed dashboard sign-in | 10 a minute | IP address |
/v1 calls from API keys, MCP tool calls and the dashboard. Chat tokens get the same again, counted apart | 1,200 a minute | workspace |
/v1 calls with one person's chat tokens | 120 a minute | person |
Run logs, timelines, egress and /v1/metrics, where the read isn't served from the 10-second cache | 120 a minute | workspace |
| Deploys, agent code uploads, and promotions into the workspace | 20 a minute | workspace |
| Member invitations | 5 a minute | workspace |
Agent messages, step.ask included | 30 a minute | workspace |
| Agent messages from one person, API key or end user | 10 a minute | person |
| Exports of runs, the audit log and usage | 10 a minute | workspace |
| Webhook deliveries to one trigger, or events to one run's event URLs | 100 per 10 seconds | trigger or run |
| Webhook deliveries and events to all of a workspace's triggers and event URLs | 300 per 10 seconds | workspace |
sign() calls on Free | 60 a minute | workspace |
sign() calls on Pro | 1,200 a minute | workspace |
| Requests to link a workspace | 10 a minute | workspace named |
| Requests from Slack, such as Approve and Deny | 60 a minute | Slack account |
| Runner calls with one runner token | 1,200 a minute | runner token |
| Runner calls | 3,000 a minute | IP address |
- Rate limits in the API reference lists each rate's
Retry-After, the flood guard on every shiftlabs.org address, and the other429and503answers. - Requests your workflows send count toward outbound requests per 24 hours, and toward the rate for one host. See At the gateway.