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.
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 / subcode | Documentation status & API message | Actual cause | Fix |
|---|---|---|---|
| 200 / 2534041 | Public 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 app | Toggle ON in IG mobile app |
| 2 (or 10) / 1545133 | Platform-Observed: Service temporarily unavailable (message rejected) | Sending buttons, cards, or quick replies to a non-follower before they reply, or Connected tools out of sync | Send plain text first; check mobile toggle |
| 100 / 2534037 | Public Meta Doc: The action is invalid since it's not the thread owner | Another app or Meta Business Suite Inbox owns the conversation thread under Conversation Routing | Set Default App in Page Settings |
| 100 / 2534014 | Public Meta Doc: No matching Instagram user | Request used a standard IG User ID instead of an Instagram-scoped ID (IGSID), or no DM thread exists yet | Use IGSID or comment_id Private Reply |
| 10 / 2534022 | Public Meta Doc: This message is sent outside of allowed window | More than 24 hours have passed since the user last sent a DM or tapped a button | Wait for user reply to reopen window |
| 551 (or 200) / 1545041 | Platform-Observed: This person isn't available right now / isn't receiving messages | Recipient blocked business messages, turned off message requests, or is restricted by age/region rules | Do not retry; post public comment reply |
| 190 / 460 (OAuth) | Public Meta Doc: Error validating access token: Session invalidated | Password changed, 2FA updated, or account switched from Professional to Personal | Reconnect 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:
- Open the Instagram mobile app on your phone. Do not use
instagram.comon a laptop, because the web settings menu hides this toggle on most accounts. - 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.
- Scroll down to How others can interact with you and tap Messages and story replies.
- Tap Message controls.
- 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
2534xxxsubcodes listed in Meta's public Send API documentation table,1545133is not formally documented in Meta's public developer reference. It is a platform-observed and community-reported internal Graph API error subcode returned alongside HTTP400andcode: 2(Service temporarily unavailable) orcode: 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
1545133happens 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:
- 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.
- Replying to
standbywebhooks: If your app is not the current thread owner, Meta delivers incoming messages to your webhook on thestandbyarray instead of themessagingarray. If your worker blindly parsesstandbyevents and callsPOST /messages, Meta rejects the call with2534037. - 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
- 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.
- Revoke old competing apps: Query
GET /<PAGE_ID>/subscribed_appsvia 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. - Request or take thread control via API: If you run a custom integration alongside a human helpdesk, only respond to active
messagingevents, or call the Conversation Control API (take_thread_controlorrequest_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 userecipient: { comment_id: "<COMMENT_ID>" }. - Mismatched Page / IG token: If you call the endpoint using an access token for Account A while passing an
IGSIDbelonging to Account B, Meta returns2534014(or100 / 2534013if 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 action | Window opened by Meta | What your automation can send |
|---|---|---|
| User comments on your post, Reel, or Ad | 7-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 broadcast | Active Live broadcast duration only | 1 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 Story | 24-hour standard messaging window | Multi-message sequences, links, voice notes, 10-card carousels, and reminders for 24 hours. |
Two rules keep 2534022 out of your logs:
- 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_iddoes not open the 24-hour window. If you try to send a second message 10 seconds later without user interaction, Meta blocks it. - 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:
OAuthExceptionCode190(Subcodes460,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, Subcode2534077(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
Instagram API errors 2534022, 2534025, and 10900: fixing Private Reply and 24-hour window failures
Why Meta Graph API returns subcode 2534022 (outside allowed window), 2534025 (invalid comment for private reply), and error 10900 (already replied) on Instagram.
Instagram Comment-to-DM Not Working? 9 Fixes to Try (2026)
Instagram comment-to-DM automation not sending? Walk through 9 diagnostic fixes for Connected Tools toggles, self-comment tests, duplicate rules, and API limits.
Instagram DM Limits: 24-Hour Window, Private Replies & Follow-Ups (2026)
Complete 2026 reference for Instagram DM limits: the 24-hour messaging window, 7-day comment Private Replies, 200 DMs/hour API rate limits, and follow-up rules.