Free Tool
Look up what a WhatsApp, Instagram, or Messenger Graph API error code actually means and whether retrying will fix it. Sourced from real production error-handling logic, not just Meta's sparse public docs.
Code 230
What it means: Meta is rejecting the send because the page access token does not have the pages_messaging permission, or that permission was revoked (commonly after a Page admin removes app access, or the app review/permission grant expires).
What to do: Reconnect the Page in Meta Business Suite, re-grant pages_messaging during the OAuth flow, and re-authorize the integration. Retrying the same request will not fix this -- the token itself is missing the scope.
Code 551
What it means: The recipient is unreachable on Messenger/Instagram for this send -- usually because they've blocked the page, deactivated their account, or Meta is rate-limiting sends to that specific user for spam-prevention reasons.
What to do: Don't retry. Mark the conversation as undeliverable and stop further automated sends to that contact -- retrying just burns your sending reputation without succeeding.
Code 190
What it means: The long-lived Page or User access token used to call the Graph API has expired, was revoked, or never matched the requested permission scope ("Error validating access token: Session has expired…").
What to do: Re-run the OAuth connection flow for that channel. Long-lived Page tokens typically last ~60 days and need silent refresh before expiry -- if you see this in bulk, your token-refresh cron likely stopped running.
Code 100 · Subcode 33
What it means: Two different real causes share this code: (1) the PSID (person-scoped ID) you're trying to message isn't addressable from this Page token -- a permanent, per-user limitation, not a bug; (2) calling the Profile API (GET /{psid}) instead of the Conversations API to resolve a sender's name, which several Page tokens simply don't have the capability for.
What to do: For messaging: there's no fix for that specific PSID/token pair -- it's a Meta-side addressability limit, log it at debug level and move on. For name resolution: switch from GET /{psid} to GET /{page_id}/conversations?fields=participants and read the name from the participants list instead.
Code 3 · Subcode 33
What it means: Your app's current permission grant for this Page doesn't include the capability the endpoint requires -- frequently seen on the Profile API after a Page reconnects via the Instagram Direct flow instead of the Facebook Page flow.
What to do: Reconnect the integration using the correct OAuth flow for the platform (Page-based, not Instagram-direct) so the app is granted the full capability set, then retry.
Code 1 · Subcode 1446036
What it means: You tried to hide/moderate a comment that's already hidden -- typically because two ingestion paths (a webhook delivery and a retry cron) raced on the same comment and both tried to act on it.
What to do: Treat this as an idempotent success, not an error: the desired end state (hidden) is already achieved. Log it and move on -- no remediation needed.
Code 429
What it means: You've exceeded Meta's call volume limit for this app or endpoint in the current window.
What to do: Back off and retry with exponential delay. If this is frequent, check whether you're polling instead of using webhooks, or whether multiple processes are hitting the same endpoint redundantly.
Tired of decoding Meta errors yourself?
Terminal errors get flagged and stopped. Retryable ones get retried with backoff. No manual log-reading.