Messenger Platform · error code

Messenger error 4: Application request limit reached

RetryableHTTP 400Rate limits & throttling

Last verified against Meta for Developers - Messenger Platform error codes

What Messenger returns
Rate Limit error: Application request limit reached.

What error 4 means

Code 4 is the Graph API's application-level throttle: your app, across every Page and every endpoint it touches, has exceeded the platform rate limit for its rolling window. Meta's Messenger error-codes table lists two message variants, "Application request limit reached" and "Too many send requests to phone numbers," and the prescribed remedy is the same for both: "pause requests until current requests drop below the limit."

Because the quota is app-wide, code 4 has a failure mode the per-Page throttles lack: one noisy tenant can take down every Page the app serves. A multi-Page bot platform where a single Page runs a runaway campaign will see error 4 on unrelated Pages, which looks like a mysterious global outage until you sum call volume per app rather than per Page. The Messenger-specific ceilings (200 calls x engaged users per 24 hours, 300 sends per second per Page) are enforced separately and surface as 613 or 80006; code 4 sits above all of them.

The platform tells you how close you are before it cuts you off. Every response carries an X-App-Usage header with call_count, total_time and total_cputime as percentages; throttling begins when any of them reaches 100. Ignoring that header and discovering the limit via error 4 is the avoidable part.

What it looks like

{
  "error": {
    "message": "(#4) Application request limit reached",
    "type": "OAuthException",
    "code": 4,
    "fbtrace_id": "Fz54k3GZrio"
  }
}

Why it happens

  • Aggregate call volume across all Pages served by the app exceeding the app-level quota.
  • Retry storms multiplying a transient failure into quota exhaustion.
  • Polling loops (conversation lists, profile fetches) that scale linearly with tenants.
  • Batch jobs (broadcasts, re-engagement campaigns) fired without rate shaping.
  • Several environments (staging, dev, prod) sharing one app ID and one quota.

How to fix Messenger error 4

  1. 1Pause all calls; the block clears as your rolling-window usage drains, typically within the hour.
  2. 2Read X-App-Usage on every response and shed load at 80% instead of failing at 100%.
  3. 3Find the source: sum calls per Page and per code path; a single runaway loop is the usual culprit.
  4. 4Serialize and rate-shape batch jobs through one central queue with backoff on 4, 17, 32 and 613.
  5. 5Split environments onto separate app IDs so staging tests cannot throttle production.

How to stop it recurring

Centralize every Graph API call behind one client that enforces a token-bucket budget, watches X-App-Usage, and treats 80% as the alarm line. Cache anything cacheable, user profiles especially, and replace polling with webhooks. The documented Messenger ceilings that sit underneath the app quota are tabulated in the limits reference, and the throttling family is mapped in the troubleshooting guide.

Official reference: Meta for Developers - Messenger Platform error codes. See all Messenger error codes or the Messenger limits and quotas.

Related codes

Error 4 - quick answers

What does Messenger error 4 mean?

Code 4 is the Graph API's application-level throttle: your app, across every Page and every endpoint it touches, has exceeded the platform rate limit for its rolling window.

How do I fix Messenger error 4?

1. Pause all calls; the block clears as your rolling-window usage drains, typically within the hour. 2. Read X-App-Usage on every response and shed load at 80% instead of failing at 100%. 3. Find the source: sum calls per Page and per code path; a single runaway loop is the usual culprit. 4. Serialize and rate-shape batch jobs through one central queue with backoff on 4, 17, 32 and 613. 5. Split environments onto separate app IDs so staging tests cannot throttle production.

Can I retry after error 4?

Yes - this is a retryable condition. Back off (start around one second and double on each attempt, with jitter) and watch for a retry-after hint from the platform before resending.

Stop debugging Messenger by hand

Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.