Skip to content
DMpop

Instagram API errors

Error codes.Retry or not.

Instagram API errors come back as error.code plus error_subcode. For private replies and DMs: 10/2534022 is outside the window, 100/2534025 is a comment that can't get a private reply (usually one was already sent), 551 is a person you can't message, 190 is the token, and 4, 17, 613, 80002 are rate limits. Codes 1 and 2 mean the DM may have gone out.

Updated

Graph API · error response
{  "error": {    "message": "This message is sent outside of allowed window.",    "type": "OAuthException",    "code": 10,    "error_subcode": 2534022,    "fbtrace_id": "A1b2C3..."  }}

Instagram private reply API errors, code by code

Every errorwe handle.

Meta's exact message text, what it means, whether a retry can work, and the fix. Only codes Meta documents or DMpop's sender handles explicitly.

Instagram messaging and private reply API errors
Code · subcodeMessageWhat it meansRetry?Fix
10 · 2534022“This message is sent outside of allowed window.”The window closed. A private reply more than 7 days after the comment, or a message more than 24 hours after the person last acted.NoNothing to fix for that message. Answer comments sooner; open a chat with a button. See messaging windows.
100 · 2534025“The comment is invalid for a private reply”Meta's note: check the data you're sending is allowed in a private reply. What we see most: the comment's one private reply was already used, by another tool, a second campaign or an earlier attempt.NoOne tool and one campaign per post. Store the comment ID before you send, so a retry never fires a second private reply.
551“This person isn't receiving messages from you right now.”The person can't be messaged by you at the moment.NoNothing on your side. A public comment reply still reaches them.
551 · 1545041“This person isn't available right now.”Meta gives no detail. We see it with deactivated or unreachable accounts.NoLog it and move on.
10 · 2018108“They can't receive your messages right now.”The recipient can't receive your message. Meta gives no further detail.NoLog it and move on.
No code in Meta's table“The requested user cannot be found”Instagram couldn't find someone to deliver to. Often a deactivated or deleted account.NoNothing to fix. We handle it like the two rows above.
100 · 2534014“No matching Instagram user”The recipient ID isn't a valid Instagram-scoped ID (IGSID). Instagram user IDs aren't accepted.NoUse sender.id from the webhook, or recipient.comment_id for a private reply.
100 · 33“Unsupported get request. Object with ID … does not exist…”The ID doesn't exist, you lack permission for it, or the call doesn't apply to it. A deleted comment or media looks like this.NoCheck the ID and the token's permissions.
10Permission deniedA permission isn't granted, or was removed.NoRequest the permission (and Advanced Access for other people's accounts). See permissions.
200 · 2534041“The account owner has disabled access to instagram direct messages.”The professional account owner revoked your app's access to messages.NoAsk them to allow access again and reconnect.
190“Invalid OAuth access token.”The token expired, was revoked, or the person removed your app.After reconnectingRefresh long-lived tokens before 60 days. If revoked, the account must log in again.
10 · 1893063“You are temporarily restricted from sending messages.”The account is restricted for activity that doesn't follow Meta's messaging policies.NoStop sending and review what you send and to whom.
100 · 2534029“The business has been blocked from sending messages via the IG Messaging API”Blocked for a policy violation.NoFix the violation first. Meta: check you don't have any policy violations.
4“Application request limit reached.”Your app hit its rate limit.Yes, laterPause until usage drops. Watch the X-App-Usage header.
17User request limit reachedThis user's token hit its rate limit.Yes, laterWait and retry; look at your request volume.
613 · 2534040“Calls to this api have exceeded the rate limit.”Rate limit on the messaging API.Yes, laterPause API calls and try again later.
80002Instagram rate limitInstagram's business use case limit for non-messaging calls (comments, media).Yes, laterRead estimated_time_to_regain_access in the X-Business-Use-Case-Usage header.
368Temporarily blocked for policies violationsMeta: wait and retry. We see it on the comments API when it's read too often.Yes, laterBack off. Use webhooks first and keep any polling small.
1“An unknown error occurred.”Meta: can be temporary, or caused by missing permissions. On sends, we've seen it returned after the DM was delivered.Not for sendsTreat the outcome as unknown. Mark the comment handled, then check the inbox.
2 · HTTP 5xx“An unexpected error has occurred. Please retry your request later.”Meta: a temporary issue, or the person blocked your business. A 5xx is a server error.Reads yes, sends carefullyRetry reads. For a private reply, treat the outcome as unknown, like code 1.

Codes and messages from Meta's Messenger Platform error codes, Graph API error handling and rate limiting pages, checked 9 November 2026. Meta's pages don't give a cause for every message; where they don't, “we see” marks what we observe running DMpop. DMpop is not affiliated with Meta or Instagram.

Instagram API error handling: when to retry

Three answers.Not two.

Most error handling sorts failures into retry and don't-retry. For private replies you need a third bucket: maybe delivered.

