# Facebook Comments API: Read, Reply, Hide, Delete

How to read, reply to, hide, and delete comments on Facebook Page posts with the Graph API: endpoints, Page permissions, private replies, and the limits.

Canonical page: https://www.tryadeli.com/blog/facebook-comments-api
Last updated: 2026-10-19

By Mika Reyes, Co-founder, Adeli. Published 2026-10-19.

## The short answer

The Facebook comments API is the Graph API's comments edge. With a Page access token you read comments on a Page's posts with GET on the post's comments edge, reply by POSTing a message to a comment, hide with is_hidden, and delete with DELETE. It needs pages_read_user_content and pages_manage_engagement, and it doesn't reach personal profiles. Adeli reads, replies to, and moderates comments on any post of a connected Page.

The Facebook comments API is the **Graph API's `comments` edge**. With a **Page access token** you can read the comments on a Page's posts, reply as the Page, hide comments, and delete them. Reading other people's comments needs **`pages_read_user_content`**, and writing needs **`pages_manage_engagement`**. None of it works on personal profiles.

Each operation below comes with a request built from Meta's docs. After those come the permissions, private replies, webhooks, and the errors behind most "my comments are empty" bugs.

## What can the Facebook comments API do?

**Five operations, all on posts of a Page your token can moderate.** Requests go to `graph.facebook.com`, per Meta's [comments edge reference](https://developers.facebook.com/docs/graph-api/reference/object/comments/) and [Comment reference](https://developers.facebook.com/docs/graph-api/reference/comment/).

| Operation | Request | Key parameter |
|---|---|---|
| **List comments on a post** | `GET /{page-post-id}/comments` | `filter`, `summary`, `fields` |
| **Reply to a comment** | `POST /{comment-id}/comments` | `message` |
| **Comment on the Page's post** | `POST /{page-post-id}/comments` | `message`, or an image |
| **Hide or unhide a comment** | `POST /{comment-id}` | `is_hidden=true` or `false` |
| **Delete a comment** | `DELETE /{comment-id}` | none |

