InsightSocial API
Instagram

Instagram Profile Reels API reference

Your first 10 calls are free, no card needed. Pricing and FAQ

Get a free API key
Example request
curl "https://api.insightsocial.app/v1/instagram/profile/reels?handle=mrbeast" \
  -H "x-api-key: $INSIGHTSOCIAL_API_KEY"
GET
/v1/instagram/profile/reels

Returns a user's reels with view, like and comment counts and a thumbnail; share counts are not included here. Collab reels list every co-author under ext.coauthors.

Use it for reels only rather than the whole post feed; use profile/reels/full when you also need per-reel share counts.

Metered: 10–140 credits. We reserve the ceiling when the call starts and charge what it actually used when it finishes.

Paginates by cursor: see Pagination.

x-api-key<token>

Your key from the dashboard. It starts with isk_.

In: header

Query Parameters

user_id?string

Instagram user id. Use this for faster response times. Provide at least one of: user_id, handle.

handle?string

Instagram username without the @ symbol. Provide at least one of: user_id, handle.

since?string

Only reels published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Older reels are left off the page, and the page that reaches one ends the walk: next_cursor is not returned and pagination.stopped_at is since. Pinned reels sit out of date order and never end the walk. The page still costs what a page costs, so a daily poll pays for the pages it walks and no more.

stop_at_id?string

The id (post.id) or URL (post.url) of the newest reel you already hold. The page stops just before it: that reel and everything after it are left off, next_cursor is not returned, and pagination.stopped_at is known_id. A pinned reel never counts as the stop point. If it is not on this page the page is returned in full with its cursor, so keep walking. pagination.stopped_at is end when the list ran out first and null while there is more to walk.

trim?boolean

Set to true to request the lighter record: a smaller, faster page that keeps the engagement, the author, the caption, the timestamp and the reel URL. What it drops is post.content.media_urls (the video file), post.content.duration_seconds, post.ext.coauthors and post.flags.pinned. The cover image is returned as post.content.thumbnail_url either way. Leave it unset when you need the video URL or the duration.

exclude_pinned?boolean

Set to true to leave out the posts the owner pinned to the top of the profile. A row whose pin state is unknown, which is every row with trim=true, is kept.

recent_days?integer

Keep only posts published in the last N days (1 to 3650). Older posts are removed from the page, pinned ones included, and once a page reaches posts older than the window next_cursor is not returned, so a walk back to a date window stops on its own. The page still costs what a page costs.

Range1 <= value <= 3650
include?string

stats returns the full stat line on every reel: engagement.shares, engagement.saves and post.ext.repost_count beside views, likes, comments, the remix counter, post.ext.music_id for original sounds and licensed music alike, and post.ext.audio_cluster_id, Instagram's audio cluster for the reel. It is served by a second source, so a cursor from a request without it cannot continue a walk with it; start from page 1. Both tokens can be combined (include=audio,stats).

dry_run?"1"

Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged.

Value in

  • "1"
cursor?string

The pagination.next_cursor from the previous page, sent back unchanged. Omit it for the first page.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://api.insightsocial.app/v1/instagram/profile/reels"
{  "success": true,  "platform": "string",  "endpoint": "string",  "schema_version": "2",  "pagination": {    "next_cursor": "string",    "has_more": true,    "page_size": 0,    "stopped_at": "since"  },  "unavailable": [    "string"  ],  "credits_used": 0,  "credits_remaining": 0,  "request_id": "string",  "cached": true,  "idempotent_replay": true,  "charge_reason": "string",  "free_call": true,  "data": {    "items": [      {        "post": {          "id": "string",          "url": "http://example.com",          "kind": "string",          "content": {            "text": "string",            "media_urls": [              "http://example.com"            ],            "thumbnail_url": "http://example.com",            "duration_seconds": 0          },          "author": {            "id": "string",            "username": "string",            "display_name": "string",            "avatar_url": "http://example.com",            "verified": true          },          "engagement": {            "views": 0,            "likes": 0,            "comments": 0,            "shares": 0,            "saves": 0          },          "flags": {            "nsfw": true,            "spoiler": true,            "pinned": true,            "deleted": true,            "likes_hidden": true,            "comments_hidden": true,            "shares_hidden": true,            "views_hidden": true,            "saves_hidden": true          },          "published_at": "2019-08-24T14:15:22Z",          "language": "string",          "ext": {            "property1": null,            "property2": null          }        }      }    ],    "total": 0,    "truncated": true,    "ext": {      "property1": null,      "property2": null    }  }}