Why the Instagram Graph API won't download reels — and what does
Developers reach for the Graph API because it is the official one, then spend a week on App Review to discover it answers a different question. It is built for managing your own account, not for reading other people's public posts. This guide draws the line between the two, so you stop looking for an endpoint that is not there.
Updated
What the Graph API is for
It is an account-management API: publish to a professional account you own, read its insights, moderate its comments. The media_url field exists and points at real files — for media that belongs to the account that granted your token. There is no call that takes an arbitrary public reel and returns its video.
The three walls
First, every media endpoint is scoped to the authorised account. Second, the Basic Display API — the one that used to read a consenting user's own feed — was shut down in December 2024. Third, oEmbed, the only endpoint that accepts a public URL, returns embed HTML and a thumbnail, needs App Review to use, and never returns a video file.
A public reel through a downloader API
The request is the link and your key. There is no OAuth flow, no App Review and no Instagram account on your side. The endpoint accepts reels, posts, carousels and stories in whatever form the share sheet produced.
Terminalcurl -s "https://api.saveapi.org/v1/instagram" \ -H "Authorization: Bearer sk_live_xxxx" \ -G --data-urlencode "url=https://www.instagram.com/reel/ABC123/"
Read the response
medias[] holds every file in the post in order, each with a type and a direct URL to the source CDN. meta carries the author and caption. A carousel with two photos and a clip gives two image entries and one video entry; the shape does not change per post.
Pythondata = resolve("https://www.instagram.com/reel/ABC123/")
for media in data["medias"]:
# "video" yoki "image"; karuselda post tartibida keladi
print(media["type"], media["url"])
print(data["meta"]["author"], data["meta"]["title"])When the Graph API is still the right tool
If you are publishing to your own account, reading its analytics or replying to its comments, stay with the Graph API — that is what it is for and nothing here replaces it. Use a downloader API for the one thing it cannot do: resolving a public post you do not own.
Questions before you build
- Is using a downloader API allowed?
- The endpoint resolves public posts to the URLs Instagram already serves to any visitor; what you may do with the file is decided by the creator's rights and the platform's terms, not by the API. Build for saving, archiving and reposting with permission.
- Do I get the same quality as the Graph API's media_url?
- You get the rendition Instagram publishes for the post — the same file a browser plays. The response does not carry a formats[] list for Instagram, so there is no quality selection to make.
- Can I fetch a whole profile?
- No — the API takes a post, reel or story link, not a username. Stories are the exception: instagram.com/stories/<username>/ returns everything that account has active right now.
Platform references used here
Other guides
Run this guide with your own key
Key in under a minute. 1,000 free credits, no card, no expiry.