Every Facebook Messenger Platform limit, in one table
Last verified against Meta for Developers - Messenger Platform documentation
The Messenger Platform's limits come in three species, and confusing them costs debugging time. Policy limits govern when you may send: the 24-hour standard messaging window, the shrinking list of message tags that cross it, and the opt-in mechanisms (one-time notifications, marketing messages) that replace the tags Meta retired in April 2026. Content limits govern what a single message may contain: 2,000 characters of text, 25 MB per attachment, 13 quick replies, 3 buttons, 10 carousel cards. Rate limits govern how fast you may call: a pool of 200 calls per engaged user per rolling 24 hours, 300 sends per second per Page, and a tight 10-calls-per-10-minutes budget on the profile API that trips more deploy scripts than traffic ever does.
Each limit fails with its own error signature. Window violations return code 10 with subcodes like 2018278; oversized media returns 100/2018109; throttling surfaces as 4, 17, 32, 613 or 80006. The tables below name the error each limit fires so you can navigate straight from a log line to the rule behind it, and each row carries the official documentation link, only documented values appear here. The companion catalogue at /errors/messenger explains every code in depth, and the Messenger troubleshooting guide works backwards from symptoms.
Two structural facts shape everything else. First, Messenger enforcement is per-Page: quotas, windows and menus all bind to the Page (and the app connected to it), so multi-Page deployments budget per Page, not per server. Second, identifiers are scoped: recipient PSIDs exist per app-Page pair, which is why they appear in the webhook table below rather than being portable data. Numbers here were verified against Meta's documentation on the date above; Meta adjusts limits with platform announcements, so treat the changelog as part of your dependency list. For building the bot itself, see the Messenger chatbot overview.
Jump to: Standard messaging window & re-engagement · Message tags · Message content caps · Templates & buttons · Rate limits & throttling · Messenger profile, menus & greetings · Webhooks & identifiers
Standard messaging window & re-engagement
The standard messaging window is the platform's core consent rule: once a person interacts with your Page, you have 24 hours to send anything, including promotional content; after it closes, untagged sends fail with error 10/2018278 or 10/2534022. The window re-opens on every qualifying interaction, not just messages, and the list of qualifying actions is longer than most integrations assume. Everything that legitimately reaches a person after the window, one-time notifications, sponsored messages, marketing-message opt-ins, is an explicit consent or paid mechanism, tabulated here with its own caps.
| What | Limit |
|---|---|
| Standard messaging window | 24 hours from the person's last qualifying action |
| Actions that open (and re-open) the window | 8 documented user actions |
| Private replies | 1 message, within 7 days of the comment or post |
| One-time notification (OTN) follow-up | 1 message per opt-in token; token expires in 1 year |
| OTN request template title | 65 characters |
| Marketing messages (recurring notifications) | Opt-in required; frequency capped by the agreed cadence |
| Sponsored messages | Paid channel; no organic equivalent |
Message content caps
Per-message content limits are enforced at the payload level and fail fast with code 100 variants: oversized files with 100/2018109, unfetchable media with 100/2018008, type mismatches with 100/2018047, and slow video with 100/2018294. The numbers below come from the Send API reference and the quick replies reference; where a cap interacts with another (the 25 MB file cap versus the 75-second video fetch), the tighter constraint wins in practice.
| What | Limit |
|---|---|
| Text message length | 2,000 characters, UTF-8 |
| Attachment file size | 25 MB maximum |
| Video fetch timeout (URL attachments) | 75 seconds |
| Multiple attachments in one message | 30 images maximum; images only |
| message.metadata | 1,000 characters |
| Quick replies per message | 13 maximum |
| Quick reply title | 20 characters |
| Quick reply payload | 1,000 characters |
| Quick reply icon image | Minimum 24 x 24 px |
| Typing indicator (sender action typing_on) | Auto-off after 20 seconds |
Rate limits & throttling
Messenger rate limits are per-Page and layered: a rolling 24-hour pool that scales with the audience, per-second ceilings on the Send API, and endpoint-specific budgets. Crossing them returns the throttle family, 4 (app-wide), 17 (user token), 32 (Page), 613 (custom/per-API) and 80006 (Messenger business use case), and Meta's stated best practice is to stop calling, because continued calls extend the block. The X-App-Usage and X-Business-Use-Case-Usage response headers report fill percentages and an estimated_time_to_regain_access, so the limits are observable before they bite.
| What | Limit |
|---|---|
| Messenger API call pool | Calls within 24 hours = 200 x number of engaged users |
| Send API - text, links, reactions, stickers | 300 calls per second per Page |
| Send API - audio and video content | 10 calls per second per Page |
| Conversations API | 2 calls per second per Page |
| Private Replies API | 750 calls per hour per Page |
| Single-thread send throttle | Documented, no published number |
| Throttle error codes | 4, 17, 32, 613 (subcode 1996 for volume anomalies), 80006 |
| Usage visibility headers | Throttling begins when any metric reaches 100% |
Webhooks & identifiers
Webhook delivery has documented deadlines on both sides: your endpoint must answer every event with 200 OK within 5 seconds, and Meta's retry ladder is short, immediate retries, a developer alert if delivery still fails after 15 minutes, and a Webhooks Disabled alert with the app unsubscribed from the Page after 1 hour of failures. An unsubscribed bot is the classic silent failure: sends still work, but nothing arrives, the exact scenario walked through in the webhook debugging guide. The identifier rows matter because misread IDs surface later as 100/2018001 on sends.
| What | Limit |
|---|---|
| Webhook response deadline | 200 OK within 5 seconds, for all notifications |
| Failed delivery - retries and alert | Immediate retries, then alert at 15 minutes |
| Failed delivery - unsubscription | Webhooks disabled after 1 hour of failures |
| Event ordering | Not guaranteed after failures |
| Endpoint TLS requirement | Valid TLS/SSL certificate; self-signed not supported |
| Recipient identifiers (PSIDs) | Page-scoped: one ID per person per Page |
Messenger guides and tools
Other platforms
Frequently asked questions
How long is the Messenger messaging window?
24 hours from the person's most recent qualifying action, and it re-opens on every one: a message, a Get Started tap, a plugin or m.me interaction, a reaction, a comment on your post, or a visitor post. Inside the window you may send anything, including promotional content. After it closes, untagged sends fail with error 10 (subcodes 2018278 or 2534022) until the person interacts again.
Which message tags does Messenger still support in 2026?
Meta documents that since April 27, 2026, requests using CONFIRMED_EVENT_UPDATE, ACCOUNT_UPDATE or POST_PURCHASE_UPDATE receive error code 100. HUMAN_AGENT survives for human replies within 7 days of the person's message and requires App Review approval of the Human Agent permission. CUSTOMER_FEEDBACK remains documented for the Customer Feedback Template, also on a 7-day clock. No tag may carry promotional content.
What is the HUMAN_AGENT tag's window and requirement?
Messages tagged HUMAN_AGENT can be sent within 7 days of the person's message, for human agent support on issues that cannot be resolved inside the standard 24-hour window. Automated messages are a disallowed usage. The app must be approved for the Human Agent permission through App Review; the tag is unavailable in development mode or with standard access.
How long can a Messenger text message be?
The Send API's message.text must be UTF-8 and under 2,000 characters. Related payload caps: metadata at 1,000 characters, quick reply payloads and postback payloads at 1,000 characters, button template text at 640 characters, and generic template titles and subtitles at 80 characters each. Longer content is better delivered as a webview link than as chained maximal messages.
What is the Messenger attachment size limit?
25 MB per attachment across audio, file, image and video types, documented in the Send API reference; oversized files fail with error 100/2018109. URL-referenced video must also be fetchable within 75 seconds or it fails with 100/2018294, which makes the practical video budget tighter than 25 MB on slow origins. The Attachment Upload API with reusable IDs sidesteps fetch-time problems.
How many quick replies and buttons can one message have?
Up to 13 quick replies per message, each with a 20-character title and 1,000-character payload. Templates carry 1-3 buttons: the button template accepts a set of 1-3, and the generic template allows a maximum of 3 buttons per element. A generic template message supports up to 10 elements, rendered as a horizontally scrollable carousel, with 80-character titles and subtitles.
What are the Messenger API rate limits?
The documented formula is calls within 24 hours = 200 x the number of engaged users, the people the business can message. On top of that pool, the Send API allows 300 calls per second per Page for text, links, reactions and stickers, and 10 per second for audio or video; the conversations API allows 2 calls per second; private replies allow 750 per hour. Breaches return codes 4, 17, 32, 613 or 80006.
How often can I update the persistent menu or greeting?
The Messenger Profile API, which sets the menu, greeting, ice breakers and get-started button, is limited to 10 calls per 10-minute interval per Page, and user-level menus via custom_user_settings to 10 calls per user per 10 minutes. Page-level menu changes can additionally take up to 24 hours to propagate, while user-level changes apply in realtime. Set profile properties on change, never in deploy loops.
What happens if my webhook endpoint goes down?
Meta retries failed notifications immediately a few times, alerts your developer account if delivery still fails after 15 minutes, and after 1 hour of failures sends a Webhooks Disabled alert and unsubscribes the app from the Page. After that, nothing arrives until you fix the endpoint and re-subscribe. Events redelivered around failures can arrive out of order, so sequence by the payload's timestamp field.
Why do recipient IDs from other sources fail on Messenger?
The Send API addresses people by Page-scoped ID (PSID), created when the person first messages your Page and unique to that Page-and-app pairing. IDs from Facebook Login are app-scoped and documented as not working with the Messenger Platform, and PSIDs from another Page or app resolve to no one, failing with error 100/2018001. Capture PSIDs from your own webhook events and re-match them after any app migration.
Build on Messenger without tracking every limit yourself
Conferbot paces sends, queues retries and surfaces limit errors as readable status.