Messenger Platform · error code

Messenger error 10: Message sent outside of allowed window

Permanent - do not retryHTTP 400Messaging window & tags

Last verified against Meta for Developers - Messenger Platform error codes

What Messenger returns
This message is sent outside of allowed window. Learn more about the new policy here.

What error 10 means

Code 10 with subcode 2018278 is the Messenger Platform's central rule being enforced: a Page may send messages only within the standard messaging window, the 24-hour period that starts each time the person messages your Page or takes an equivalent action. Your token, permissions and payload are all fine; the timing is not. Meta's error-codes page lists the message as "This message is sent outside of allowed window. Learn more about the new policy here," a string dating from the 2020 policy change that shortened the window to a flat 24 hours.

The window is more generous than most developers assume. It opens, and re-opens, when a person sends your Page a message, clicks a call-to-action like Get Started, messages you from a Click-to-Messenger ad, uses the Send to Messenger or checkbox plugin, opens an existing conversation from an m.me link (the kind you can build with the Messenger link generator), reacts to a message, comments on a Page post, or publishes a visitor post. Every one of those actions resets the clock; an active conversation never expires. It closes quietly 24 hours after the last such action.

Watch out: code 10 is heavily overloaded. Without a subcode it is a plain permission error, and with subcode 2534022 or 2018065 it is still the window but under a different rule. Read the subcode before routing the failure. Outside the window your sanctioned options are limited: the HUMAN_AGENT tag for a human reply within 7 days (App Review required), one-time notifications the person opted into, or sponsored messages. The old tag escape hatches are mostly gone; since April 27, 2026, CONFIRMED_EVENT_UPDATE, ACCOUNT_UPDATE and POST_PURCHASE_UPDATE fail with error code 100. The full window mechanics are tabulated in the Messenger limits reference.

What it looks like

{
  "error": {
    "message": "(#10) This message is sent outside of allowed window. Learn more about the new policy here: https://developers.facebook.com/docs/messenger-platform/policy-overview",
    "type": "OAuthException",
    "code": 10,
    "error_subcode": 2018278,
    "fbtrace_id": "Fz54k3GZrio"
  }
}

Why it happens

  • A bot or agent replying more than 24 hours after the person's last message or qualifying action.
  • A scheduled follow-up (cart reminder, status update) implemented as a normal send instead of a tagged or opted-in message.
  • Tracking the window from the first inbound message instead of the most recent one, so your app thinks the window is still open.
  • Sending with messaging_type RESPONSE or UPDATE where only a MESSAGE_TAG send would be allowed.
  • Relying on a deprecated tag: since April 27, 2026 the retired update tags no longer open the window (they fail with code 100, but flows migrated halfway often fall through to an untagged send that hits 2018278).

How to fix Messenger error 10

  1. 1Check the timestamp of the person's last inbound event; if it is older than 24 hours, the window is closed and this exact send cannot succeed.
  2. 2For human support escalations, resend with messaging_type MESSAGE_TAG and tag HUMAN_AGENT, valid within 7 days of the person's message, once your app holds the Human Agent permission from App Review.
  3. 3For predictable follow-ups, request a one-time notification opt-in while the window is still open, then use the resulting token for the follow-up send.
  4. 4Fix your window bookkeeping: store the latest inbound timestamp per PSID, compare in UTC, and include reactions and postbacks as window-opening events.
  5. 5Do not retry untagged; the error is deterministic until the person interacts again.
  6. 6Audit flows still referencing CONFIRMED_EVENT_UPDATE, ACCOUNT_UPDATE or POST_PURCHASE_UPDATE and migrate them to opt-in mechanisms.

How to stop it recurring

Gate every outbound send on a window check: latest qualifying inbound timestamp plus 24 hours, evaluated immediately before the API call, with the tagged or opted-in fallback chosen automatically when the window is closed. Design reminder-style flows on one-time notifications from day one instead of retrofitting. Keep the conversation alive legitimately, quick replies and menus invite interactions that reset the clock. The window rules sit alongside every other cap in the limits table, and the troubleshooting guide walks the symptom backwards.

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

Related codes

Error 10 - quick answers

What does Messenger error 10 mean?

Code 10 with subcode 2018278 is the Messenger Platform's central rule being enforced: a Page may send messages only within the standard messaging window, the 24-hour period that starts each time the person messages your Page or takes an equivalent action. Your token, permissions and payload are all fine; the timing is not. Meta's error-codes page lists the message as "This message is sent outside of allowed window.

How do I fix Messenger error 10?

1. Check the timestamp of the person's last inbound event; if it is older than 24 hours, the window is closed and this exact send cannot succeed. 2. For human support escalations, resend with messaging_type MESSAGE_TAG and tag HUMAN_AGENT, valid within 7 days of the person's message, once your app holds the Human Agent permission from App Review. 3. For predictable follow-ups, request a one-time notification opt-in while the window is still open, then use the resulting…

Should I retry after error 10?

No. Retrying the same request produces the same error; the condition has to be fixed first. Treat it as a permanent failure for that message and surface it, rather than looping.

Stop debugging Messenger by hand

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