The same `POST /{comment-id}` call also **edits a comment's `message`**, which only works on comments the Page wrote. To get post IDs in the first place, read the Page's feed or the response from [publishing a Page post](https://www.tryadeli.com/blog/post-to-facebook-via-api).

## Which permissions does the Facebook comments API need?

**Two Page permissions, plus a Page access token.** The descriptions come from Meta's [permissions reference](https://developers.facebook.com/docs/permissions/):

| Permission | What Meta says it allows | Depends on |
|---|---|---|
| **`pages_read_user_content`** | Read user-generated content on the Page, "such as posts, comments, and ratings," and delete user comments on Page posts | `pages_show_list` |
| **`pages_manage_engagement`** | "Create, edit and delete comments posted on the Page" | `pages_read_user_content`, `pages_show_list` |
| **`pages_read_engagement`** | Read content the Page itself posted, plus follower names and PSIDs | `pages_show_list` |
| **`pages_messaging`** | Private replies to commenters (see below) | `pages_manage_metadata`, `pages_show_list` |

The permissions alone aren't enough:

- **Use a Page token, not a user token.** Meta's [Page comments guide](https://developers.facebook.com/docs/pages-api/comments-mentions) requires a Page access token, and the comments edge returns empty data for posts read with a User access token. Our [Page access token guide](https://www.tryadeli.com/blog/facebook-page-access-token) shows how to get one that doesn't expire.
- **The person needs the MODERATE task on the Page.** Publishing a comment needs a token from someone who can moderate, and so does getting comment IDs.
- **Customers' Pages need Advanced Access.** Standard Access covers Pages managed by people with a role on your app. When customers connect their own Pages, you need App Review and Business Verification. The [Meta app review guide](https://www.tryadeli.com/blog/meta-app-review-time) covers the timeline.

## How to get comments from a Facebook post with the API

**Call the post's `comments` edge with a Page token and the fields you want.**

```bash
curl -G "https://graph.facebook.com/v26.0/<PAGE_POST_ID>/comments" \
  -d "access_token=<PAGE_ACCESS_TOKEN>" \
  -d "filter=stream" \
  -d "summary=true" \
  --data-urlencode "fields=id,from,message,created_time,comment_count,can_reply_privately"
```

The response has a `data` array with each comment's `from.name`, `from.id` (the commenter's Page-scoped ID), `message`, `id`, and `created_time`, plus `paging` cursors. The [comments edge reference](https://developers.facebook.com/docs/graph-api/reference/object/comments/) defines the two reading parameters:

- **`filter`.** `toplevel` (the default) returns top-level comments only. `stream` returns every comment, replies included, in chronological order.
- **`summary`.** Adds `total_count` and `order`, which is either `chronological` or `reverse_chronological`. There's no documented `order` request parameter.

**Why the list looks short.** Meta documents three causes:

1. **The default filter hides replies.** Switch to `filter=stream`, or read each comment's own `comments` edge.
2. **`total_count` overcounts.** Meta says it can be higher than the comments returned "due to comment privacy or deletion."
3. **Very large threads hit paging limits.** Meta warns that objects with tens of thousands of comments may not page to the end.

## How to reply to a Facebook comment with the API

**POST a `message` to the comment's own `comments` edge.** The Page is the author.

```bash
curl -X POST "https://graph.facebook.com/v26.0/<COMMENT_ID>/comments" \
  -d "access_token=<PAGE_ACCESS_TOKEN>" \
  -d "message=Thanks for asking. The new hours start Monday."
```

A successful call returns the new comment's ID as `{"id": "..."}`. From the [Page comments guide](https://developers.facebook.com/docs/pages-api/comments-mentions) and the [comments edge reference](https://developers.facebook.com/docs/graph-api/reference/object/comments/):

- **Check `can_comment` first.** It tells you whether a comment accepts replies.
- **Images and GIFs work too.** Send `attachment_url` for an image, `attachment_share_url` for a GIF, or `attachment_id` for an unpublished photo, instead of or alongside `message`.
- **Mentions are limited.** A Page can @mention someone with `@[PSID]` only if that person commented on the Page's post or wrote it, and the Page's settings allow others to tag it.
- **Unpublished Pages can't comment.** Meta says no one can comment on a post of an unpublished Page.

To add a top-level comment on the Page's own post, send the same request to `/{page-post-id}/comments`.

## How to hide or delete a Facebook comment

**Hide with `is_hidden=true`, delete with a DELETE request.** Hiding can be undone, so it's the safer moderation default.

```bash
# Hide (send is_hidden=false to show it again)
curl -X POST "https://graph.facebook.com/v26.0/<COMMENT_ID>" \
  -d "access_token=<PAGE_ACCESS_TOKEN>" \
  -d "is_hidden=true"

# Delete
curl -X DELETE "https://graph.facebook.com/v26.0/<COMMENT_ID>?access_token=<PAGE_ACCESS_TOKEN>"
```

Both return `{"success": true}`. What the [Comment reference](https://developers.facebook.com/docs/graph-api/reference/comment/) and the permissions reference say:

- **`is_hidden` only applies to Page comments.** Meta describes the field as "Only applicable to Page comments," so it won't hide comments anywhere else.
- **Hiding falls under moderation.** The Comment reference doesn't name the permission for hiding. `pages_manage_engagement` is the one whose allowed use is "manage and moderate content on the Page," so request it.
- **Deleting other people's comments is allowed on your Page.** Both `pages_read_user_content` and `pages_manage_engagement` list deleting comments on Page posts. Deleting can't be undone.

## Can you send a private reply to a Facebook commenter?

**Yes, one message, within 7 days of the comment.** Meta's [private replies guide](https://developers.facebook.com/docs/messenger-platform/discovery/private-replies) sends a Messenger message to the person who commented, using the comment ID as the recipient:

```bash
curl -X POST "https://graph.facebook.com/v26.0/<PAGE_ID>/messages?access_token=<PAGE_ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"recipient":{"comment_id":"<COMMENT_ID>"},"message":{"text":"Sending you the order link here."}}'
```

- **One message only.** If the person replies, the normal 24-hour messaging window opens.
- **7 days from the comment's creation**, not from when you saw it.
- **Different permission.** It needs `pages_messaging` and a token from someone with the MESSAGING task on the Page.
- **No replies to Pages.** You can't send a private reply to another Facebook Page.

The comment's `can_reply_privately` field tells you whether a private reply is still possible.

## How to get new Facebook comments in real time

**Subscribe your app to the Page's `feed` webhook.** Meta's [Page webhooks reference](https://developers.facebook.com/docs/graph-api/webhooks/reference/page/) sends events with `item: comment` and a `verb` such as `add`, `edited`, `remove`, `hide`, or `unhide`, along with `comment_id` and `parent_id`.

- **It needs `pages_manage_metadata`,** granted by a Page admin with MODERATE.
- **Ad comments are included.** Meta doesn't send webhooks for ad posts themselves, but does for comments on them.
- **Fetch the comment afterward** with `GET /{comment-id}` if the payload leaves out a field you need.

Meta's private replies guide also recommends the feed webhook over polling the Page's feed, to stay clear of rate limits.

## Which Facebook comments can't the API reach?

**Anything outside a Page your token can moderate.** The limits, from Meta's comments references:

| You want | Works? | Why |
|---|---|---|
| **Comments on your Page's posts** | Yes | Page token with the permissions above |
| **Comments on another company's Page** | No, not usefully | Apps using Page Public Content Access no longer get comment IDs, so you can't reply or moderate |
| **Comments on a personal profile's posts** | No | User tokens get empty data on posts, and other people's comments need their own authorization |
| **Comments in Groups** | No | Meta deprecated the Groups API in Graph API v19.0 ([more on that](https://www.tryadeli.com/blog/post-to-facebook-via-api)) |
| **Commenting as a person** | No | Comments post as the Page; commenting as a user returns error `1705` |

**Common errors to handle:** `283` (missing `pages_read_engagement` or `pages_read_user_content`), `200` (permissions), `190` (invalid or expired token), and `368` (Meta blocked the action as abusive, often from repeated identical replies).

## Is there a faster way to manage Facebook comments?

**Yes, if you don't want to run the Meta side yourself.** Building this directly means a Meta app, Advanced Access for two comment permissions, Business Verification, a `feed` webhook, and a Page token for every customer.

The review is usually the slowest part. When we went through Meta's review for the comment permissions, the written use case was the easy half. **Expect the screencast to be judged hardest:** the Meta login, the user granting the permission, choosing the Page, and the comment being read and answered on screen, end to end.

[Adeli's Facebook API](https://www.tryadeli.com/product/facebook) removes that work. Adeli maintains the Facebook developer app, carries Meta's review, and refreshes every connected Page's tokens, so you hold **one API key**. It reads, replies to, and moderates comments on **any post of a connected Page, including posts made outside Adeli**. Here's a reply through [Reply or comment](https://www.tryadeli.com/docs/api/comments/create-comment):

```bash
curl -X POST "https://app.tryadeli.com/api/v1/comments" \
  -H "Authorization: Bearer $ADELI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "facebook",
    "accountId": "00000000-0000-0000-0000-000000000000",
    "parentId": "<COMMENT_ID>",
    "message": "Thanks for asking. The new hours start Monday."
  }'
```

How Adeli maps to the Facebook behavior above:

- **[List comments](https://www.tryadeli.com/docs/api/comments/list-comments)** returns the Page's newest 25 posts and the comments on one of them, newest first, with replies carrying `parentId`.
- **Reads answer from Adeli's copy**, refreshed from Facebook in the background when it's more than a minute old, with `syncedAt` and `complete` on every response.
- **[Reply or comment](https://www.tryadeli.com/docs/api/comments/create-comment)** takes `parentId` for a reply or `postId` alone for a comment on the Page's own post, up to 8,000 characters.
- **[Hide](https://www.tryadeli.com/docs/api/comments/update-comment)** is a PATCH with `hidden: true` or `false`. **[Delete](https://www.tryadeli.com/docs/api/comments/delete-comment)** works on any comment on the Page's posts.
- **Two states to handle in your UI.** A connection without a chosen Page returns `409 page_not_selected`. A connection made before the comment permission was requested returns `422 connection_expired`, and reconnecting fixes it.

The same endpoints cover [Instagram comments](https://www.tryadeli.com/blog/instagram-api-comments) and [TikTok comments](https://www.tryadeli.com/blog/tiktok-comments-api), plus YouTube. See the [commenting API](https://www.tryadeli.com/social-media-commenting-api) for the cross-network view. One Facebook Page is one connected account, and on [Adeli's pricing](https://www.tryadeli.com/pricing) your **first 3 connected accounts are free**.

## Frequently asked questions

### Can I get comments from someone else's Facebook Page with the API?

Not in a usable way. Managing comments needs a Page access token from someone who can moderate the Page. Meta's comments reference says apps reading through the Page Public Content Access feature no longer get comment IDs, so you can't reply to or moderate what you read.

### Can I read comments on a personal Facebook profile's posts?

No. Meta's comments reference says the edge returns empty data when read with a User access token on posts, photos, videos, and albums, and other people's comments aren't returned unless those people authorized your app. Comment management works on Pages only.

### Is there an order parameter for Facebook comments?

Meta's reference lists only two reading parameters, filter and summary. With summary=true the response tells you the order the comments came back in, chronological or reverse_chronological, alongside total_count. Use filter=stream to get replies too, in chronological order.

### Why does Facebook say I'm not allowed to comment?

Error 1705 means you tried to comment as a user. Comments through the Graph API are posted as the Page, so send a Page access token from someone with the MODERATE task. Error 283 means the token is missing pages_read_engagement or pages_read_user_content.

## Related Adeli pages

- [Social Media Commenting API](https://www.tryadeli.com/social-media-commenting-api.md): Read, reply to, and moderate comments on Instagram, TikTok, YouTube, and Facebook posts through the same API you publish with.
- [Facebook API for Developers](https://www.tryadeli.com/product/facebook.md): Publish, schedule, and read analytics for Facebook Pages through one API. Adeli owns the Facebook developer app, token refresh, and Meta review. Free to start.
- [Adeli Pricing — priced per connected account](https://www.tryadeli.com/pricing.md): Your first 3 connected accounts are free, then $5 each for accounts 4–10, $3 each for 11–50, $2 each for 51–100, and $1 each up to 2,000. Above that, talk to sales.
- [All posts on the Adeli blog](https://www.tryadeli.com/blog.md)

## About the author

Mika Reyes is the CEO behind Adeli and a tech and AI content creator. She was previously co-founder and CEO of Parallax, which was acquired by Phantom, and a product lead at LinkedIn. She is a Forbes 30 Under 30 honoree.
