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

# Comments

> Read, reply to, hide, and moderate comments on your Instagram posts.

## List comments

Always request `fields` explicitly.<br />
Meta's default response omits `from` and `text`.

```bash theme={null}
curl "https://gateway.hookmyapp.com/meta/v25.0/${MEDIA_ID}/comments?fields=id,from,text,timestamp,like_count,hidden" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}"
```

Results are top-level comments, 50 per page, with cursor paging.<br />
Add `replies` to `fields` for nested replies, or read them directly:

```bash theme={null}
curl "https://gateway.hookmyapp.com/meta/v25.0/${COMMENT_ID}/replies?fields=id,from,text,timestamp" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}"
```

Mentions of your account arrive through the same comment surface.<br />
Under Instagram Login there is no separate mentions webhook field — mentions show up in [comment webhook events](/instagram/receive-webhooks#comment-events).

## Reply publicly

Posts a threaded reply under the comment.

```bash theme={null}
curl -X POST "https://gateway.hookmyapp.com/meta/v25.0/${COMMENT_ID}/replies" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{ "message": "Thanks!" }'
```

You cannot reply to a hidden comment. Unhide it first.

## Reply privately

Sends a DM to the commenter instead of a public reply.

```bash theme={null}
curl -X POST "https://gateway.hookmyapp.com/meta/v25.0/${INSTAGRAM_ACCOUNT_ID}/messages" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
  "recipient": { "comment_id": "17900000000000000" },
  "message": { "text": "Sent you the details in DM." }
}'
```

<Warning>
  Private replies have hard limits from Meta:<br />
  One private reply per comment.<br />
  Within 7 days of the comment's creation for comments on posts and reels.<br />
  For comments on a live video, only while the broadcast is live — once the Live ends, private replies to its comments are rejected regardless of the 7-day window.<br />
  At most 750 private replies per hour.
</Warning>

These rejections are permanent for that comment or recipient — retrying the same call can never succeed, so drop it instead of retrying:

| Status | `error_subcode` | Meaning                                                                                              |
| ------ | --------------- | ---------------------------------------------------------------------------------------------------- |
| `409`  | `2534023`       | This comment already received a private reply. Meta allows only one.                                 |
| `403`  | `2534022`       | The message is outside the allowed window (7 days for posts and reels, live-only for Live comments). |
| `400`  | `2534014`       | The requested user can't be found.                                                                   |
| `400`  | `2534001`       | The recipient archived or deleted the conversation.                                                  |

The 750-per-hour quota is different: it resets on its own, so a request rejected for the quota can be retried after the window passes.

The response body carries the same fields Meta returns (`code`, `error_subcode`, `fbtrace_id`), so your automation can branch on `error_subcode` directly.

## Hide, delete, and disable

```bash theme={null}
# Hide a comment (unhide with hide=false)
curl -X POST "https://gateway.hookmyapp.com/meta/v25.0/${COMMENT_ID}?hide=true" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}"

# Delete a comment — only on your own media
curl -X DELETE "https://gateway.hookmyapp.com/meta/v25.0/${COMMENT_ID}" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}"

# Turn commenting off for a post (re-enable with comment_enabled=true)
curl -X POST "https://gateway.hookmyapp.com/meta/v25.0/${MEDIA_ID}?comment_enabled=false" \
  -H "Authorization: Bearer ${INSTAGRAM_ACCESS_TOKEN}"
```

## Moderate with the CLI

```bash theme={null}
# List comments
hookmyapp instagram comments list --channel @your-handle --media <media-id>

# Get comment
hookmyapp instagram comments get <comment-id> --channel @your-handle

# Reply to comment
hookmyapp instagram comments reply --channel @your-handle --comment <comment-id> --text "thanks"

# Send private reply
hookmyapp instagram comments private-reply --channel @your-handle --comment <comment-id> --text "sent you a DM"

# Hide comment (add --unhide to reverse)
hookmyapp instagram comments hide --channel @your-handle --comment <comment-id>

# Delete comment
hookmyapp instagram comments delete <comment-id> --channel @your-handle
```

## Moderate with MCP

Three tools cover comments: `list_instagram_comments`, `reply_instagram_comment` (public or private), and `moderate_instagram_comment` (hide, unhide, delete, or turn comments on or off for a post).

```text theme={null}
Use HookMyApp MCP to list new comments on my latest Instagram post, reply to genuine questions, and hide spam.
```

See [MCP](/instagram/mcp-server) for setup.

## Next steps

* [Receive webhooks](/instagram/receive-webhooks#comment-events): Get notified when comments arrive.
* [Publish content](/instagram/publish-content): Publish the posts people comment on.
