> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Automation DM Sent but Not Delivered

> Why an Instagram automation DM shows sent but never arrives, how Message requests settings and existing threads decide delivery, and private reply limits.

If a [comment-triggered automation](https://www.ayrshare.com/docs/apis/automations/overview.md) reports an activity `status: "sent"` but the person who commented says they never got the DM, this is almost always the recipient's Instagram privacy settings — **not** a bug in your automation or in Ayrshare.

> [!NOTE]
>
> **`sent` means Instagram accepted the message, not that it was delivered.** Instagram does not expose message delivery on any API surface. Ayrshare marks a `send_dm` action `sent` the instant Instagram accepts it; whether it actually reaches the recipient is decided by settings Ayrshare cannot read or change.

## The recipient's "Message requests" setting decides delivery

Every Instagram user controls who may send them a message request under **Settings and activity → Messages and story replies → Message requests**. The options are roughly "Everyone", "Your followers", and "No one".

When your automation sends a DM to someone who has restricted message requests, Meta accepts the request, returns a **success response with a message ID**, and then **silently drops the message**. There is no error, no failure webhook, and no delivery/read signal — the drop is invisible at every API layer. Meta knows the message is undeliverable (its own app UI shows *"This account can't receive your message because they don't allow new message requests from everyone"*), but it does not expose that on the API.

| Recipient's Message requests setting | What happens |
| - | - |
| Everyone | Delivered — arrives as a **message request** the recipient must accept |
| Your followers (and the recipient does not follow the sender) | Accepted by Meta, then silently dropped |
| No one | Accepted by Meta, then silently dropped |

## An existing conversation overrides the setting

If the sender and recipient **already have a message thread** (for example, the recipient has DMed the account before), that existing conversation overrides the Message requests setting and the automation DM is delivered into the existing thread rather than as a new request. This is why the same automation can reach some commenters and not others, and why a recipient who messages the account first will then reliably receive automation DMs.

## How to recognize this

<ul>
  <li>The activity row shows `status: "sent"` with no `errorDetails`.</li>
  <li>The recipient reports no DM (and it is not sitting in their message-requests folder).</li>
  <li>It is intermittent across recipients — some receive the DM, others do not — with no pattern in your configuration.</li>
</ul>

This is a delivery outcome, not a failure state, so it will never appear as `failed`. A `failed` row means Instagram *rejected* the send and the reason is on `actionResults[].errorDetails` — that is a different situation (see [error codes](https://www.ayrshare.com/docs/errors/errors-ayrshare.md)).

## What you can do

There is **no programmatic workaround** — no API, scope, or send shape can bypass a recipient's Message requests setting. What you can do:

<ul>
  <li>Set expectations up front: a comment-triggered DM only reaches people whose Instagram settings allow message requests, or who already have a conversation with your account.</li>
  <li>Encourage commenters to DM your account (or turn on message requests) if they want the follow-up — an inbound message opens the thread permanently.</li>
  <li>Consider a public reply to the comment as a fallback path for reaching everyone.</li>
</ul>

## How comment-triggered DMs are sent (private replies)

Comment-triggered automations deliver the DM through Instagram **private replies**, anchored to the comment itself. This is what lets the automation message a commenter you have never messaged before. The mechanics — and their limits — are worth knowing:

<ul>
  <li>**Comment-anchored 7-day window.** The reply must be sent within 7 days of the comment. After that the window closes and the send fails with [`code: 491`](https://www.ayrshare.com/docs/errors/errors-ayrshare#automation-private-reply-comment-dm-errors).</li>
  <li>**One reply per comment, ever.** Instagram allows only a single private reply per comment. A second attempt fails with [`code: 491`](https://www.ayrshare.com/docs/errors/errors-ayrshare#automation-private-reply-comment-dm-errors) — Instagram reports "already replied" through the same shared error it uses for a closed window, so check `errorDetails` for which it was.</li>
  <li>**Arrives as a message request.** Even a successfully delivered private reply lands in the recipient's message-requests folder and must be accepted — unless a conversation already exists.</li>
  <li>**Delivery still depends on the recipient's settings.** Private replies remove the "must have messaged first" requirement, but they do **not** override the recipient's Message requests setting, which is the limitation described above.</li>
</ul>

## Related

<ul>
  <li>[Automations API Overview](https://www.ayrshare.com/docs/apis/automations/overview.md) — trigger and action reference, activity statuses.</li>
  <li>[Messages API Overview](https://www.ayrshare.com/docs/apis/messages/overview.md) — the DM privacy toggle and the Instagram 7-day messaging window.</li>
  <li>[Automation private-reply error codes](https://www.ayrshare.com/docs/errors/errors-ayrshare.md#automation-private-reply-comment-dm-errors) — `490`–`495`.</li>
</ul>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.