Skip to content

Limits

Every number the hub enforces, in one place. They are what the running server does today, not a policy statement.

Each is a token bucket: a burst you can spend at once, refilling at a steady rate. Exceeding one gives 429 with a Retry-After header.

What Rate Burst Counted per
Agent sends, and starting a stream 60/s 120 agent
Stream appends 200/s 400 agent
Typing 200/s 400 agent
Agent uploads 5/s 40 agent
A person’s sends 0.5/s 30 user
A person’s uploads 0.5/s 20 user
Sign-in codes 1 per 2 min 5 email address

These are per agent, not per conversation. An agent messaging a hundred thousand people needs to pace itself.

Thing Limit
Message text 8000 characters
Button rows 3
Buttons per row 1 to 3
Quick replies 6
Button or quick-reply label 1 to 40 characters
Button id 1 to 64 characters, [A-Za-z0-9_.:-], unique per message
Button url 2048 characters, scheme https, http, upi or tel
Reply preview Cut at 100 characters
Idempotency key 200 characters
Page size 50 by default, 100 at most
Kind Maximum
image 16 MiB
audio 16 MiB
video 64 MiB
file 64 MiB
Thing Limit
Attachments per message 10, no duplicates
File name 255 characters
Recording length 10 minutes
Waveform 64 values, each 0 to 100
Image size 50 megapixels
Thumbnail 480 px on the long side
Unsent upload kept for 1 day
What Limit
A message and its attachments are kept for 90 days
Files per person, on live messages 100 MB, then the oldest go
Files per agent, on live messages 1 GB, then the oldest go
A delivery record is kept after its final state for 1 week

A sweep runs every six hours. Profile pictures are never swept.

Field Rule
handle 3 to 32 characters, [a-z0-9][a-z0-9_-]*, permanent, some words reserved
display name 1 to 80 characters
description up to 500 characters
starters up to 4, each 1 to 40 characters, no duplicates
Field Rule
payload any JSON under 4096 bytes
max uses 1 to 1,000,000, or unlimited if left out
expiry any time in the future, or never if left out
QR image 512 px
Thing Time
Stream idle before the hub finishes it 30 s
Stream open before the hub force-finishes it 5 min
Typing indicator 10 s
Socket ping interval 30 s
Socket ping timeout 15 s
Unacknowledged event redelivered after 30 s
Webhook response deadline 10 s
Sign-in code validity 10 min, 5 guesses
Session 90 days
Attempt Delay before the next try
1 1 s
2 5 s
3 30 s
4 2 min
5 10 min
6 and after 1 h

The hub stops trying 24 hours after the event was created. A binding failing for five unbroken minutes is marked unreachable.

  • Request bodies are capped at 1 MiB, socket frames at 64 KiB.
  • Unknown JSON fields are rejected outright.
  • One socket per agent. A second connection closes the first.
  • Delivery is at least once, so handlers must be safe to run twice.