Facebook / Posts

Comments

Fetch one page of comments from a Facebook post or reel. Each returned comment costs 4 credits.

01

Request

POST /api/facebook/posts/comments with your bearer token.

urlRequired for the first page. Use an HTTPS Facebook post or reel URL.
sortOptional: most_relevant, newest or all_comments. Defaults to most_relevant.
cursorOmit or send null initially. Send data.pagination.cursor unchanged to continue.
▸ ▾ first page
{"url":"https://www.facebook.com/reel/2659926441149944/","sort":"all_comments"}
▸ ▾ next page
{"cursor":"<data.pagination.cursor from the previous response>"}

You can omit the URL and sort on later pages. If supplied, they must match the original request. Start without a cursor to change the sort.

most_relevant can filter comments. newest uses reverse chronological order. all_comments uses Facebook's unfiltered ranking with chronological replies.

Page lengths vary. Stop when data.pagination.has_next_page is false. Reply counts do not mean every reply is included in the page.

The first call reads the post or reel and uses its initial comment batch when the ordering matches. Later pages reuse the feedback ID carried in the cursor.

Empty pages cost nothing. A wallet that cannot cover the whole page receives 402. Failed fetches are refunded.

02

Response sample

▸ ▾ response {} — illustrative later page; one comment
{
  "cost": 4,
  "created_at": 1790812800,
  "request_duration": 310,
  "parse_duration": 1,
  "data": {
    "url": "https://www.facebook.com/reel/2659926441149944/",
    "sort": "all_comments",
    "feedback_id": "ZmVlZGJhY2s6MTIyMjAzMzQ1ODA4OTMyMTY2",
    "post": null,
    "comment_count": null,
    "total_comment_count": null,
    "filtering_footer": null,
    "comments": [
      {
        "id": "1001",
        "node_id": "<comment node ID>",
        "feedback_id": "<comment feedback ID>",
        "url": "https://www.facebook.com/reel/2659926441149944/?comment_id=1001",
        "text": "Thanks for sharing.",
        "body": {
          "text": "Thanks for sharing.",
          "ranges": []
        },
        "created_at": 1790812800,
        "author": {
          "id": "100000000000001",
          "name": "Morgan Taylor",
          "url": "https://www.facebook.com/profile.php?id=100000000000001"
        },
        "attachments": [],
        "reaction_count_reduced": "1.7K",
        "reaction_summary": {
          "count_reduced": "1.7K"
        },
        "reply_count": 0,
        "filtered_reply_count": 0,
        "replies": null,
        "reply_expansion_token": null,
        "depth": 0,
        "parent_comment": null,
        "attached_story": null,
        "preferred_body": null,
        "translated_body": null,
        "translation_available": false,
        "author_badges": null,
        "is_hidden": false,
        "is_disabled": false,
        "spam_display_mode": null
      }
    ],
    "pagination": {
      "has_next_page": true,
      "cursor": "<opaque cursor>"
    }
  }
}

03

Fields

Responses contain cost, created_at, request_duration and parse_duration alongside data. Missing optional Facebook fields are null.

data.comments []

idtextNumeric comment ID, kept as text.
node_idtextFacebook's Relay comment node ID.
feedback_idtextThe comment's own feedback node ID.
urltextComment permalink.
texttextComment text; null for comments with no text, including some attachment-only comments.
bodyobjectText and entity ranges, preserving tagged people and links.
created_atnumberUnix timestamp in seconds.
authorobjectNative author details, including ID, name, profile URL and pictures when present.
attachmentsobject[]Native photo, video, sticker, GIF or link attachment details. Media URLs can expire.
reaction_count_reducedtextFacebook's displayed reaction count, such as 196 or 1.7K. It may be rounded.
reaction_summaryobjectNative reaction summary.
reply_countnumberTotal reply count supplied by Facebook.
filtered_reply_countnumberReply count for the selected filter.
repliesobjectReply connection already included in this response. More replies are not fetched automatically.
reply_expansion_tokentextNative token for expanding this comment's replies. This endpoint returns top-level pages.
depthnumberDepth in the comment thread.
parent_commentobjectDirect parent information when supplied.
attached_storyobjectShared story attached to the comment, or null.
preferred_bodyobjectFacebook's preferred displayed body, or null.
translated_bodyobjectTranslation returned by Facebook, or null.
translation_availablebooleanWhether a translation is available to the fetching identity.
author_badgesobjectAuthor-name renderer and badge details returned by Facebook.
is_hiddenbooleanWhether the comment is hidden for the fetching identity.
is_disabledbooleanWhether Facebook disables interaction with the comment.
spam_display_modetextSpam display state supplied by Facebook, or null.

data {}

urltextThe requested post or reel URL.
sorttextThe ordering used for this page.
feedback_idtextEncoded feedback ID of the underlying post. For a reel this can differ from its video ID.
postobjectInitial story metadata. Null on subsequent pages.
comment_countnumberCount for the selected filter, or null when omitted on pagination.
total_comment_countnumberTotal count supplied by Facebook, or null when omitted. It can include replies.
filtering_footertextFacebook's explanation of the selected filter, or null.

data.pagination {}

has_next_pagebooleanWhether another comment page is available.
cursortextContinuation containing the feedback ID and pagination state; null at the end.