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

LimitScopeStarterProBusiness
Spoolsaccount155
Replicasspool123
Queuesspool1,00010,000100,000
Stored messagesspool50,000100,000150,000
Stored payload bytesspool1.5 GiB3.1 GiB4.6 GiB
Retention capqueue7 days14 days30 days

Replicas is the number of nodes holding the spool's data, primary included: a single replica is a single copy; with more than one, losing a node makes another the primary with every stored message intact — see Delivery.

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.

The queue limit refuses Create a queue with 403. 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)message≤ 168h (a week)
Receive long-poll (wait)request≤ 20s
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–64 chars matching ^[A-Za-z0-9_:-]+$
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

A flat per-account request-rate cap applies across all operations — the same for every plan. Exceeding it fails with 429 kind rate_limited and a Retry-After header naming the seconds to wait.