Instagram API endpoint
Returns up to 12 public Reels via anonymous proxied HTTP for the numeric Instagram user ID. Supports opaque `max_id` pagination. Captions, timestamps and original image dimensions are omitted when the public source does not expose them.
/instagram/reels/{id}Path parameters:
id: required. Numeric Instagram user ID — not a username. A non-numeric
value returns 400 before any upstream request (the profile endpoint's
user.id field returns the numeric id for a given username).Query parameters:
max_id: optional. Pagination cursor for fetching the next page of Reels.Notable response behavior:
max_id is opaque: pass the returned paging_info.max_id unchanged. Cursors
issued by the earlier clips-API source are not interchangeable with the new
feed; restart from the first page after the source migration.media.id is the source media PK. media.code is the URL shortcode.taken_at, and original image dimensions are unavailable on this surface;
those fields are omitted. Thumbnail candidate width and height are omitted
when unknown. A clip may have another author while appearing in this feed.503 with Retry-After: 30; this does not indicate an invalid Crawlora API key.X-Availability-Mode: stale to distinguish cached data from a fresh response.
A cached first page does not guarantee the next pagination page is available.media.code as post_id, not media.id.| Field | Filled in, of 12 checked |
|---|---|
| media | 12 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id (path) | string | Yes | Numeric Instagram user ID (not a username) | 45374573700 | |
| max_id | string | No | Pagination cursor for fetching the next page of Reels | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/instagram/reels/45374573700" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"items": [
{
"media": {
"id": "3997020294205651214",
"code": "Dd4RMfMJ7kO",
"media_type": 2,
"image_versions2": {
"candidates": [
{
"url": "https://cdn.example.com/reel-thumbnail.jpg"
}
]
},
"display_uri": "https://cdn.example.com/reel-thumbnail.jpg",
"play_count": 8121336,
"like_count": 47277,
"comment_count": 668
}
}
],
"paging_info": {
"max_id": "AQHT...",
"more_available": true
}
}
}Request schema
No body schema
Response schema
#/definitions/instagram.reelsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | instagram.ReelResponse | No | ||||
| data.items | array | No | Reels on this page. | |||
| data.items[].media | object | No | The reel in this entry. | |||
| data.items[].media.caption | object | No | pointer so it can be nil | |||
| data.items[].media.caption.text | string | No | Caption text of the reel. | |||
| data.items[].media.caption.user | object | No | Account that wrote the caption. | |||
| data.items[].media.caption.user.full_name | string | No | Display name of the account. | |||
| data.items[].media.caption.user.id | string | No | Numeric Instagram user ID of the account. | |||
| data.items[].media.caption.user.username | string | No | Username of the account. | |||
| data.items[].media.code | string | No | ||||
| data.items[].media.comment_count | integer | No | Number of comments on the reel. | |||
| data.items[].media.display_uri | string | No | URL of the reel's thumbnail image. | |||
| data.items[].media.id | string | No | Instagram media ID of the reel. | |||
| data.items[].media.image_versions2 | object | No | Available versions of the reel's thumbnail, each with its own URL. | |||
| data.items[].media.image_versions2.candidates | array | No | Available versions of the reel thumbnail, each with its own URL. | |||
| data.items[].media.image_versions2.candidates[].height | integer | No | Height of this thumbnail version, in pixels. Omitted when unknown. | |||
| data.items[].media.image_versions2.candidates[].url | string | No | URL of this thumbnail version. | |||
| data.items[].media.image_versions2.candidates[].width | integer | No | Width of this thumbnail version, in pixels. Omitted when unknown. | |||
| data.items[].media.like_count | integer | No | Number of likes on the reel. | |||
| data.items[].media.media_type | integer | No | 1=Image 2=Video 8=Album | |||
| data.items[].media.play_count | integer | No | Number of times the reel has been played. | |||
| data.items[].media.taken_at | integer | No | Time the reel was posted, in Unix seconds. Not available for public reels, so currently omitted. | |||
| data.paging_info | object | No | Cursor details for fetching the next page of reels. | |||
| 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. | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Missing or invalid parameters | #/definitions/app.Response |
| 404 | No Reels 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/reels/45374573700" \
-H "x-api-key: $CRAWLORA_API_KEY"