How to get Instagram channel reels
GET request to /v1/instagram/channel-reels with your input. You get clean JSON back in seconds for ~6 credits (0.3/result) per call — no OAuth, scraping or platform SDKs. Latest Reels from a public Instagram profile — pass userId to skip resolve; ceil(n×0.3) credits; nextCursor + hasMore.How to get Instagram channel reels (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the Instagram Channel Reels API
Send an authenticated GET request to /v1/instagram/channel-reels with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/instagram/channel-reels?url=https%3A%2F%2Fwww.instagram.com%2Fcristiano%2F" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"url": "https://www.instagram.com/cristiano/",
"userId": "173560420",
"totalReturned": 2,
"reels": [
{
"platform": "instagram",
"url": "https://www.instagram.com/reel/DabKed0MBRm/",
"id": "3934784773501752422",
"postType": "Video",
"productType": "clips",
"caption": "Por todos. Por 𝗣𝗢𝗥𝗧𝗨𝗚𝗔𝗟. 🎗️🇵🇹 #VaiDarPortugal \n\nFor everyone. For 𝗣𝗢𝗥𝗧𝗨𝗚𝗔𝗟. 🎗️🇵🇹 #ItsPortugalTime",
"description": "Por todos. Por 𝗣𝗢𝗥𝗧𝗨𝗚𝗔𝗟. 🎗️🇵🇹 #VaiDarPortugal \n\nFor everyone. For 𝗣𝗢𝗥𝗧𝗨𝗚𝗔𝗟. 🎗️🇵🇹 #ItsPortugalTime",
"publishedAt": "2026-07-05T20:23:34Z",
"durationSeconds": 43.4,
"thumbnailUrl": "https://scontent-ham3-1.cdninstagram.com/v/t51.82787-15/735415699_18606606883054533_8185581534148167588_n.jpg?...",
"videoUrl": "https://scontent-ham3-1.cdninstagram.com/o1/v/t2/f2/m86/AQOZ-XzJOT5OaiKkSWI8_rvZDNemAlRbnj6HkrsVPoqI0ansFYZltF-y2953cxfuv-jSg-XuNO3kEar8H03wckE8XaOx3OK8T3-4KMM.mp4?...",
"author": {
"username": "portugal",
"displayName": "Portugal",
"url": "https://instagram.com/portugal",
"verified": true,
"profileImage": "https://scontent-ham3-1.cdninstagram.com/v/t51.82787-19/655235091_18574607485054533_3430348023607180141_n.jpg?..."
},
"engagement": {
"views": 130177231,
"likes": 6373324,
"comments": 257545,
"viewsInstagram": 104141785,
"viewsFacebook": 26035446
},
"hashtags": [
"VaiDarPortugal",
"ItsPortugalTime"
],
"mentions": []
},
{
"platform": "instagram",
"url": "https://www.instagram.com/reel/DaU63nnAkoo/",
"id": "3933027283400542760",
"postType": "Video",
"productType": "clips",
"caption": "Toronto ❤️",
"description": "Toronto ❤️",
"publishedAt": "2026-07-03T10:18:59Z",
"durationSeconds": 46.333,
"thumbnailUrl": "https://scontent-ham3-1.cdninstagram.com/v/t51.82787-15/731058572_18747860116056421_8724303327878739257_n.jpg?...",
"videoUrl": "https://scontent-ham3-1.cdninstagram.com/o1/v/t2/f2/m86/AQNreyyq7N-5e2XVjCTkh7BFZ0wKTqOpSD3ZllobCy3C3rRiPuA_64qi66ngwZ-jwgG-66Q57v2G1V3Rvr21y-HGUbMJLY21NY_M8vk.mp4?...",
"author": {
"username": "cristiano",
"displayName": "Cristiano Ronaldo",
"url": "https://instagram.com/cristiano",
"verified": true,
"profileImage": "https://scontent-ham3-1.cdninstagram.com/v/t51.2885-19/472007201_1142000150877579_994350541752907763_n.jpg?...",
"followers": 676417576
},
"engagement": {
"views": 191553390,
"likes": 17537560,
"comments": 341631,
"viewsInstagram": 153242712,
"viewsFacebook": 38310678
},
"hashtags": [],
"mentions": []
}
],
"nextCursor": "3885465807534181465_173560420",
"hasMore": true
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | No | Instagram profile URL, @handle, or username. Omit when userId is set. The URL platform must match this endpoint's platform. |
| userId | string | No | Instagram numeric user ID (e.g. 173560420). Skips handle→ID resolve (legacy sequential WPI alone could cost ~80s). Prefer when you already have the ID from basic-profile or profile-search. |
| limit | integer | No | Max items to return (default 20, max 200). Billed per result. |
| cursor | string | No | Pagination cursor. Leave empty for the first page; then pass nextCursor from the previous response (clips:{userId}:{opaque} on the native Reels path, or legacy {mediaId}_{userId}). Stop when hasMore is false. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Frequently asked questions
What does the Instagram Channel Reels API do?
The Instagram Channel Reels API lets you list items in bulk with metadata from a public Instagram channel reels using one GET request to /v1/instagram/channel-reels. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Instagram Channel Reels API cost?
At the default limit this endpoint costs 6 credits (0.3 per result). Billing scales with how many results you request. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a Instagram API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why is this 502 UPSTREAM_UNAVAILABLE on @vogue / @theverge / @menshealth?
Those were live misses that burned the 100s deadline: native clips walked ~45s, then Decodo's GraphQL profile scrape used a 75s HTTP timeout and never left time for Apify. Decodo now runs beside native and is killed at 16s so the actor still gets ~40s. A 6h last-good page is labelled stale 200 at 0 credits when we have a prior snapshot. A miss with no snapshot is still 502 (retryable, 0 credits). Prefer userId from basic-profile to skip resolve.
Is the Instagram Channel Reels API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get Instagram channel reels?
Start free with 100 credits — no credit card required.
Get your free API key