Instagram APIInstagram
Instagram comments API
Call GET /v1/instagram/posts/{id}/comments with the post ID. Each request returns one page of comments and a cursor for the next page. Replies to a comment have their own endpoint.
The post can belong to any public account. You do not need to own it, and you do not need Graph API access.
GET /v1/instagram/posts/{id}/comments
curl "https://api.openhandle.dev/v1/instagram/posts/910100000001/comments" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"TypeScript SDK
import { OpenHandle } from '@openhandle/sdk';
const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
let page = await openhandle.instagram.post('910100000001').comments.list();
while (page) {
for (const comment of page.data) console.log(comment.author.handle, comment.text);
page = await page.next();
}200 OK
{
"platform": "instagram",
"resource": "comment",
"capturedAt": "2026-09-18T09:20:41Z",
"source": "live",
"data": [
{
"id": "910200000001",
"postId": "910100000001",
"text": "This fictional kit is excellent.",
"createdAt": "2026-08-10T10:00:00Z",
"author": { "id": "910000000020", "handle": "copperfield_notes_test" },
"metrics": { "likes": 12, "replies": 20 }
}
],
"meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}Trimmed to one comment and the fields most apps need. The example post is a Test fixture with 24 comments over several pages, so you can test paging on a free Test key.
What you get
- —Comments. Each comment has
id,text,createdAt, and theauthorwith ID and handle. - —Counts. Likes and replies sit in
metrics. When Instagram hides a like count,likesisnull. - —Replies. A comment with
metrics.repliesabove zero has a thread. Read it withGET /v1/instagram/posts/{id}/comments/{commentId}/replies. - —Start from a URL. Pass a post URL to
POST /v1/urls/fetch. It returns the post with itsid.
Price
- —Per request. $0.0025 per live request. $0.002 per request after 100,000 requests in a month. One page of results is one request.
- —Older data costs less. Set
freshnessto say how old the data may be. Data up to 24 hours old: $0.0005. Data up to 7 days old: $0.0001. Data up to 30 days old: free. - —Failed means free. Errors and invalid requests are never billed. You pay for answers, and a confirmed not-found is an answer.
- —Free to start. Every new workspace starts with 100 free live requests, no card needed. Test keys are never charged.
When this does not work
These answers are definitive. Store them, do not retry them.
| Situation | Status | Code |
|---|---|---|
| The post is deleted or never existed | 404 | POST_NOT_FOUND |
| The account went private | 403 | PROFILE_PRIVATE |
| The cursor came from another request | 400 | CURSOR_MISMATCH |
| The identifier is malformed | 400 | INVALID_IDENTIFIER |
404 Not Found
{
"error": {
"code": "POST_NOT_FOUND",
"message": "This post was not found.",
"requestId": "req_01j8…",
"retryable": false
}
}An account can go private while you page. Handle PROFILE_PRIVATE on any page, not only the first.
Read next
More Instagram data
Send your agent ahead.
Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.
100 free requests. No card needed.