Node · sort a failed send
// What to do with a failed send to /<IG_ID>/messages.// "rejected": Meta refused it, nothing was delivered.// "unknown":  it may have been delivered. Don't resend blindly.const RATE_LIMIT = new Set([4, 17, 368, 613, 80002]);const REJECTED = new Set([10, 100, 190, 200, 551]);function classify(status, body) {  const code = body?.error?.code;  if (RATE_LIMIT.has(code)) return "retry-later";      // back off, then retry  if (code === 190) return "reconnect";                // token expired or revoked  if (REJECTED.has(code)) return "rejected";           // log it, don't retry  if (code === 1 || code === 2 || status >= 500) return "unknown";  return "rejected";}// A private reply can be used once. If the outcome is "unknown",// mark the comment as handled and check the inbox; a retry either// fails with 2534025 or, if the first one never landed, sends now.

Rejected: log it, move on

Codes 10, 100, 200 and 551 are Meta saying no. Nothing was delivered, and the same request will fail again. Retrying a private reply after 2534025 just burns a call. One more trap: don't “fall back” to a plain-text send after a window or private-reply error. It fails too, and the second error hides the first.

Rate limited: wait, then retry

Codes 4, 17, 613, 80002, and 368 on the comments API. Back off and retry. For private replies there's also Meta's documented 750 an hour per account; DMpop queues past it and retries every 30 minutes, up to 3 times. Details on Instagram DM limits.

Unknown: maybe delivered

Codes 1, 2 and HTTP 5xx on a send. The request might have worked. Since a comment allows exactly one private reply, a blind retry is never safe: it either fails or sends the same DM twice.

What we see in practice

The code 1that delivered.

Running DMpop, we've seen Meta answer a send to /<IG_ID>/messages with a generic code 1 OAuthException after the DM had reached the person. In one case, the person tapped the DM's button 30 seconds after our sender had marked it failed.

Treating that as a normal failure is costly twice. The job retries, and each retry is another copy in the same inbox. And a polling fallback that looks for “comments we haven't answered” keeps finding it. Together, that can send one person the same DM many times.

So DMpop:

  • Claims each comment in the database before calling Meta, so two workers can't both send.
  • Marks a code 1, code 2 or 5xx send as “delivery unconfirmed” and stops retrying it.
  • Counts unconfirmed as handled, so the polling sweep skips it.
  • Retries only sends Meta clearly rejected, where nothing can have arrived, and caps each comment at 3 send attempts.

The trade-off is deliberate: if a code 1 really did fail, that person gets no DM and can comment again. That's better than spamming someone who already has it.

Related pages

Not a developer?Start here.

This page is for people calling Meta's API. If you use a comment-to-DM tool and want to know why someone didn't get the DM, auto DM not sending walks through the causes in plain words. The shorter error list on Instagram comment to DM API covers the errors DMpop's own REST API returns.

Errors before you even get a comment? See comment webhooks not working. On DMpop, Instagram's refusals show as Failed in the DM log with Instagram's own message under the label.

Questions

Error questions,answered.

What does Instagram API error code 10, subcode 2534022 mean?

'This message is sent outside of allowed window.' The message went out after the window closed: a private reply more than 7 days after the comment, or a normal message more than 24 hours after the person's last message or action. Don't retry; it can't succeed until they message again.

What does 'The comment is invalid for a private reply' mean?

It's code 100, subcode 2534025. Meta's error table says to check that the data you're sending is allowed in a private reply. In practice the usual cause is that the comment's one private reply was already used, by another tool, a second campaign or an earlier attempt. That comment can't get another one.

What is Instagram API error 551?

A user block error: 'This person isn't receiving messages from you right now.' With subcode 1545041 it reads 'This person isn't available right now.' Nothing your app can fix. Log it and don't retry.

Should I retry Instagram API error code 1?

Not for a send. Meta's docs call code 1 an unknown error that may be temporary, but on /messages we've seen it come back after the DM had actually reached the person. Retrying a private reply then either fails or sends a duplicate. Mark it as uncertain and check the inbox.

Which Instagram API errors are rate limits?

Code 4 (app limit), 17 (user limit), 613 (custom rate limit; 2534040 on the messaging API) and 80002 (Instagram's business use case limit). Code 368 is listed by Meta as a temporary block with 'wait and retry'; we see it on the comments API under heavy reads. Back off, then retry.

What does error 190 mean on the Instagram API?

The access token is invalid: expired, revoked, or the person removed your app. Long-lived Instagram tokens last 60 days and can be refreshed once they're 24 hours old. If the person revoked access, they must log in again.

Where is the official list of Instagram API error codes?

Three Meta pages: the Messenger Platform 'Common Error Codes' table (most messaging and private reply errors, including 2534022 and 2534025), the Graph API error handling guide (1, 2, 4, 10, 17, 190, 200, 368), and the Instagram Platform error codes page, which mostly covers content publishing (2207xxx subcodes).

API on every plan

Fewer errorsto handle.

DMpop sorts Meta's errors, queues rate limits and never double-sends a private reply. Create campaigns from your code on any plan: Free sends 1,000 DMs a month, paid plans start at ₹99.