Read a post’s comments
The public comments on an Instagram post or reel, newest first, each with its text, author, time, likes and reply count. Pass the post’s URL, short code or id. Paged: 10–16 comments per page, 1 credit per page fetched.
/post-comments Posts & reels https://api.fetchlayer.dev/instagram/post-comments Headers
Authorization string required Bearer token — your FetchLayer API key.
Parameters
post string required A post or reel URL, in any of the forms post-detail accepts, the short code from that URL, or the post’s numeric id.
pages integer optional Pages of comments to return in one request, up to 10. Use -1 for the maximum. A page is 10–16 comments, each page is 1 credit, and the response reports how many were fetched as pagesFetched. The first page takes about 2–3.5 seconds and each further page about 2–4, so pages: 10 is about 30 seconds. (default: 1)
cursor string optional Continue from a previous response’s nextCursor. Send it back to post-comments with the same post that produced it; a cursor from another route or another post, or a malformed one, is a 400.
limit integer optional Maximum comments returned, up to 300. Use -1 for the maximum. It caps the comments across the pages fetched; it does not fetch further pages. (default: every comment on the pages fetched)
format string optional json or markdown, lowercase; any other value is a 400. Over MCP, markdown returns the result rendered as text; the REST API accepts it and returns JSON. (default: json)
timeoutMs integer optional Time limit for the whole request, in milliseconds (1000–120000); a value outside that range is a 400. When it runs out, a paged request returns what it has with nextCursor, billed for the pages it returned; a request with nothing to return yet fails with a 503 you can retry, marked with the response header X-Timeout-Source: caller. Left out, the request runs as long as it needs.
Response Fields
post-comments
Read a post’s comments
transport string The data source: always the platform id, "instagram".
notes string[] Caveats you can act on — a ceiling Instagram imposes, a counter it withholds, a list that stopped early. Several real limits are reported only here, so read them. An empty result always comes with a note explaining it, never as an unexplained empty array.
pagesFetched number Pages of results fetched, which is what the request costs: one credit per page. resolve-url reports 0 and is not billed.
shortcode string The post the comments belong to.
comments object[] The comments, newest first.
comments[].id string Instagram’s exact comment id, as a string. Pass it to comment-replies as commentId to read the comment’s replies; a note says when a page holds comments with replies.
comments[].text string The comment body, or null for a GIF, photo or sticker comment — kind says which and mediaUrl links it.
comments[].kind string "text", "gif", "image" (a photo or a sticker) or "unknown". "unknown" — no text and no mediaUrl — appears only on a first page where the photos of photo comments are not available; the note says so.
comments[].mediaUrl string The GIF or photo the comment carries, or null.
comments[].createdAt string ISO 8601 timestamp.
comments[].likeCount number Likes on the comment.
comments[].replyCount number How many replies the comment has, on every page. On a first page some can be empty, with the note "On this first page, some reply counts and the photos of photo comments are not available in this response, so they are empty. Asking again fills them; nextCursor continues the list." comment-replies returns the replies, given this comment’s id.
comments[].author object id, username, fullName, profilePicUrl, verified, privateAccount and profileUrl.
nextCursor string | null Pass it back as cursor to continue from here. Null when there is nothing further, and hasMore agrees. A response can hold fewer comments than asked; it then carries nextCursor and the note "This list stops early: the rest is not available in this response. Continue with nextCursor."
commentCount number How many comments are in this response.
totalCount number Instagram’s total for the post, replies included, so it is higher than the comments listed.
hasMore boolean Whether more comments are available. False when nextCursor is null.
Request
curl -X POST "https://api.fetchlayer.dev/instagram/post-comments" \
-H "Authorization: Bearer ss-your-key" \
-H "Content-Type: application/json" \
-d '{"post":"DcOX3hWFiey","pages":2}'Response
{
"transport": "instagram",
"notes": [
"More comments are available. Continue with nextCursor."
],
"pagesFetched": 2,
"shortcode": "DcOX3hWFiey",
"comments": [
{
"id": "18041736590218845",
"text": "The colours in this one are unreal 🔭",
"kind": "text",
"mediaUrl": null,
"createdAt": "2026-09-16T17:16:25.000Z",
"likeCount": 2,
"replyCount": 3,
"author": {
"id": "61873402291",
"username": "example.stargazer",
"fullName": null,
"profilePicUrl": "https://scontent-dus1-1.cdninstagram.com/v/t51.82787-19/...",
"verified": false,
"privateAccount": null,
"profileUrl": "https://www.instagram.com/example.stargazer/"
}
}
],
"commentCount": 26,
"totalCount": 4349,
"nextCursor": "c1.WyI0MDA3MDAwNzg1ODc4NjgyNDgxIiwie1wiaXNfc2VydmVyX2N1cnNvcl9pbnZlcnNlXCI6dHJ1ZSxcInNlcnZlcl9jdXJzb3JcIjpcIkFRSFRobTQybUlCaHZzN0dGd2JyVFNLNC14QUZPc1V2eHdLLXBuT2xxcHZUQlZsaEtWS2wxV0pIa0xhazh5SlhjMFZLV1lZQzVfME9lQXl5ancxWHdEbnp3Z1wifSIsbnVsbCw0ODNd",
"hasMore": true
}