Back to blog
Instagram Graph APITroubleshootingError CodesMeta Permissions

Instagram API errors 1545133, 2534037, 2534041, and 2534014: what they actually mean and how to fix them

Most guides mix up Meta's Instagram Messaging API subcodes. Here is what 1545133, 2534037, 2534041, 2534014, 1545041, and OAuth code 190 actually mean in your error logs.

By RapidDM·Reviewed by RapidDM Engineering·Published ·Updated ·Last verified ·12 min read

If you search online for Instagram Graph API error subcodes, half the troubleshooting posts you find have the numbers backwards. You will see guides blaming recipient privacy settings for 2534037 when 2534037 is actually a thread-ownership error, or blaming the 24-hour window for 2534014 when 2534014 means you passed the wrong user ID format.

When your Instagram DM automation stops sending even though your account looks connected, you need the exact error mapping from Meta's official Instagram Messaging Send API reference. Below is what subcodes 1545133, 2534041, 2534037, 2534014, 1545041, and 190 actually mean in production logs, distinguishing between publicly documented Meta error subcodes (2534xxx / 190) and platform-observed or community-reported subcodes (1545133, 1545041).

Quick reference: Meta Instagram messaging error subcodes

Code / subcodeDocumentation status & API messageActual causeFix
200 / 2534041Public Meta Doc: The account owner has disabled access to instagram direct messages"Allow access to messages" under Connected tools is turned off in the Instagram mobile appToggle ON in IG mobile app
2 (or 10) / 1545133Platform-Observed: Service temporarily unavailable (message rejected)Sending buttons, cards, or quick replies to a non-follower before they reply, or Connected tools out of syncSend plain text first; check mobile toggle
100 / 2534037Public Meta Doc: The action is invalid since it's not the thread ownerAnother app or Meta Business Suite Inbox owns the conversation thread under Conversation RoutingSet Default App in Page Settings
100 / 2534014Public Meta Doc: No matching Instagram userRequest used a standard IG User ID instead of an Instagram-scoped ID (IGSID), or no DM thread exists yetUse IGSID or comment_id Private Reply
10 / 2534022Public Meta Doc: This message is sent outside of allowed windowMore than 24 hours have passed since the user last sent a DM or tapped a buttonWait for user reply to reopen window
551 (or 200) / 1545041Platform-Observed: This person isn't available right now / isn't receiving messagesRecipient blocked business messages, turned off message requests, or is restricted by age/region rulesDo not retry; post public comment reply
190 / 460 (OAuth)Public Meta Doc: Error validating access token: Session invalidatedPassword changed, 2FA updated, or account switched from Professional to PersonalReconnect account via OAuth

1. Error 2534041 and 1545133: "Allow access to messages" vs. non-follower button blocks

These two subcodes get lumped together in forum threads, but they have different documentation profiles and root causes.

When "Allow access to messages" is turned off (200 / 2534041 - Publicly Documented)

Even after you approve every permission screen during Meta OAuth login, Instagram keeps a separate privacy switch inside the mobile app under Connected tools. When that switch is off, Meta still sends comment webhooks to your server, but rejects outbound DM calls with code: 200, error_subcode: 2534041 (The account owner has disabled access to instagram direct messages) or a code: 10 permission error.

To turn it back on:

  1. Open the Instagram mobile app on your phone. Do not use instagram.com on a laptop, because the web settings menu hides this toggle on most accounts.
  2. Tap your profile picture in the bottom-right corner, then tap the three horizontal lines in the top-right corner to open Settings and activity.
  3. Scroll down to How others can interact with you and tap Messages and story replies.
  4. Tap Message controls.
  5. Scroll to the Connected tools section at the bottom and turn on Allow access to messages.

If the switch was already on and you still see permission errors, toggle it off, wait ten seconds, and toggle it back on. Meta's permission cache occasionally desyncs after an account switches between Creator and Business modes.

Why 1545133 fires when sending buttons or cards to non-followers (Platform-Observed Subcode)

Documentation Note: Unlike the 2534xxx subcodes listed in Meta's public Send API documentation table, 1545133 is not formally documented in Meta's public developer reference. It is a platform-observed and community-reported internal Graph API error subcode returned alongside HTTP 400 and code: 2 (Service temporarily unavailable) or code: 10.

