Reference
All limits in one place
Every hard limit documented elsewhere in this manual, gathered in one place and grouped by feature.
Every hard limit documented elsewhere in this manual, gathered in one place and grouped by feature.
| Limit | Value | Notes |
|---|
| Commands per Telegram menu scope | 100 | telegramCommandsLimit, applied to each of the three default setMyCommands scopes. |
| Memoised owner-menu records | 500 | MAX_MENU_SCOPES — oldest dropped first (FIFO). |
| Manage Groups / buy-bot-groups picker scan | 40 groups | MAX_GROUP_CHECKS — the live admin-status recheck stops here; groups beyond it can't appear as a fresh row, though an already-allowedGroups entry still shows as an "extra" ✅ row. |
| Group title shown on a picker row | 48 characters | |
| DM-authorized usernames | 50 per bot, ^[a-z0-9_]{5,32}$ | Dashboard-only — Groups tab → Authorize A DM. No Telegram command creates one. |
General group allowlist (allowedGroups) | No cap found | Neither the dashboard nor /menu's Manage Groups picker passes a limit — do not repeat HELP_TEXT's 10-group figure here, that cap belongs to the buy bot's own pool below. |
| Buy bot's posting-target pool | 10 — separate from the allowlist above | See Buy bot, below. |
The Enforced/Notes column names the surface that applies the cap — the Telegram bot process, the dashboard's API layer, or both when the same value is checked twice.
| Limit | Value | Notes |
|---|
| Target groups per bot | 10 | MAX_TARGETS (bot) / MAX_TARGET_GROUPS (dashboard). /enablebuybot and the dashboard's group patch both refuse an 11th with Limit reached, we're already in 10 groups. Remove a group first… |
| Prompt TTL | 600 s (10 min) | A pending settings or fork-wizard prompt is rejected once it's this old. |
| Settings dispatch timeout | 20 s | The dashboard call behind every /buybotsettings action. |
| Fork dispatch timeout | 45 s | The dashboard call behind /forkbuybot. |
| Fork dispatch rate limit | 20 requests / 60 s | /api/internal/dispatch, action fork-buybot. |
| Settings dispatch rate limit | 60 requests / 60 s | /api/internal/dispatch, action buybot-settings. |
| Group-title rescan | 300 s | Manage Groups card, background reread between an explicit open or Refresh. |
| Token lookup memo | 600 s | Cached DexScreener token lookup, keyed chain:contract. |
| Limit | Value | Notes |
|---|
| Caption cap, post carries media | 1024 visible UTF-16 units | Every buy post; trailing lines that don't fit are dropped whole. |
| Caption cap, text-only post | 4096 visible UTF-16 units | Same, when the post has no photo, GIF or video. |
| Fork source text | 8192 characters | Before the pasted post is even parsed. |
| Runs per header, and per row | 96 | headerParts, and independently for each of the 6 row keys. |
| Runs per body | 256 | bodyParts. |
| Text per run | 200 characters | Any header, body or row run. |
| Emoji-atom glyph text | 8 characters | The fallback text of a premium-emoji run. |
| Chart label | 24 characters | chartLabel, default Chart. |
| Contract address accepted | 160 characters | Any CA pasted or sent to the bot. |
| Limit | Value | Notes |
|---|
| Extra links | 4 | extraLinks. |
| Extra-link label | 32 characters | |
| Buttons on a post | 12 | buttons. |
| Button text | 64 characters, default Open | |
| Link display on the settings/socials card | 40 characters (37 + …) | |
| Fork "Removed:" list | 8 items, 40 characters each | /forkbuybot's summary of stripped content. |
| Error text in a callback alert | 180 characters | |
| Error text stored or echoed | 200 characters | Settings-dispatch and fork failures. |
| Limit | Value | Notes |
|---|
| Max emojis in the size row | default 50, clamp 1–80 | maxEmojis. |
| USD per emoji | clamp 0.01–1e9 | usdPerEmoji. |
| Min buy | default $0, clamp 0–1e9 | minBuyUsd. |
| Watched pools per family | EVM uncapped, Solana 16, Sui 12, TON 10 | Best pools first. |
| New-holder ratio | 1000× | {POSITION} reads a percentage only up to this multiple of the buyer's pre-buy balance; above it, and at a zero balance, it reads New!. |
| Holders cache | 300 s | The buy-post {HOLDERS} lookup, per chain:contract. |
| Posts per catch-up burst | 5 | Missed buys posted after a reconnect or restart, at most this many at once. |
| Buy staleness cutoff | 600 s | A buy older than this at catch-up time is marked seen but never posted. |
| Limit | Value | Notes |
|---|
| Settings-patch media (base64) | 20 MB, any 2–4 character extension | The media field of a /buybotsettings dispatch patch. |
| Fork photo | 20 MB | /forkbuybot's attached media, at the dispatch layer. |
| Dashboard drag-and-drop upload | jpg/jpeg/png/webp 5 MB, gif/mp4/webm 20 MB | The multipart upload path, separate from the two rows above. |
Command limits
| Limit | Value | Notes |
|---|
| Goal maximum | 100,000 per metric | |
| Goal minimum | At least one metric above 0 | |
| Numeric token length | Up to 6 digits | A 7-digit token is rejected as unparseable, not as out of range. |
| Numbers per command | Exactly 1 or exactly 3 | One applies to all three metrics; three map to likes, retweets, replies in order. |
| Tweet handle length | 1–15 word characters | |
| Concurrent raids, whole bot | 8 | Refused for a new chat past this cap; a chat that already owns a raid can still replace it even at the cap. |
| Raids per chat | 1 | A new /raid replaces the running one. |
| Consecutive failed fetches before giving up | 30 | |
| Poll interval | 1 second | |
| Minimum gap between board edits | 3 seconds, and only if the text changed | |
| Board reposition interval | 120 seconds | |
| Reposition retry interval | 10 seconds | On a failed repost. |
| Limit | Value | Notes |
|---|
| Photo caption | 1024 visible characters | |
| Text message | 4096 visible characters | |
| Over either limit | Whole trailing lines dropped | |
| Intro / footer / end-state text | 700 visible characters | |
Board template (boardHtml) | 1000 visible characters | A board built close to this ceiling can still exceed the 1024-character photo-caption cap once rendered — the overflow drops a whole line at a time, silently. |
| Metric label | 120 visible characters | |
| Plain emoji | 16 characters | |
| Premium emoji ID | 5–32 digits | |
| Raid image | jpg, jpeg, png or webp, up to 5 MB | |
| Allowed HTML tags | b i u s code pre blockquote tg-spoiler tg-emoji a | |
| Link scheme | https:// or tg:// only | |
| Progress-bar catalog | 24 designs per bot | |
| Mint wait | Up to 12 minutes, polled every 3 seconds | |
Busy reply
Sent by anyone once the bot is already running 8 raids and the sending chat has none of its own: "Too many raids running right now — try again soon." No raid starts.
| Limit | Value | Notes |
|---|
| Contract address accepted (dashboard save) | 256 characters, [a-zA-Z0-9._:-]+ | |
| Chains with a keyless holder source | 8 of 9 | HyperEVM has none and is permanently —; the dashboard's chain dropdown never lists it. |
| Preferred-source wait | 2.0 s | PREFER_WAIT_S — the preferred source's own answer window before the race falls back to whichever source answers first. |
| Hard wait | 6.0 s | HARD_WAIT_S — gives up if nothing has answered by then. |
| Dispatch lane timeout | 6.0 s | DISPATCH_TIMEOUT_S, for the CoinGecko leg specifically. |
| Result cache | 15 s per chain-and-address pair, single-flighted | |
| Warm-refresh window | 600 s since the last ask | ACTIVE_WINDOW_S — outside it, an idle bot asks the free sources nothing. |
| Limit | Value | Notes |
|---|
| Buttons per command | 12 max | The Add Button control disables at the cap. |
| Label length | 64 characters | |
| URL scheme | https:// only | A bare host is auto-normalised; an explicit http:// is rejected on save. |
| Colours | 4 | Gray (default), Blue, Green, Red. |
| Layout | Horizontal or Stacked | Stacked is the default. |
| Premium-emoji icon id | 5–32 digits | Anything else is silently dropped when the live config is built. |
| Limit | Value | Notes |
|---|
| Visible reply length | 4096 characters | Telegram's own cap, measured after HTML tags are stripped and entities collapsed to 1 character each. |
| Stored markup size | 64 KiB (65,536 characters) | Of raw response markup. |
| Batch create | 50 commands per API call | An items array on the create action. |
| Management API rate limit | 60 requests / 60 seconds per IP | Shared across every /api/bots/management resource, not specific to commands. |
| Limit | Value | Notes |
|---|
| Output | 320 kbps MP3 | Tagged with title, artist, duration; the bot's own Telegram avatar embedded as cover art. |
| Telegram upload cap | 49 MB per track | |
| Source file cap | 600 MB | |
| Max track duration | 3 hours | |
| Single-track timeout | 300 s | |
| Concurrent downloads | 3 | Shared bot-wide across single tracks and playlists. |
| Per-user cooldown | 20 s, same user + same chat | |
| Repeat-link cache | 24 hours | Telegram's own file_id is re-sent instantly. |
| Playlist track cap | 30 tracks | |
| Playlist timeout | 1500 s | |
| ZIP upload cap | 1900 MB | |
| Playlist choice window | 600 s | Then the prompt is deleted. |
| Bare-command hint lifetime | 45 s | Then the hint and the command are both deleted. |
| Limit | Value | Notes |
|---|
| Presets | 15 | Fixed set — see the Image edit presets chapter for names. |
| Prompt idle timeout | 300 s | The bot deletes its own prompt and the original /presets message. |
| Limit | Value | Notes |
|---|
| Reference images per character | 4 | MAX in refs.py. |
/whoisactive, /whichport and /whichlora read a live probe every time — none of the three cache or poll on a schedule, so no numeric limit applies to them beyond the command-access rules in the table above.
| Limit | Value | Notes |
|---|
| Restriction durations offered | 5 — Permanent (default), 1 hour, 1 day, 3 days, 7 days | The API accepts a custom duration up to 157,680,000 s (~5 years), but no dashboard path reaches it. |
| Daily Limit minimum | 1 | Daily limit must be an integer >= 1 below it. |
| Daily Limit maximum | None | |
| Daily Limit default for a new restriction | 50 | |
| Limit | Value | Notes |
|---|
| Handle pattern | ^[a-z0-9_]{1,15}$ | After trim, leading @ stripped, lower-cased. |
| Cap | 200 handles | The AddUsers button disables itself at the cap. |
| Adding | Bulk-paste only | No single-add path. |
Every hard number across feed, phrase and follow-tracker automations, recap, posts on demand, follower lists, contract-address cards, and forum topics.
| Limit | Value | Notes |
|---|
| Automations per bot | 10 | Every plan. |
| Rules per entry | 8 | phrase and follow only. |
| Rule value | 0 – 1,000,000,000,000 | Ratio rounds to 2 decimal places; every other kind is floored. |
| Rule tolerance | 0 – the entry's own rule count | Clamped to the rule count on save. |
ca rule wait (follow only) | 8.0 s | Judged instantly on a phrase entry — no wait. |
| Buttons per entry | 12 | feed/phrase only. |
| Button style options | 3 | primary, success, danger. |
| Button label | 64 characters | Hard-truncated, not rejected. |
| Custom-emoji button icon id | 5–32 digits | |
| Message / link label / recap row / recap header | 500 characters each | Rejected over, not truncated. |
| Phrase length | 120 characters | |
| Handle | 1–15 letters, digits, underscore | |
| Minimum-followers gate ceiling | 1,000,000,000 | |
| Uploaded image | 5 MB, jpg / jpeg / png / webp | |
| Limit | Value | Notes |
|---|
| Recap times | Up to 3, HH:MM, deduplicated | America/New_York, always. |
| Recap prep lead | 300 s (5 min) before each slot | One re-fetch per queued hit. |
| Recap send window | 900 s (15 min) after each slot | A missed slot is skipped, not queued. |
| Recap hits kept | 100 | Oldest dropped first. |
| Recap message split | 4000 characters per part | Header appears on the first part only. |
| Limit | Value | Notes |
|---|
| Feed / follow poll interval | 5.0 s | |
| Phrase poll interval | 10.0 s | |
| Feed announces per tick | 3 | The rest wait for the next tick. |
| Phrase announces per tick | 5 | |
| Follow announces per tick | 3 | Oldest first. |
| Feed ids remembered | 50 | |
| Phrase ids remembered | 300 | |
| Follow ids remembered | 1000 | Oldest trimmed first. |
| Follow arming | Up to 5 pages of the account's Following list | Seeds the seen list before announcing anything. |
| Backoff | 30 s, doubling to 300 s (5 min) | On a 429 or a long miss streak. |
| Miss streak before backoff | 24 misses | |
| Failures before backoff | 6 failures | |
| Search results window | 100 rows per request | |
| Limit | Value | Notes |
|---|
| Posts per press | 5 | |
| Free-press window after a follow | 300 s (5 min) | No request inside this window. |
| Timeline page size | 20 posts | Per request. |
| Timeline pages read per later press | 4 | |
| Posts shown per card, max | 40 | |
| Post text on a card | 220 characters | |
| Post quote on a feed/phrase card | 600 characters (400 as a photo caption) | |
| Graphic render timeout | 20 s | |
| Tracked account's own profile cache | 6 h, retried after 10 min on a miss | The graphic's "who followed" side. |
| Limit | Value | Notes |
|---|
| Follower-list message | 3800 characters / 45 rows | Whichever comes first. |
| Follower-list name | 28 characters | |
| Follower-list pacing | 0.4 s between parts | |
| Follower-list flood-wait honoured | Up to 300 s, 6 attempts per part | |
| JSON-document threshold | Over 200 followers | Top 20 message + complete list as a JSON file. |
| Harvest cache | 120 s | |
| Harvest request timeout | 240 s | |
| Limit | Value | Notes |
|---|
| CA announce budget (profile scan) | 1.5 s | Never waited for the search. |
| CA late-edit window | 20 s | One edit, whatever came back. |
| Tokens shown per card | 3 | |
| CA candidates remembered per card | 60 | Not re-resolved. |
| Limit | Value | Notes |
|---|
| Cards kept per entry | 30 | Oldest trimmed first; rich-delivered only. |
| Bio on the rich card | 600 characters, expandable past 200 visible characters | |
| Bio on the classic card | 280 characters as text, 200 as a caption | |
| View-button name | 20 characters | Ellipsised past that. |
| Topic kinds | 3 | alerts, lists, achievements. |
| Topics remembered | 40 groups × 200 topics each | |
| Topic id | A whole number, 1 – 2,147,483,647 | |
Deliberately uncapped
The scanner enforces no burst cap, no per-message cap, and no repeat cooldown — every candidate address in a message gets its own card, and pasting the same address again immediately still gets a fresh reply every time. The one place multiple mentions fold together is inside a single message, where the same address pasted twice produces one card, not two.
| Limit | Value | Notes |
|---|
| Chains recognised | 9 | See Chains and data sources. |
| Chains with a keyless holder source | 8 of 9 | HyperEVM permanently —. |
| Socials button rows | 2 per row, up to 4 | 🌐 Website · 𝕏 Twitter · ✈️ Telegram · 💬 Discord. |
| Second-website label truncation | 16 characters | |
| Limit | Value | Notes |
|---|
| Thresholds | 11 — 2, 3, 4, 5, 10, 20, 40, 100, 200, 500, 1000× | CALLS_MULTIPLIERS; a multiplier is never announced twice. |
| Poll cycle | Every 15 seconds | Coins fetched from DexScreener in batches of 30 addresses per request. |
| Hot-tier recheck | ~15 s (every cycle) | Called, or a new all-time-high market cap, within the last 14 days. |
| Cold-tier recheck | 600 s (10 min) | Everything else. |
| Poll giveup | 5000 consecutive checks with no trading pair | The coin stops being polled entirely. |
| Limit | Value | Notes |
|---|
| Reply split threshold | 3800 visible characters per part | Sent 3.1 seconds apart; a split header gets a · part k/n suffix. |
/leaderboard windows | 4 — all time, 1d, 7d, 30d | Case-insensitive tokens; unrecognised windows get a usage reply. |
| Limit | Value | Notes |
|---|
| Spin styles (Telegram wizard) | 11 | 9 of the 11 have no described look anywhere in the codebase. |
| Colours (Telegram wizard) | 7 | No textures in this path. |
| Spin styles (web coin studio) | 2 | |
| Colours (web coin studio) | 6, plus a custom hex picker | |
| Textures (web coin studio) | 7, plus Auto | |
| Finish toggle groups (web coin studio) | 9 groups, 21 options, plus a 50–200% animation-speed slider in 5% steps | |
| DM-resolvability cache | 600 s | A successful check is not repeated within the window. |
| Packs listed per page | 10 | |
| Emoji rendered inline on a pack's detail card | 100 | Beyond that: +N more. |
| Edit Pack Name reply | Truncated to 64 characters | |
| Existing Emoji clone cap (Telegram wizard) | 200 stickers per set | First 50 in the initial create call, the rest appended one at a time. |
| "No, surprise me" title | 49 characters + - @memescaleai = 64 total | |
| Limit | Value | Notes |
|---|
| Tiles per banner | 8 (512 × 512 px each) | 4096 × 512 px master, no configurable pack-size maximum. |
| Default loop length | 1.2 s (72 frames at 60 fps) | Unless the design's own bake reports otherwise. |
| Banner text / second text (Two-Text) | 24 characters each | |
| Pack name (Export) / save-design name | 48 characters each | |
| Image upload (From Files) | 4 MB | |
| Lottie JSON upload | 4 MB | |
Font upload (.ttf / .otf) | 3 MB | |
| Saved designs per account | 200 | |
| Saved design spec size | 16,384 bytes | spec too large over it. |
| Concurrent packs generating, same account | 4 | |
| Global pack queue, whole platform | 48 | |
| Pack job timeout | 45 minutes | |
| Tile size ceiling (Telegram) | 64 KB per tile | |
| Limit | Value | Notes |
|---|
| Visible presets | 25 | 31 families exist in the catalog; 6 more are retired (hidden, not deleted). |
| Colours | 17 | Default selection: Red. |
| Cells — Commands / Raid / Automations picker | 11 | |
| Cells — hyperlink navigation | 12 | Resolved from a second catalog, divider-catalog-12.json — 41 families, 30 colours, none exposed in the ordinary picker. |
| Limit | Value | Notes |
|---|
| Builder steps | 5 | Website URL, Buckets, Link selection, Preset, Command. |
| Live presets | 3 | white (17 colour variants), white-theme (17), diamonds (14 material variants). |
| Selectable buckets | 1 of 6 | Only Socials — the other five show a "Coming soon" pill. |
| Link cap | 6 | The active configuration allows up to 8, but the compiled cap of 6 always wins. |
| Custom-emoji ceiling | 100, configurable 1–no max | Over it, divider rows drop bottom-up until the message fits or every divider row is gone; link rows and the banner row never drop. |
| Site-discovery storage | Up to 1,000 platform groups × 100 candidates each | Independent of the 6-link cap, so an edit can reopen every original candidate. |
| Detection rate limit | 12 scans / 60 s per IP | No exemption for paying accounts. |