Instagram error 190: Session has expired
Last verified against Meta for Developers - Messenger Platform error codes
Error validating access token: Session has expired on {date}. The current time is {date}.What error 190 means
Code 190 with subcode 463 is plain token expiry. Meta's error-handling reference describes 463 as "Login status or access token has expired, been revoked, or is otherwise invalid", and the message helpfully names the exact expiry timestamp. This is the classic signature of an Instagram integration that ran perfectly for a fixed period - an hour, or about 60 days - and then died at a predictable moment without any code change.
The period tells you which token you shipped. A short-lived user token lasts about an hour; a long-lived user token about 60 days. On the Messenger Platform route the production credential should be a Page access token derived from a long-lived user token - Meta documents that Page tokens obtained this way have no expiration date, though they still die if the issuing user loses access to the Page, deauthorizes the app, or changes their password (that variant is subcode 460). On the Instagram API with Instagram Login route, long-lived tokens must be refreshed before expiry with the refresh endpoint; a missed refresh lands here.
Everything else about your integration is untouched. Webhooks may even keep arriving while every reply fails with 463, because inbound delivery does not use your token. That asymmetry - inbound fine, outbound dead - is a strong 190 signal.
What it looks like
{
"error": {
"message": "Error validating access token: Session has expired on Tuesday, 19-Aug-26 04:00:00 PDT. The current time is Wednesday, 20-Aug-26 09:12:44 PDT.",
"type": "OAuthException",
"code": 190,
"error_subcode": 463,
"fbtrace_id": "Dq1rS8uV3wXy"
}
}Why it happens
- A short-lived (about one hour) user token from the login flow was stored and used in production instead of being exchanged for a long-lived token.
- A long-lived Instagram-Login token passed its roughly 60-day lifetime without being refreshed.
- A scheduled refresh job failed silently (crashed worker, rotated credentials, deploy that dropped the cron) and nobody noticed until expiry.
- The Page token was regenerated elsewhere (reconnecting the account in another tool) and your stored copy became the stale one.
- Clock skew or a timezone bug made your refresh logic think the token was younger than it was.
How to fix Instagram error 190
- 1Confirm the diagnosis in the Access Token Debugger: it shows the token's type, expiry, and scopes.
- 2On the Messenger Platform route: exchange a fresh short-lived user token for a long-lived one (fb_exchange_token grant), then call /me/accounts to fetch the Page access token, and store that Page token for messaging.
- 3On the Instagram Login route: obtain a new long-lived token via the token exchange, and schedule refresh_access_token well before the 60-day horizon.
- 4Replace the stored token atomically wherever it is read, then verify with a harmless GET (for example /me) before resuming sends.
- 5Prompt the account owner to reconnect through your login flow if the refresh grant itself has expired - only a fresh login can mint a new session.
How to stop it recurring
Make token age observable: store issued-at and expected-expiry alongside the token, alert when a token crosses 80 percent of its lifetime, and run the refresh in a job with failure alerting rather than a fire-and-forget cron. Add a daily health check that calls the debug endpoint so an invalid credential is a monitoring event, not a customer report. Section 6 of the troubleshooting guide covers the full token lifecycle across both routes, and the 190 hub entry maps the other subcodes.
Official reference: Meta for Developers - Messenger Platform error codes. See all Instagram error codes or the Instagram limits and quotas.
Related codes
- 190: Invalid OAuth access tokenAccess Token Error: Invalid OAuth access token.
- 190: Session invalidated - password changed or session revokedError validating access token: The session has been invalidated because the…
- 190: Access token expired, revoked, or invalidAccess token has expired, been revoked, or is otherwise invalid.
- 10: Application does not have permission for this action(#10) Application does not have permission for this action
Error 190 - quick answers
What does Instagram error 190 mean?
Code 190 with subcode 463 is plain token expiry. Meta's error-handling reference describes 463 as "Login status or access token has expired, been revoked, or is otherwise invalid", and the message helpfully names the exact expiry timestamp.
How do I fix Instagram error 190?
1. Confirm the diagnosis in the Access Token Debugger: it shows the token's type, expiry, and scopes. 2. On the Messenger Platform route: exchange a fresh short-lived user token for a long-lived one (fb_exchange_token grant), then call /me/accounts to fetch the Page access token, and store that Page token for messaging. 3. On the Instagram Login route: obtain a new long-lived token via the token exchange, and schedule refresh_access_token well before the 60-day horizon. 4.…
Stop debugging Instagram by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.