Instagram Hashtag Media API
Page the posts and Reels under a hashtag as structured JSON: the top view, the newest posts, or Reels only, in the shared Social Fetch v2 envelope.
GET /v2/instagram/hashtags/{hashtag}/media1 credit Failed requests are free
About this endpoint
GET /v2/instagram/hashtags/{hashtag}/media takes the hashtag in the path, with or without a leading #, or an instagram.com /explore/tags/<name>/ link. The optional tab query picks the view: top (default) for the posts and Reels Instagram ranks first, recent for the newest posts, or reels for Reels only. On a completed lookup, read data.lookupStatus (found or not_found), then data.media and data.page (hasMore, nextCursor).
Each item is the media object every v2 list returns: id, shortcode, url, kind (post or reel), mediaType, caption, createdAt (ISO-8601), the owner, metrics (likeCount is null and likesHidden true when the author hides likes), media URLs, carousel, audio, coauthors, location and isPaidPartnership. taggedUsers is a list on the top and reels views and null on recent items that don't carry tags. Every field is always present and null when Instagram doesn't say.
The views show what Instagram shows now, which reaches back days, not months, and there is no date filter: poll tab=recent and stop paging at the date you need. When data.page.hasMore is true, pass data.page.nextCursor as cursor; a cursor keeps the view it came from, so you can omit tab on later pages. Pages can overlap on Instagram's side, so repeated posts are dropped and the list ends when a page brings nothing new. Instagram CDN URLs expire. Bill from meta.creditsCharged, per page. For a tag's post count use GET /v2/instagram/hashtags/{hashtag}.
Instagram Hashtag Media API FAQ
How do I list posts under an Instagram hashtag via API?
Call GET /v2/instagram/hashtags/{hashtag}/media with your Social Fetch API key (x-api-key) and the hashtag in the path. Choose a view with tab=top|recent|reels. Read data.lookupStatus, data.media and data.page in the JSON response. See the API docs for parameters and examples.
How much does the Instagram Hashtag Media API cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged — that field is the billing source of truth. Each paginated page is a separate billed request.
What is the difference between the top, recent and reels tabs?
top is Instagram's popular view for the tag, mixing posts and Reels. recent is the newest posts first, which is the view to poll for new content. reels is Reels only. Each tab pages on its own cursor, and the cursor remembers its tab.
Can I filter hashtag posts by date?
There is no date filter, because Instagram has none. The views are live and reach back only a short time. Use tab=recent and stop paging when you reach the date you need.
How does pagination work?
When data.page.hasMore is true, pass data.page.nextCursor as cursor on the next request. The cursor keeps the view, so you can leave tab out, but sending a different tab, or using the cursor for another hashtag, returns 400. The list ends when hasMore is false, even if Instagram would keep serving pages, so a client never loops.
What does not_found mean, and what if a hashtag returns nothing?
not_found means no public post uses the hashtag. found with an empty media list is the end of the list, or a hashtag whose posts Instagram doesn't show publicly, as with some sensitive tags. Both come back as a normal response, billed once.
Other Instagram endpoints
- ProfileGET /v2/instagram/profiles/{profile}
- Profile mediaGET /v2/instagram/profiles/{profile}/media
- Profile highlightsGET /v2/instagram/profiles/{profile}/highlights
- Profile storiesGET /v2/instagram/profiles/{profile}/stories
- Profile followingGET /v2/instagram/profiles/{profile}/following
- HighlightGET /v2/instagram/highlights/{highlightId}
- Profile engagementGET /v2/instagram/profiles/{profile}/engagement
- Search reelsGET /v2/instagram/reels/search