Skip to main content

Comments

Read, reply to, hide and delete comments on Facebook Page posts and Instagram media.

Read and moderate comments on a connected Facebook Page's posts and an Instagram account's media. Reading needs whatsapp:read; replying, hiding and deleting need whatsapp:send. None of it is metered.

No account id goes in the path — the Page or Instagram account is resolved from your workspace, and ?account= overrides it on any endpoint here. See how an account is chosen.

Comment lists are cursor-paginated: a response carries an after cursor; pass it back as the after query parameter to get the next page. There is no offset — an offset would skip comments as new ones arrive. limit is 1–100 (CallMissed's own bound; default 25).

Facebook: list comments on a post

GET /api/v1/facebook/posts/{post_id}/comments

QueryTypeDescription
filterstringtoplevel (top-level comments) or stream (the flattened thread).
summarybooleanInclude Meta's total_count (default true).
limitintegerPage size, 1–100 (default 25).
afterstringThe cursor from a previous response.
accountstringOptional. Which connected Page to read as — a CallMissed id or Meta's page_id.
curl "https://api.callmissed.com/api/v1/facebook/posts/102938475610293_890123456789012/comments?filter=toplevel&limit=50" \
  -H "Authorization: Bearer cm_your_key"
{
  "data": [
    {
      "id": "1122334455667788_9988776655",
      "message": "Do you deliver to Pune?",
      "author": { "id": "7788990011223344", "name": "Ritu Sharma" },
      "created_time": "2026-08-24T09:14:02+0000",
      "like_count": 3,
      "comment_count": 1,
      "parent_id": null,
      "can_comment": true
    }
  ],
  "after": "QVFIUmxr...",
  "total_count": 42
}

author is omitted when Meta withholds the commenter's identity (a permissions state, not an error) — treat it as optional. total_count is null when summary is false or Meta omits it.

Facebook: list replies to a comment

GET /api/v1/facebook/comments/{comment_id}/replies

On Facebook a reply is a comment one level down. parent_id carries the id of the comment being replied to. Same limit/after/account paging as above; no filter (it is meaningless one level down).

Instagram: list comments on media

GET /api/v1/instagram/media/{media_id}/comments

QueryTypeDescription
limitintegerPage size, 1–100 (default 25).
afterstringThe cursor from a previous response.
accountstringOptional. Which connected account to read as — a CallMissed id or Meta's ig_user_id.
{
  "data": [
    {
      "id": "17924118234567890",
      "text": "Do you ship to Bengaluru?",
      "timestamp": "2026-08-24T09:14:03+0000",
      "username": "anita.makes",
      "like_count": 3,
      "hidden": false,
      "parent_id": null,
      "reply_count": 2
    }
  ],
  "after": "QVFIUmp0WFZ6..."
}

There is no total_count on Instagram — its comments edge documents no total, so none is invented. Every field except id is nullable: reading another commenter's username needs the comment-management permission, and Meta omits what a token may not see. reply_count is a count; fetch the replies themselves from the replies endpoint.

Instagram: list replies to a comment

GET /api/v1/instagram/comments/{comment_id}/replies

On Instagram a reply lives on a distinct edge (unlike Facebook), so replies are read here, not from the media-comments endpoint. Same response shape and paging as the media comments.

Reply to a comment

Facebook — POST /api/v1/facebook/comments/{comment_id}/reply Instagram — POST /api/v1/instagram/comments/{comment_id}/reply

FieldTypeDescription
messagestringThe reply text, 1–8,000 characters. Required.
curl -X POST https://api.callmissed.com/api/v1/instagram/comments/17924118234567890/reply \
  -H "Authorization: Bearer cm_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "message": "We do — 2 to 3 days across Karnataka." }'
{ "id": "17924118301122334" }

Hide or unhide a comment

Facebook — POST /api/v1/facebook/comments/{comment_id}/hide Instagram — POST /api/v1/instagram/comments/{comment_id}/hide

Hiding removes a comment from public view without deleting it. Send hidden:

FieldTypeDescription
hiddenbooleantrue to hide, false to unhide. Required.
{ "success": true }

Delete a comment

Facebook — DELETE /api/v1/facebook/comments/{comment_id} Instagram — DELETE /api/v1/instagram/comments/{comment_id}

Permanently deletes a comment you have permission to remove. You can only delete comments on your own posts/media, or your own comments — Meta enforces the rest. Irreversible; there is no undo, so hide first if you are unsure. Returns { "success": true }.

Errors

Every endpoint on this page maps Meta failures to these statuses (Meta's own text is never returned):

HTTPMeaning
401The account's access token is no longer valid. Reconnect it.
403The account lacks the comment-moderation permission.
409The account is disconnected, or its access token is unavailable.
422Meta rejected the call — the comment or post may no longer exist.
429Meta is rate-limiting the account. Wait and retry.
503The upstream call failed, or Meta did not answer in time. After a timeout the action may not have applied. Check, then retry.

Every endpoint on this page also exists in the legacy account-id-in-path form (GET /api/v1/facebook/{page_uuid}/posts/{post_id}/comments and siblings), which still works — see legacy paths.