Instagram API reference
Public Instagram profiles, media, stories, highlights, following, comments, transcripts, hashtags, locations, audio, trending Reels and search over REST with one consistent shape — one API key, no Graph app review.
Social Fetch's Instagram tag is a set of GET /v2/instagram/... routes. Pass a handle, profile URL, user id, shortcode, media URL, hashtag, location id or audio id and get { data, meta } with data.lookupStatus, meta.requestId, meta.creditsCharged, and meta.version: "v2". Authenticate with x-api-key only — no Meta app review, business account, or page token.
These pages are generated from the public OpenAPI spec. Product overview, examples, and FAQs live on the Instagram platform hub.
Credits
Most Instagram routes are 1 credit per completed lookup, and paginated calls bill each page, including a last page that comes back empty. Exceptions: the engagement audit is 5 for an audited profile and 1 for a private or missing one; the profile route adds 1 per include (recentMedia, about) it serves; and GET /v2/instagram/media/{media}?include=files adds 10 (11 in total) when the files are hosted. Trust meta.creditsCharged.
Identifiers
Each v2 route takes the identifier named in its path, and a bad one is a 400 before anything is billed.
| You have | Pass it as | Notes |
|---|---|---|
instagram.com/nike | {profile} = nike, @nike, or the URL | Handle with or without @, or a profile URL |
| A user id from an earlier response | {profile} = 13460080 | Digits alone are read as a user id |
instagram.com/p/DePzV26vLFB/ | {media} = DePzV26vLFB or the URL | Shortcode, post, Reel or TV URL, or the numeric media id |
A comment id from the comments list | {commentId} = 17858893269036513 | Digits only; read it from GET /v2/instagram/media/{media}/comments |
instagram.com/stories/highlights/17921…/ | {highlightId} = 17921… or the URL | Find ids with GET /v2/instagram/profiles/{profile}/highlights |
instagram.com/explore/tags/nike/ | {hashtag} = nike, #nike, or the URL | Any letter case. Spaces and punctuation are a 400. Find tags with GET /v2/instagram/hashtags/search |
instagram.com/explore/locations/213385402/ | {locationId} = 213385402 or the URL | Digits (up to 19), or a location URL. Find ids with GET /v2/instagram/locations/search, or location.id on a post |
instagram.com/reels/audio/1234567890/ | {audioId} = 1234567890 | Digits (up to 19). Find ids with GET /v2/instagram/audio/search, or audio.id on a Reel |
instagram.com/popular/harry-potter/ | {topic} = harry%20potter or the URL | A word or phrase, or the topic's Popular page link |
instagram.com/share/… | not accepted | Open the link and pass the post URL it opens |
Post and Reel links are not profiles, and profile links are not media; the error says what to send instead. A story link (instagram.com/stories/{handle}/…) works as a profile. /v2/instagram/profiles/search, /v2/instagram/hashtags/search, /v2/instagram/locations/search and /v2/instagram/audio/search are search routes, so the account whose handle is search is reached as /v2/instagram/profiles/@search and the tag named search as /v2/instagram/hashtags/%23search.
Pagination
List routes return data.page with nextCursor, hasMore and returnedCount. Pass data.page.nextCursor back as cursor while data.page.hasMore is true. Cursors are opaque and tied to the route (and the tab, sort, query, post or other identifier) that issued them; a cursor from somewhere else is a 400 bad_request. A list can end on an empty page (hasMore was true, and nothing more came back): like any served page, it costs 1 credit. Query parameters are passed once: include=recentMedia,about, not include=recentMedia&include=about.
Profiles
Instagram profile
`GET /v2/instagram/profiles/{profile}` — one profile by handle, URL or user id; `include` adds recent media and About details.
Profile media
`GET /v2/instagram/profiles/{profile}/media` — posts, Reels or tagged posts, cursor-paged.
Profile stories
`GET /v2/instagram/profiles/{profile}/stories` — live stories from the last 24 hours.
Profile highlights
`GET /v2/instagram/profiles/{profile}/highlights` — saved highlight albums.
Highlight
`GET /v2/instagram/highlights/{highlightId}` — the stories inside one highlight.
Following
`GET /v2/instagram/profiles/{profile}/following` — accounts a profile follows, cursor-paged.
Engagement audit
`GET /v2/instagram/profiles/{profile}/engagement` — engagement rate of recent posts (5 credits for an audited profile, 1 for a private or missing one).
Media, comments and transcripts
Post or Reel
`GET /v2/instagram/media/{media}` — one post or Reel by shortcode, URL or media id; `include=files` hosts the original files (+10 credits, 11 in total).
Comments
`GET /v2/instagram/media/{media}/comments` — a post or Reel's top-level comments, `top` or `newest` first, cursor-paged.
Comment replies
`GET /v2/instagram/media/{media}/comments/{commentId}/replies` — the replies in one comment thread, oldest first, cursor-paged.
Transcript
`GET /v2/instagram/media/{media}/transcript` — what is said in a post or Reel video, with its length in seconds.
Hashtags
Hashtag
`GET /v2/instagram/hashtags/{hashtag}` — a hashtag's id, post count and trending flag, by name or tag link.
Hashtag media
`GET /v2/instagram/hashtags/{hashtag}/media` — the live `top`, `recent` or `reels` feed under a hashtag, cursor-paged.
Search hashtags
`GET /v2/instagram/hashtags/search` — find hashtags by keyword, with their post counts.
Locations
Location
`GET /v2/instagram/locations/{locationId}` — a place's name, coordinates and category.
Location media
`GET /v2/instagram/locations/{locationId}/media` — posts and Reels tagged at a place, top or recent, cursor-paged.
Search locations
`GET /v2/instagram/locations/search` — find places by name; each result's `id` is a location id.
Audio
Audio
`GET /v2/instagram/audio/{audioId}` — a song or original sound: title, artist, length and exact Reel count.
Audio media
`GET /v2/instagram/audio/{audioId}/media` — the Reels that use an audio, cursor-paged.
Search audio
`GET /v2/instagram/audio/search` — find songs and original sounds by keyword; each result's `id` is an audio id. An id can occasionally resolve to `not_found`: then try the result's `assetId`.
Search and discovery
The hashtag, location and audio searches are listed with their groups above. The other search routes, Popular topics and trending Reels:
Search Reels
`GET /v2/instagram/reels/search` — keyword Reel discovery as media objects, cursor-paged.
Search profiles
`GET /v2/instagram/profiles/search` — find accounts by keyword, cursor-paged. The account named `search` is `@search`.
Topic
`GET /v2/instagram/topics/{topic}` — Instagram's Popular page for a topic: its details and the posts it curates, cursor-paged.
Trending Reels
`GET /v2/instagram/reels/trending` — a fresh batch of the Reels Instagram is trending right now. No parameters; call it again for another batch.
Related
- Instagram platform hub — coverage, FAQs, and credit notes
- How to scrape Instagram data
- API reference — all platforms