Despite the generic "Service temporarily unavailable" text, Meta is usually not experiencing a global server outage when 1545133 appears on specific recipients. In production logs, Instagram restricts sending structured templates (button templates, generic template cards, carousels, and quick replies) in a first message or Private Reply to a user who does not follow your account. Depending on the endpoint version, Meta either rejects the request with error_subcode: 1545133 or accepts the request and renders a blank message bubble on the recipient's phone.

How to fix 1545133 in your flows:

  • If your first Private Reply to a comment includes buttons and fails with 1545133, fall back to sending a plain-text Private Reply first (for example: "Hey! Reply with the word LINK and I'll send the guide right over").
  • Once the user replies to that plain-text message, Meta opens a standard 24-hour DM conversation where button templates, 10-card product carousels, and voice notes deliver normally even if they haven't followed you yet.
  • If 1545133 happens on every single message including plain text, check the Connected tools → Allow access to messages toggle on mobile as described above.

2. Error 100 / 2534037: "The action is invalid since it's not the thread owner"

Many blog posts falsely claim that 2534037 means the recipient has privacy restrictions. Meta's official Send API documentation is explicit:

{
  "error": {
    "message": "(#100) The action is invalid since it's not the thread owner.",
    "type": "OAuthException",
    "code": 100,
    "error_subcode": 2534037
  }
}

Meta migrated Instagram away from the old Messenger Handover Protocol to Conversation Routing. Under Conversation Routing, only one application (or the Meta Business Suite Inbox) owns an active conversation thread at a time.

You will hit 2534037 in three situations:

  1. Leftover automation tools: You previously connected ManyChat, LinkDM, GoHighLevel, or a support desk to the same Instagram account. That other app still holds thread ownership or is set as the Default Routing App on your Facebook Page.
  2. Replying to standby webhooks: If your app is not the current thread owner, Meta delivers incoming messages to your webhook on the standby array instead of the messaging array. If your worker blindly parses standby events and calls POST /messages, Meta rejects the call with 2534037.
  3. Human inbox takeover: A team member replied or took control of the thread inside Meta Business Suite Inbox, shifting thread ownership away from your automation app for 24 hours.

How to fix 2534037

  1. Assign your Default Application in Facebook Page Settings: Log into Facebook and switch into the profile of the Facebook Page linked to your Instagram account. Go to Settings → Page Setup → Instagram Conversation Routing (or Advanced Messaging) and set your current automation app as the Default Application. Make sure Allow this app to take control of conversations is enabled.
  2. Revoke old competing apps: Query GET /<PAGE_ID>/subscribed_apps via the Graph API or check Facebook Settings → Business Integrations and Instagram Settings → Website Permissions → Apps and Websites. Remove any old chatbot tools you no longer use.
  3. Request or take thread control via API: If you run a custom integration alongside a human helpdesk, only respond to active messaging events, or call the Conversation Control API (take_thread_control or request_thread_control) before dispatching a message.

3. Error 100 / 2534014 vs. 10 / 2534022: User ID errors vs. 24-hour window blocks

Developers frequently confuse 2534014 and 2534022. Here is the actual difference:

Subcode 2534014 (code: 100): "No matching Instagram user"

