Messenger error 190: Invalid OAuth access token
Last verified against Meta for Developers - Messenger Platform error codes
Access Token Error: Invalid OAuth access token.What error 190 means
Code 190 means the Page access token your server presented is not valid: expired, revoked, malformed, or issued for a different app or Page than the one you are calling. Nothing else about the request was even evaluated, authentication is the first gate, so the recipient, window and payload are all irrelevant until the token is fixed.
On Messenger this failure has a distinctive symptom: the bot goes half-dead. Webhook deliveries continue, because the subscription does not depend on your token, so your server keeps receiving messages; every reply then fails with 190. From the outside the bot "reads" messages but never answers, which is why 190 sits near the top of the Messenger silent-bot checklist.
Tokens die for concrete reasons. Short-lived user tokens expire in hours, and a Page token derived from one can die with it unless you exchanged for a long-lived token first. Any password change, logout-everywhere, or two-factor reset by the person who granted the token invalidates it. So does removing that person's role on the Page or app, deauthorizing the app, or Meta security checkpoints on the granting account. Graph API error subcodes narrow it down when present: 458 (app not installed), 459 (user checkpointed), 460 (password changed), 463 (token expired), 464 (unconfirmed user), 467 (invalid token), 492 (the user behind the Page token no longer has an appropriate role on the Page).
What is NOT wrong: your app review status and permissions, missing pages_messaging surfaces as 200 or 230, not 190, and a token can be perfectly valid yet unauthorized. Fixing 190 means replacing the credential, not resubmitting for review.
What it looks like
{
"error": {
"message": "Invalid OAuth access token.",
"type": "OAuthException",
"code": 190,
"error_subcode": 463,
"fbtrace_id": "BLBz/WZt8dN"
}
}Why it happens
- Short-lived token expired because it was never exchanged for a long-lived Page access token.
- The person who generated the token changed their password, logged out of all sessions, or hit a Facebook security checkpoint (subcodes 460, 459).
- The granting user was removed from the Page or lost the role that permitted the MESSAGE task (subcode 492).
- The app was deauthorized by the user or removed from the Page's connected apps (subcode 458).
- Copy-paste corruption: truncated tokens, stray whitespace, or a token from the wrong app/Page pasted into production config.
How to fix Messenger error 190
- 1Paste the failing token into Meta's Access Token Debugger (developers.facebook.com/tools/debug/accesstoken) and read validity, expiry, app, Page and granted scopes.
- 2Generate a fresh Page access token from a user with the MESSAGE task on the Page, exchange it for a long-lived token, and deploy it to your server's secret store.
- 3If subcode 492 appears, restore the granting user's Page role or re-issue the token from a user who has one; for durability use a system-user token from Business Manager.
- 4Restart or reload whatever process caches the old token; many "the new token doesn't work" reports are stale caches.
- 5Add a startup and daily health check that calls a cheap endpoint (e.g. /me) and alerts on 190 before customers notice.
How to stop it recurring
Issue tokens from a role that will not churn, a Business Manager system user where possible, exchange for long-lived tokens as a build step, and store them in a secret manager rather than code. Monitor with a scheduled token introspection so expiry becomes a ticket, not an outage. Keep one runbook page: who can re-grant, which scopes are needed (pages_messaging, pages_manage_metadata), where the token lives. Token hygiene issues on the Instagram side look identical; see the Instagram messaging guide.
Official reference: Meta for Developers - Messenger Platform error codes. See all Messenger error codes or the Messenger limits and quotas.
Related codes
- 230: Requires pages_messaging permission(#230) Requires pages_messaging permission to manage the object
- 200: pages_messaging not reviewed - app not livePermission Error: Cannot message users who are not admins, developers or…
- 100: Unsupported get request - object missing or unreadableUnsupported get request. Object with ID * does not exist, cannot be loaded due…
- 1: An unknown error occurredAn unknown error occurred.
Error 190 - quick answers
What does Messenger error 190 mean?
Code 190 means the Page access token your server presented is not valid: expired, revoked, malformed, or issued for a different app or Page than the one you are calling. Nothing else about the request was even evaluated, authentication is the first gate, so the recipient, window and payload are all irrelevant until the token is fixed. On Messenger this failure has a distinctive symptom: the bot goes half-dead.
How do I fix Messenger error 190?
1. Paste the failing token into Meta's Access Token Debugger (developers.facebook.com/tools/debug/accesstoken) and read validity, expiry, app, Page and granted scopes. 2. Generate a fresh Page access token from a user with the MESSAGE task on the Page, exchange it for a long-lived token, and deploy it to your server's secret store. 3. If subcode 492 appears, restore the granting user's Page role or re-issue the token from a user who has one; for durability use a system-user…
Stop debugging Messenger by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.