shiftlabs Start free
Menu Limits

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.

Limits by plan
LimitFreeProEnterprise
Runs per 24 hours runsPerDay1,000250,000up to 1,000,000
Runs at once concurrentRuns10100up to 10,000
Runs waiting per workflow, past its concurrency concurrencyQueue1,00010,000up to 100,000
Workflows workflows1050up to 1,000
New versions per 24 hours versionsPerDay100100up to 10,000
Active triggers triggers20100up to 10,000
Schedules schedules550up to 500
Shortest time between two runs of a schedule scheduleIntervalMinutes5 minutes1 minuteas agreed
Secrets secrets25250up to 1,000
Connections connections10100up to 500
TCP targets tcpTargets020up to 500
Outbound requests per 24 hours egressPerDay3,0001,000,000up to 10,000,000
Steps per 24 hours stepsPerDay5,0001,000,000up to 10,000,000
CPU time per 24 hours cpuSecondsPerDay300 seconds50,000 secondsup to 500,000 seconds
Steps per run stepsPerRun1001,000up to 10,000
Times the engine dispatches one run dispatchesPerRun5050up to 10,000
Run lifetime runLifetimeHours168 hours168 hoursup to 8,760 hours
CPU time per invocation cpuMs2,000 ms2,000 msup to 30,000 ms
CPU time per run, all its invocations cpuMsPerRun10 seconds60 secondsup to 3,600 seconds
State keys per workflow stateKeysPerWorkflow1,00010,000up to 100,000
One state value, as JSON stateValueBytes64 KiB256 KiBup to 1 MiB
All workflows' state, keys included stateBytes10 MiB1 GiBup to 2 GiB
Agents, not counting the helper agents325up to 250
Model tokens per 24 hours, agents and the helper modelTokensPerDay50,0005,000,000up to 100,000,000
Model cost per UTC month, agents and the helper modelCentsPerMonth$1$10up to $1,000
Tool calls one model response may make toolCallsPerTurn1050up to 500
Member invitations per 24 hours invitesPerDay20200up to 5,000
Alert emails per UTC day, each recipient counted alertEmailsPerDay50500up to 5,000
Runner tokens runnerTokens220up to 200
Longest command on a runner execTimeoutMinutes30 minutes12 hoursup to 168 hours
Commands waiting for a runner execQueue20500up 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"}. limit is the name under each row above, and max your workspace's value.
  • Past a limit on what you use, such as runs or invitations per 24 hours, the request returns 429 with the same body and a Retry-After header 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.

Included in Pro each month
MeterIncluded each monthOverage per 1,000
Runs250,000$0.10
Steps1,000,000$0.02
CPU-seconds50,000$0.05
Outbound requests1,000,000$0.02

Every plan

These are the same on every plan, and no contract changes them.

Limits on every plan
LimitEvery plan
Outbound requests to one host30 a minute, per workspace and host
New TCP connections to one target10 a minute, per workspace and host:port
One TCP connection's lifetime15 minutes
Bytes one TCP connection carries each way1 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.

Request rates
RequestsLimitCounted per
Any request to the API, webhooks or the dashboard600 a minuteIP address
Failed authentication: a bad API key, chat token or runner token, or a failed dashboard sign-in10 a minuteIP address
/v1 calls from API keys, MCP tool calls and the dashboard. Chat tokens get the same again, counted apart1,200 a minuteworkspace
/v1 calls with one person's chat tokens120 a minuteperson
Run logs, timelines, egress and /v1/metrics, where the read isn't served from the 10-second cache120 a minuteworkspace
Deploys, agent code uploads, and promotions into the workspace20 a minuteworkspace
Member invitations5 a minuteworkspace
Agent messages, step.ask included30 a minuteworkspace
Agent messages from one person, API key or end user10 a minuteperson
Exports of runs, the audit log and usage10 a minuteworkspace
Webhook deliveries to one trigger, or events to one run's event URLs100 per 10 secondstrigger or run
Webhook deliveries and events to all of a workspace's triggers and event URLs300 per 10 secondsworkspace
sign() calls on Free60 a minuteworkspace
sign() calls on Pro1,200 a minuteworkspace
Requests to link a workspace10 a minuteworkspace named
Requests from Slack, such as Approve and Deny60 a minuteSlack account
Runner calls with one runner token1,200 a minuterunner token
Runner calls3,000 a minuteIP address
  • Rate limits in the API reference lists each rate's Retry-After, the flood guard on every shiftlabs.org address, and the other 429 and 503 answers.
  • Requests your workflows send count toward outbound requests per 24 hours, and toward the rate for one host. See At the gateway.