Instagram error 2534022:
one subcode, two different problems
Meta returns this with the message "outside allowed window", which is accurate in one situation and actively misleading in the other. Telling them apart decides whether you wait for the user to reply or stop trying that person forever.
The short answer
Error code 10 with subcode 2534022 means one of two things. On a follow-up message in an existing thread, the 24-hour messaging window has expired and only a new message from that person will reopen it. On a first private reply to a comment, it does not mean a window expired — a private reply has no window — it means the recipient's Instagram privacy settings block message requests from accounts they don't follow. That second case is permanent: retrying never succeeds.
- automated replies sent on Instagram and Facebook
- 407,105
- median time from a comment to the DM
- 2.8 s
Reachlee platform data for 28 Sep – 28 Oct 2026, across every Instagram account and Facebook Page on Reachlee (test accounts excluded). Totals marked "today" are as of 28 October 2026. Refreshed every month.
Which of the two you have
| Where it fired | What it actually means | Recoverable? | Correct response |
|---|---|---|---|
| First private reply to a comment | Recipient's privacy settings block message requests from non-followed accounts | No — permanent for that person | Record as skipped, keep the comment claimed, never retry |
| Follow-up DM in an existing thread | The 24-hour messaging window has expired | Only if the user messages you again | Stop sending; nothing you do reopens it |
| Second message right after a private reply | There was never a window — a private reply doesn't open one | No, by design | Redesign the funnel: the first DM must earn a reply |
The distinction matters because the two cases call for opposite handling. Treating the private-reply case as retryable burns rate-limit budget against a permanent wall, and reporting it as a failure makes a healthy account look broken.
Why the error text misleads
Meta's message for this subcode refers to being outside an allowed window, and on a follow-up DM that is exactly right. The problem is that the same subcode is returned when you attempt a first private reply to someone whose privacy settings refuse message requests, and in that situation there is no window involved at all. A private reply is a one-shot grant attached to a comment, valid for 7 days from the comment's creation; it has no 24-hour clock to fall outside of. So a developer reading the message reasonably concludes they sent too late, adds a retry, schedules it sooner, and none of it helps — because the constraint was never timing. In our September 2026 audit of a full day of production send attempts, every 2534022 on a first private reply behaved as a permanent recipient-side rejection. That's the finding worth taking away: read the call site, not the message text.
- The subcode is overloaded across two unrelated failure causes
- A private reply has no 24-hour window, so 'outside the window' cannot describe it
- Retries, earlier scheduling and backoff all fail to fix the recipient-side case
- The call site — first private reply versus follow-up — is the only reliable discriminator
How to handle it in code
Classify by call site first, then act. For a first private reply, treat 2534022 as terminal: mark the run skipped with a specific reason such as recipient blocks message requests, keep the comment recorded as claimed so no future sweep re-attempts it, and exclude the error from any throttle or circuit-breaker signal, because a recipient-side rejection says nothing about your account's standing. That last point matters more than it sounds: if permanent per-recipient rejections feed your breaker, a post with a normal share of privacy-restricted commenters will trip protections you didn't need. For a follow-up DM, stop the sequence and wait for an inbound message, because no API call reopens the window. Reachlee keeps 2534022 in a set of send-rejected subcodes that never feed the throttle breaker, and records it as a skip rather than a failure. It does watch each account's share of them separately, because a sudden majority is the one time this subcode is about the account (next section).
- Terminal on first private reply: skip with a reason, keep the comment claimed, do not retry
- Exclude from throttle and breaker signals — it reflects the recipient, not your account
- On a follow-up: stop the sequence; only an inbound message restores sending
- Report as a skip, not a failure, so delivery metrics stay honest
- Expect it continuously at a low rate rather than as an incident
When most of your DMs return it: a restricted account
One pattern sits on top of the two meanings. A few 2534022s scattered across a post are recipients who block message requests. When most of an account's DMs start coming back with 2534022 at once, across many different people, those people didn't all change their settings overnight: Instagram has limited the account's messaging. It usually follows what is being sent or how much of it — the same link to every commenter with no keyword, medical claims or regulated products next to purchase links, or a sudden viral spike. Since 22 October 2026 Reachlee watches each account's share of refused DMs; when most are refused it pauses the account (an hour at first, longer if it continues), shows a banner, emails you, and ramps sending back up once DMs go through again. Appeals are made in the Instagram app under Settings → Account status. The full walkthrough is in Instagram restricted my account.
- A scattered few on a post: recipients with message requests restricted — normal background
- Most of the account's DMs, across many people at once: the account's messaging is restricted
- Check the automations first: no keyword (every commenter gets the DM), sensitive or regulated products, sudden spikes
- Keep the automations on; Reachlee pauses and resumes the account itself and the flag clears when DMs go through again
The subcodes that travel with it
If you're classifying 2534022 you will meet its neighbours in the same audit, and they're worth handling together because they're all terminal per-recipient or per-comment rejections rather than transient errors. Subcode 2534023 means that comment already used its one private reply, which happens whenever two automations race for the same comment. Subcode 2534025 means the comment is ineligible — older than Instagram's 7-day private-reply window, deleted, already answered by another tool, or privacy-blocked. Subcode 2534001 means the recipient archived or deleted the thread. Subcode 2534014 means the user was not found. And code 2 with subcode 1545133 is a different shape of the same lesson: Meta refuses media and rich templates, button templates included, to people who don't follow the sending account. All of these should be skips with reasons, none should be retried, and none should feed a breaker.
- 2534023 — the comment already has its one reply (usually two automations colliding)
- 2534025 — comment ineligible: past 7 days, deleted, already replied, or privacy-blocked
- 2534001 — recipient archived or deleted the conversation
- 2534014 — user not found
- 1545133 (code 2) — media or rich template refused to a non-follower
Subcode 2534022 is the most misdiagnosed error in Instagram automation because its message describes only one of the two things it means. On a follow-up, it is the 24-hour messaging window and the only cure is an inbound message. On a first private reply, it is the recipient refusing message requests, it is permanent, and every retry is wasted. Classify by call site, record the terminal case as a skip with a reason, keep it out of your throttle signals, and the error stops being a mystery and becomes a normal background rate you can reason about.
Error 2534022 — FAQ
What is Instagram error code 10 subcode 2534022?
It's a send rejection with two distinct causes. On a follow-up message inside an existing conversation it means the 24-hour messaging window has expired, and only a new message from that person reopens it. On a first private reply to a comment it means the recipient's Instagram privacy settings block message requests from accounts they don't follow, which is permanent for that person. Meta's error text refers to an allowed window in both cases, which is why the second cause is so frequently misread as a timing problem.
Can I retry after a 2534022?
Not usefully. If it fired on a first private reply, the recipient will not become reachable — the rejection is about their privacy setting, so retrying now, later, or from a different tool all fail identically. If it fired on a follow-up, the window has closed and no API call reopens it; only an inbound message from that person does. In both cases the correct handling is to stop and record the outcome, and retrying actively harms you by consuming rate-limit budget you could spend on reachable people.
Why do I get 2534022 on the very first message to someone?
Because on a first private reply the subcode isn't about a window at all — it's the recipient blocking message requests from accounts they don't follow. A private reply has no 24-hour window to be outside of; it's a one-shot grant tied to the comment and valid for 7 days from when the comment was posted. So a first-message 2534022 is definitive evidence of a recipient-side restriction rather than anything about your timing or configuration.
How many of these should I expect?
A steady low percentage of any post's commenters, because a meaningful share of Instagram users have message requests restricted. Treat that as a background rate rather than an incident: a low, steady share doesn't say anything about your account's standing with Meta. A sudden jump to most of your DMs is different — that's an account-level messaging restriction, covered above. What matters is that your tooling reports these as skips with a reason rather than folding them into a failure count, because otherwise a completely healthy send run looks like it's failing.
Does 2534022 mean my account is restricted?
Not on its own. A single 2534022 is a per-recipient or per-thread rejection and carries no signal about your account's standing. The exception is volume: if most of your account's DMs start returning 2534022 at once, across many different people, Instagram has restricted the account's messaging. Reachlee detects that pattern since 22 October 2026, pauses the account and alerts you; the appeal is in the Instagram app under Settings → Account status. Other account-level problems look different: documented rate-limit codes such as 4, 17, 32 or 613 arrive with usage headers and an estimated time until access returns, while a policy block is error 368 with subcode 1404169 and comes with no recovery estimate at all.
Why did my first DM work but the second one return 2534022?
Because the first was a private reply to a comment and private replies don't open a messaging window. Meta grants one DM per comment and that grant is spent on the first message; the second has no window to send inside, so it's rejected. This is by design and applies to every tool on the official API, which means it can't be fixed with configuration. The only way to earn a second message is for the person to reply to your first — that reply opens 24 hours of normal free-form messaging. If the second message fails with 2534037 instead, even after the person replied or tapped, the cause is different: the linked Facebook Page's inbox owns the conversation.
