Instagram API endpoint
Returns public posts and Reels from the logged-out Posts tab for an Instagram username. Each item exposes the fields available in Instagram's public grid; source-omitted metrics and dimensions are not inferred. Pass `paging_info.max_id` back as `max_id` for the next page.
/instagram/user/{username}/postsReturns public posts and Reels from the logged-out Posts tab for one Instagram username. The feed may include collaborative posts whose visible author is a different account. The public grid source does not provide every media metric or dimension, so unavailable fields are omitted.
Path parameters:
username: required. Instagram username, optionally prefixed with @.Query parameters:
max_id: optional. Opaque cursor returned in paging_info.max_id; pass it
unchanged to request the next page for the same username.The media id is Instagram's numeric media PK. user.id is the separate ID
Instagram exposes in this GraphQL response. The endpoint does not infer likes,
comment counts, or media dimensions when the source omits them.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| username (path) | string | Yes | Instagram username, optionally prefixed with @ | ||
| max_id | string | No | Opaque cursor from the previous response's paging_info.max_id | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/instagram/user/google/posts" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"username": "google",
"items": [
{
"id": "4007139055314287176",
"shortcode": "DecN711mjpI",
"caption": "A public post caption",
"display_uri": "https://cdn.example.com/post.jpg",
"media_type": 8,
"product_type": "carousel_container",
"carousel_media_count": 4,
"user": {
"id": "17841401778116675",
"username": "google"
}
}
],
"paging_info": {
"max_id": "OPAQUE_CURSOR",
"more_available": true
}
}
}Request schema
No body schema
Response schema
#/definitions/instagram.userPostsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | instagram.InstagramUserPostsResponse | No | ||||
| data.items | array | No | ||||
| data.items[].accessibility_caption | string | No | ||||
| data.items[].caption | string | No | ||||
| data.items[].carousel_media_count | integer | No | ||||
| data.items[].display_uri | string | No | ||||
| data.items[].id | string | No | ||||
| data.items[].media_type | integer | No | ||||
| data.items[].product_type | string | No | ||||
| data.items[].shortcode | string | No | ||||
| data.items[].user | instagram.InstagramPostAuthor | No | ||||
| data.items[].user.id | string | No | ||||
| data.items[].user.username | string | No | ||||
| data.paging_info | instagram.PagingInfo | No | ||||
| data.paging_info.max_id | string | No | Cursor to pass unchanged as `max_id` to fetch the next page of reels. | |||
| data.paging_info.more_available | boolean | No | Whether more reels are available after this page. | |||
| data.username | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | Profile not found | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
| 503 | Anonymous upstream access denied or unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/instagram/user/google/posts" \
-H "x-api-key: $CRAWLORA_API_KEY"