Skip to content
donutchat.com

Limits

Look up the size, length and rate limits that apply to incoming webhooks, the bot HTTP API, the event stream, event webhooks, attachments and interactive cards.

Limits in bytes count UTF-8 bytes: each English letter, digit or space is 1 byte, and accented letters, other scripts and emoji take 2 to 4 bytes each.

WhatLimit
content of a webhook post, message, thread reply or reply update80,000 bytes, counted on the text itself, not its JSON-escaped form
content_chunk in a reply update80,000 bytes
Push notification and chat list preview of a Markdown messagePlain text, cut to 240 characters

Text over the limit is rejected with 400 content_too_long.

WhatLimitIf it’s longer
Incoming webhook Name1–100 bytesThe webhook isn’t created
Incoming webhook Description500 bytesThe webhook isn’t created
Incoming webhook Display Name32 bytes; empty means WebhookThe webhook isn’t created
username in a webhook post32 bytes500 send_failed
Sender name of a top-level bot message: username, or the bot’s name when you don’t send one32 bytes500 send_failed
username in a thread reply64 bytes500 create_failed
Bot name64 bytes. Keep it to 32 so that messages sent without username work.—
Bot usernameUp to 32 characters: a–z, 0–9 and _, saved in lowercase. The desktop app requires 5–32 characters, starting with a letter.—
Typing status_text80 bytes400 status_text_too_long
WhatLimit
Requests per webhook60 in any 60 seconds and 1,000 in any hour
Requests that countEvery request to an active webhook with a valid URL, including ones rejected for bad JSON or content
Over the limit429 rate_limit_exceeded, with no Retry-After header
Changing the limitsNot possible in the apps. The webhook’s page shows them under Rate Limit.

See Incoming webhooks API.

WhatLimit
Chat list (GET /bots/v1/chats)100 chats, most recently added first, with no pagination. total counts all of the bot’s chats.
Typing indicatorOne start event per bot and chat every 3 seconds. Extra starts return success but aren’t shown. On iPhone, the indicator disappears about 10 seconds after the last event.
Reply updatesAbout 2–4 per second recommended, one at a time per reply
Activity request body4,096 bytes
Activity history per replyThe last 32 entries
Attachment download10 MiB (10,485,760 bytes) per file; larger files return 413
File uploadThread replies only, when the owner allows it. 1–4 files per reply, 10 MiB per file, 30 files per bot per hour. PNG, JPEG, GIF, WebP, PDF and UTF-8 text, detected from the contents
WhatLimit
Connections per bot1. A new connection closes the previous one.
Chats per connectionUp to 10,000 of the bot’s chats
Event rate per bot100 events per minute, with bursts of up to 100. Events over the limit aren’t sent live. chat_added and chat_removed don’t count.
Server pingsEvery 30 seconds. The connection closes if no answer arrives within 10 seconds.
Keepalive from your clientSend a short text frame every minute or two; its content is ignored. Currently, a connection that receives nothing from your client for 5 minutes closes, even if your client answers pings.
Replay with last_event_idThe bot’s last 100 events from the past 5 minutes, best effort. Events that happen while no connection is open usually aren’t kept, and DonutChat restarts clear the buffer.
Message size to allow in your clientAt least 1 MiB. One event can carry 80,000 bytes of text before JSON escaping.

An unknown or expired last_event_id replays everything still buffered, so skip events you’ve already handled. See Event stream.

WhatLimit
URLA public https URL
Attempts per eventUp to 3. Network errors, 408, 429 and 5xx responses are retried; other 4xx responses end delivery.
Time per attempt10 seconds. Redirects aren’t followed.
Automatic switch-offAfter 20 deliveries in a row fail. Switch the webhook back on in the app.

See Event webhooks.

Character limits count Unicode code points.

WhatLimit
Card block, including both fence lines2,800 bytes
donut-ui blocks per message8, counting invalid blocks. With more, no cards render.
Message size for cards to render64,000 bytes. Larger messages show as Markdown without cards.
Card id and action id1–64 characters: A–Z, a–z, 0–9, _ and -
title120 characters, required
body800 characters
facts8 items. Each label up to 60 characters, each value up to 200.
actions1–4 for confirmation and choice; none for status and facts
Action label60 characters

See Interactive cards.