Instagram Profile Reels API
One POST resolves an Instagram profile URL into a paginated list of the account's Reels, newest first: shortcode, url, caption as the title, duration, account name, publish time and play count. Every row's url is accepted by the transcript and batch endpoints as-is. since_video_id returns only Reels newer than one you have already seen, and an empty answer is free. No Graph API app, access token or business account is involved.
Each page of results is one credit; a page trimmed to nothing by since_video_id costs nothing, so polling an account for new Reels is free. Failed requests are free.
On this platform
- Give the profile as its URL, instagram.com/user/; only public accounts are reachable.
- tab, sort and query are YouTube-only and are refused on an Instagram profile; Instagram has no playlists, so this is the one listing endpoint for it.
- A profile that does not exist answers 404 not_found; a page with nothing newer than since_video_id costs nothing.
/api/v2/transcripts/channelidempotentList a channel's or profile's videos, Shorts, streams or playlists
Resolve a creator into a paginated list of videos (metadata only), newest first. A channel or profile that does not exist answers 404 not_found; an existing one with no uploads answers 200 with an empty list. The platform is read from the input: a YouTube channel, or a TikTok or Instagram profile URL. Every row's url is accepted by the transcript and batch endpoints as-is. Pass since_video_id to get back only the items newer than one you've already seen - a page with nothing new is free, which makes this safe to poll on a schedule. A YouTube channel also takes tab (its Shorts, live streams, playlists or podcasts instead of its videos), sort (popular or oldest first) and query (search inside the channel). The playlists and podcasts tabs answer with data.kind playlist_list, whose rows' urls the playlist endpoint accepts as-is.
Body parameters
channelstringrequiredtab"videos" | "shorts" | "live" | "playlists" | "podcasts"optionalsort"newest" | "popular" | "oldest"optionalquerystring (1-200 characters)optionallimitinteger (1–50)optionalcursorstringoptionalsince_video_idstringoptionalRequest example
Responses
{
"ok": true,
"request_id": "req_…",
"data": {
"kind": "video_list",
"source": "channel_videos",
"platform": "instagram",
"videos": [
{
"videoId": "Dd1gQBsCWE8",
"url": "https://www.instagram.com/reel/Dd1gQBsCWE8/",
"title": "What happens when we detect an asteroid that could pose a threat to Earth?\n\nIn early 2025, NASA joined scientists around the world in tracking asteroid 2024 YR4, which had a small chance of impacting ",
"duration": 38,
"channel": "nasa",
"publishedAt": "2026-09-28T15:27:08Z",
"stats": {
"plays": 4661792
}
},
{
"videoId": "DdhFkS7KGkZ",
"url": "https://www.instagram.com/reel/DdhFkS7KGkZ/",
"title": "Our first Leader of the Uprising 🔥\n\nTune in on @paramountplus / @nfloncbs",
"duration": 23,
"channel": "nasa",
"publishedAt": "2026-09-20T17:20:00Z",
"stats": {
"plays": 7201293
}
}
],
"next_cursor": "eyJvIjoxMH0"
},
"usage": {
"credits_spent": 1,
"balance": 656,
"bytes": 0
}
}Every Instagram endpoint
Frequently asked questions
- How do I list an Instagram account's Reels?
- POST the profile URL (instagram.com/user/) as channel with a limit. The platform is read from the URL. Keep sending data.next_cursor back as cursor for older Reels until it is null.
- Does this replace the Instagram Graph API?
- For reading a public account's Reels, yes: no Meta app, app review, access token or business account, only your TranscriptFetch API key. One page costs 1 credit.
- Can I list a private account?
- No. Only public profiles are reachable. A private or nonexistent profile answers 404 not_found and costs nothing.
- How do I transcribe the Reels the list returns?
- Send the rows' urls to the batch endpoint. Instagram has no caption track, so each Reel is transcribed from audio and billed on delivery at the audio rate; a short Reel is one credit.