Meta returns 100 / 2534014 when it cannot resolve the recipient ID you sent in recipient.id:

  • Wrong ID type: You passed a public Instagram numeric user ID, a Facebook Page-scoped ID (PSID), or a comment ID inside recipient.id. Standard DM calls require an Instagram-scoped ID (IGSID) generated specifically for your business account.
  • No existing DM thread: When someone comments on your Reel for the first time, you cannot send them a standard DM using recipient: { id: "<IGSID>" } until they have messaged your inbox or replied to a Private Reply. Your first outbound message to a commenter must use recipient: { comment_id: "<COMMENT_ID>" }.
  • Mismatched Page / IG token: If you call the endpoint using an access token for Account A while passing an IGSID belonging to Account B, Meta returns 2534014 (or 100 / 2534013 if the Facebook Page isn't linked to an Instagram Professional account).

Subcode 2534022 (code: 10): "This message is sent outside of allowed window"

Meta returns 10 / 2534022 when you have a valid IGSID, but the 24-hour standard messaging window has closed (or never opened):

User actionWindow opened by MetaWhat your automation can send
User comments on your post, Reel, or Ad7-day Private Reply window (single message)1 Private Reply referencing comment_id. Does NOT open the 24-hour DM window yet.
User comments on an Instagram Live broadcastActive Live broadcast duration only1 Private Reply referencing comment_id while the Live stream is still running.
User replies to your DM, taps a button/quick reply, or replies to a Story24-hour standard messaging windowMulti-message sequences, links, voice notes, 10-card carousels, and reminders for 24 hours.

Two rules keep 2534022 out of your logs:

  1. Never schedule a second DM right after a comment trigger unless the user clicks a button or replies first. Sending a Private Reply via comment_id does not open the 24-hour window. If you try to send a second message 10 seconds later without user interaction, Meta blocks it.
  2. Keep timed follow-up reminders under 23 hours. If a lead taps your "Send me the link" button at 3:00 PM Tuesday, schedule your follow-up nudge for 4 to 18 hours later, before the 24-hour clock runs out at 3:00 PM Wednesday.

4. Error 551 / 1545041: When a recipient actually blocks or restricts messages

When an individual user cannot receive your DM because of their own account settings, Meta returns Code 551 (or 200) with Subcode 1545041 (Message Not Sent: This person isn't available right now / This person isn't receiving messages from you right now), or Code 10, Subcode 2018108 (They can't receive your messages right now).

This happens on some comments on a high-volume Reel when:

  • The commenter turned off incoming message requests under Settings → Messages and story replies → Message controls → Other people on Instagram → Don't receive requests.
  • The commenter's account is subject to minor-protection messaging restrictions in the EU, UK, or US and does not follow your account.
  • The user blocked your business account or deactivated their profile after commenting.

Do not retry 1545041 in your queue. Instead, configure your campaign to post a public comment reply telling the user: "Just sent it to your DMs! If you don't see it in Message Requests, DM me the word GUIDE directly." When the user messages your inbox first, Meta opens the conversation regardless of their cold-request filter.


5. Fixing OAuthException Code 190 and Subcode 2534077

If your automations worked for months and suddenly failed across every post overnight, check for two authentication errors:

  • OAuthException Code 190 (Subcodes 460, 458, 490): Your access token was invalidated because you changed your Instagram or Facebook password (460), revoked the app under Apps and Websites (458), or switched your Instagram account from Creator / Business back to a Personal account.
  • Code 10, Subcode 2534077 (Cannot verify the connection between the IG account, the logged in user and the page): The link between your Facebook Page and Instagram Professional account broke, or the admin who authenticated the app now requires two-factor authentication (2FA) to manage the Page.

To fix either one, log into your RapidDM dashboard, open Connected Accounts, and click Reconnect. Re-authenticating refreshes your token in a few seconds without touching your saved post campaigns or keywords.

Common questions

Frequently asked questions

What actually causes Instagram API error subcode 1545133?

Unlike subcodes in the 2534xxx range, 1545133 is a platform-observed and community-reported internal Meta error subcode (often returned with code 2 'Service temporarily unavailable' or code 10) rather than a publicly listed row in Meta's standard Send API error table. In production logs, it most commonly appears when an outbound payload with interactive buttons, cards, or quick replies is rejected for a non-follower before they reply, or when Connected Tools message access is out of sync.

Which error code means 'Allow access to messages' is turned off?

Meta's official error for a disabled Connected Tools toggle is code 200 with error_subcode 2534041 ('The account owner has disabled access to instagram direct messages'). To fix it, open the Instagram mobile app, go to Settings and activity → Messages and story replies → Message controls → Connected tools, and turn on 'Allow access to messages'.

What is Instagram error code 100, subcode 2534037?

Error 100 with subcode 2534037 ('The action is invalid since it's not the thread owner') is a Conversation Routing conflict. Another connected app or the Meta Business Suite Inbox currently owns the conversation thread, or your server tried to reply to a standby webhook event. Set your automation tool as the Default Application under Facebook Page Settings → Page Setup → Instagram Conversation Routing.

What is the difference between subcode 2534014 and 2534022?

Subcode 2534014 (code 100) means 'No matching Instagram user', which happens when you pass a regular Instagram user ID instead of an Instagram-scoped ID (IGSID) or try to message a user who has no existing thread with your business. Subcode 2534022 (code 10) means 'This message is sent outside of allowed window', which fires when the 24-hour messaging window has closed.

Keep reading

Related articles

All articles