Facebook Graph API Error Codes and Subcodes: Full List
Facebook Graph API error codes and subcodes in tables: what 190/463, 200/2069032, 100/33 and the rate-limit codes mean, and the fix for each.
Facebook Graph API errors carry a top-level code (190 token, 10 and 200-299 permissions, 4, 17, 32 and 613 rate limits, 368 policy block, 506 duplicate post) and an optional error_subcode that names the exact cause, such as 463 expired token, 460 password changed or 2069032 Page token required. Branch on the code, then fix by subcode.
Every Facebook Graph API error comes back with two numbers. The top-level code tells you the category (token, permission, rate limit, policy), and the error_subcode tells you the exact cause inside that category. Code 190 with subcode 463 means an expired token; code 190 with subcode 460 means the person changed their password. Same code, different fix.
Meta does not keep the Graph API error codes and subcodes in one place. They are split across the Graph API error-handling guide, the Pages API error codes, the rate-limiting reference and the Messenger Platform error codes. This page puts the ones you hit when publishing to Facebook Pages in tables, each with what to do next. If you handle errors from several networks, the social media API error handling taxonomy shows how to fold these codes into one retry policy. Every row below was checked against Meta's docs in November 2026.
PostGate handles OAuth, publishing and delivery evidence for every network through one API. Start free or read the docs.
What does a Graph API error response look like?
Failed calls return an error object. Log the whole object, not just the message, because the message text can change while the numbers stay put.
{
"error": {
"message": "Error validating access token: Session has expired on ...",
"type": "OAuthException",
"code": 190,
"error_subcode": 463,
"fbtrace_id": "A1b2C3d4E5f"
}
}code: the stable category. Branch on this first.error_subcode: the specific cause. Not every error has one.type: the error class, such asOAuthException. Too broad to branch on.error_user_titleanderror_user_msg: text you can show the end user, in the request's locale.fbtrace_id: an internal ID for Meta support. It expires quickly, so store it with the failure when it happens.
Which top-level Facebook Graph API error codes matter?
These come from the error-handling guide. The third column is the action that guide recommends, shortened.
| Code | Meaning | What to do |
|---|---|---|
190 | Access token expired, revoked or invalid | Get a new token; read the subcode for why |
102 | API session error | Same handling as an OAuthException |
1 | Unknown error, possibly temporary downtime | Retry later; if it persists, check the endpoint exists |
2 | Service temporarily unavailable | Retry later |
3 | App lacks the capability for this method | Check the app's permissions and features |
10 | Permission not granted or removed | Ask for the permission again |
200-299 | Permission error (varies by permission) | Handle the missing permission |
4 / 17 / 32 / 613 | Rate limited (app, user, Pages, custom) | Back off and retry; see the rate-limit section |
341 | Application limit reached | Retry later or send fewer requests |
368 | Temporarily blocked for policy violations | Wait, then retry |
506 | Duplicate post | Change the content; identical back-to-back posts are refused |
1609005 | Error posting link | The link could not be scraped; check the URL and retry |
What do the code 190 access token subcodes mean?
Code 190 always means the token cannot be used. The subcode decides whether your app can fix it alone or the person has to act. Meta lists seven authentication subcodes, and the Pages API adds an eighth.
| 190 + subcode | Name | What to do |
|---|---|---|
458 | App not installed: the user never logged in to your app or removed it | Send them through login again |
459 | User checkpointed | They must log in at facebook.com to clear the checkpoint |
460 | Password changed | Old tokens are dead; they must log in to your app again |
463 | Expired | Reconnect the account to get a fresh token |
464 | Unconfirmed user | They must log in at facebook.com to confirm the account |
467 | Invalid access token (expired, revoked or malformed) | Reconnect; check you are not mixing tokens between apps |
492 | Invalid session: the token's user has no suitable role on the Page | A Page admin has to give that person a role |
2069032 | A Page access token is required for this call | Swap the user token for a Page token; no reconnect needed |
Only 2069032 is a bug in your code. The rest are account state, so retrying the same request never helps. The Instagram API error 190 guide covers the same code on the Instagram side, and how to get a Facebook Page access token covers the exchange that fixes 2069032.
What do the code 200 permission subcodes mean?
From the Pages API error reference:
| Code + subcode | Message | What to do |
|---|---|---|
200 / 2069030 | This endpoint is not supported. | Check the endpoint against the current Graph API version |
200 / 2069031 | This field is not supported. | Remove the field from the request |
200 / 2069033 | The corresponding UI feature of this API is deprecated or not available. | The feature is gone in Facebook itself; drop it |
1 / 2853006 | Viewer doesn't have permission to perform this action. | A Page admin has to grant the person access |
What does Facebook error code 100, subcode 33 mean?
Code 100 is an invalid parameter. With subcode 33 the message reads "Unsupported get request. Object with ID ... does not exist, cannot be loaded due to missing permissions, or does not support this operation." Meta documents it in the Messenger Platform reference, and the same message comes back from other Graph API object reads, Instagram included.
Three causes, in the order worth checking:
- The ID is wrong: a typo, an ID from another app, or an object that was deleted.
- The token cannot see the object: a user token reading a Page object, or a Page token missing the permission the edge needs.
- The object exists but does not support that edge or field.
On Instagram the same pair often appears right after creating a media container, when the object is not readable yet. The code 100, subcode 33 deep dive walks through that case.
Which error codes mean you hit a rate limit?
The rate-limiting reference splits limits into Platform limits and Business Use Case (BUC) limits. If both could apply, BUC limits take precedence.
| Code | Which limit | Where to watch usage |
|---|---|---|
4 | The app behind the token hit its limit | X-App-Usage header |
17 | The user behind the token hit their limit | X-App-Usage header |
32 | Pages API call made with a user token hit its limit | X-App-Usage / X-Business-Use-Case-Usage |
613 | A custom rate limit for that API | The specific API's docs |
613 / 1996 | Request volume looks inconsistent after recent changes | Smooth out bursts |
80001 | Page calls with a Page or system user token (BUC) | X-Business-Use-Case-Usage header |
All of these are retryable, but only after a wait. Retrying at once keeps the counter high. The Facebook API rate limit guide explains how the usage headers count down.
Which error codes block Page insights and boosting?
The Pages API reference lists these as standalone numbers. None of them is a broken integration: the post or Page simply does not qualify.
2874008: Page insights need at least 100 Page followers.2932001: the post must be public.2932003: on a shared post, only the owner of the original post gets insights or can boost.2932004: you must be the creator of the post.2932005: someone tagged your Page; only the post's creator has insights.2932006/2932007: profile-picture and cover-photo posts never have insights. Add the photo to a new post instead.2932009: live videos are not supported.2932010: the info is not available right now for this post.
Which Messenger error subcodes come up most?
If your integration also replies in the Page inbox, these are the ones from the Messenger reference:
| Code + subcode | Meaning | What to do |
|---|---|---|
10 / 2534022 | Message sent outside the allowed window (24 hours after the customer's last message) | Wait for the customer to write again |
10 / 1893063 | Page temporarily restricted from sending messages | Stop sending; review Messaging Policies |
551 | This person isn't receiving messages from you right now | Do not retry; the user blocked the Page |
613 / 2534040 | Calls to this API exceeded the rate limit | Pause and retry later |
200 / 2018028 | Can't message non-testers until pages_messaging is approved | Finish App Review and set the app live |
How should your code branch on code and subcode?
Sort every error into one of five outcomes, because each one needs a different owner:
- Reconnect (190 with 458, 460, 463, 467; 190 with no subcode): stop retrying, mark the account as disconnected, and ask the person to log in again.
- Person must act on Facebook (190 with 459, 464; 492; 1/2853006): show
error_user_msgif present and wait. - Your code is wrong (190/2069032, 200/2069030, 200/2069031, 100/33): alert your team; retrying the same request fails the same way.
- Retry later (1, 2, 4, 17, 32, 341, 368, 613): back off with jitter and cap the attempts.
- Change the content (506, 1609005): edit the post or fix the link before trying again.
Branch on code first and use error_subcode only to refine. Meta adds subcodes without much notice, so an unknown subcode should fall back to the handling of its code, not crash the job.
This sorting is the part most teams rebuild for every network. In PostGate, an authorization failure during publishing moves that destination to awaiting_reconnect and fires a profile.reauth_required webhook with reason publish_auth_error, so you handle one event instead of a list of Meta subcodes.
Frequently asked questions
What is error_subcode in the Facebook Graph API?
It is a second number in the error object that narrows the top-level code to a specific cause. Code 190 says the token is unusable; subcode 463 says it expired and 460 says the password changed. Not every error carries a subcode.
What does Facebook error code 190 with subcode 463 mean?
The access token expired. It is the ordinary case: retrying will not help, so reconnect the account to get a new token. If you see 460 instead, the person changed their password and every older token for them is dead.
What does Facebook error code 100 subcode 33 mean?
The object ID you requested does not exist, cannot be loaded with your token's permissions, or does not support that operation. Check the ID first, then which token you used, then whether the edge exists for that object type.
What does Facebook error code 368 mean?
The action was temporarily blocked for policy violations. Meta's guide says to wait and retry. If it keeps happening on the same content, the content itself is the likely trigger.
Where is the official list of Facebook Graph API error codes?
There is no single list. Auth subcodes are in the Graph API error-handling guide, Page subcodes in the Pages API error codes page, rate limits in the rate-limiting reference and inbox errors in the Messenger Platform error codes.
