Skip to content

Limits ​

Last updated 

Every limit is enforced server-side and scope-labeled. Two kinds exist: plan limits, which differ by plan, and fixed bounds, which are the same for everyone.

Plan limits ​

LimitScopeSoloTeamBusiness
Spoolsaccount123
Replicasspool123
Queuesspool1,00010,000100,000
Stored messagesspool100,000250,000500,000
Stored payload bytesspool2.0 GiB4.0 GiB8.0 GiB
Retention capqueue7 days14 days30 days
Request rateaccount250/s500/s1,000/s
Request burstaccount250 requests500 requests1,000 requests

Replicas is the number of nodes holding the spool's data, primary included: a single replica is a single copy; with more than one, another node becomes the primary when one is lost, and whether every acknowledged write is on it depends on the spool's numSync — see Replication.

Stored messages and payload bytes count everything on the spool: visible, delayed, pending, and failed messages across all queues. When either cap is reached, sends fail with 507 kind spool_full — backpressure, not billing: receive and ack (or delete queues) to make room, then retry. Failed messages hold their share too, and receive never returns them: recover them for processing or discard them to free the space — see failed messages.

The queue limit refuses Create a queue with 403 kind queue_limit. The retention cap bounds what retentionSeconds a queue may set: asking for more fails with 403 kind retention_limit, and the applied value is always visible as the queue's read-only effectiveRetentionSeconds.

Fixed bounds ​

BoundScopeValue
Message sizemessage64 KiB
Send delay (Spooler-Delay-Seconds)message≤ 604,800 s (a week)
Receive long-poll (waitSeconds)request≤ 20 s
Lease timeoutqueue≤ 1 year; 0 disables; default 5m
Max retriesqueue≤ 65,535; default 10
Dedup windowqueue≤ 300s; default off
Dedup keymessage1–128 printable ASCII chars
Retentionqueue≥ 60s; capped by plan
Receive rate limitqueueoptional; sustained at most 100 msg/s (interval ≥ 10ms)
Spool and queue namesname1–63 chars matching ^[A-Za-z0-9_:-]+$
Lease and handletoken≤ 256 chars, opaque
Message idmessage≤ 256 chars, opaque
Cursorrequest≤ 256 chars, opaque
Queue listing pagerequest≤ 1,000 queues; default 100

A message over the size limit fails with 413 kind payload_too_large before the body is read.

Queue settings left unset take server defaults; the values in force are returned by List queues.

Request rate ​

The plan's request rate caps requests of every kind, per account, across all API keys: a token bucket refilled at the sustained rate, holding up to the burst — both in the plan table above. Exceeding it fails with 429 kind rate_limited and a Retry-After header naming the seconds to wait.