Instagram Post API
Pass a public Instagram post or Reel URL and get caption, author, engagement, and media URLs in the shared Social Fetch JSON envelope.
GET /v1/instagram/posts1 credit base, +10 with `downloadMedia`. Up to 11 credits max.
About this endpoint
Many pipelines already hold a post link from a feed, inbox, or scrape queue. What they need next is structured fields for that one media item: caption, shortcode, who posted it, like and comment counts, and whether the asset is an image, video, or carousel. Rebuilding Instagram's media GraphQL for every shortcode is a maintenance tax that breaks without notice.
`GET /v1/instagram/posts` takes a public post or Reel `url` (`/p/…`, `/reel/…`, or `/tv/…`). On a completed lookup, branch on `data.lookupStatus` first — `found`, `not_found`, or `restricted` (age-gated or otherwise non-scrapable). When status is `found`, read `data.post` (id, shortcode, url, caption, takenAt), `data.owner`, `data.metrics`, and `data.media` (including carousel children when present). Optional `trim=true` shrinks the payload; optional `downloadMedia=true` fills `data.downloads` with permanent CDN URLs.
This route is one media item by URL. To page a handle's feed use `GET /v1/instagram/profiles/{handle}/posts`. For spoken text use `GET /v1/instagram/posts/transcript`. Pricing is 1 credit for a completed lookup; `downloadMedia=true` adds 10 credits (11 total). Confirm with `meta.creditsCharged` on every response.
Instagram Post API FAQ
How do I get an Instagram post or Reel by URL via API?
Call `GET /v1/instagram/posts` with your Social Fetch API key (`x-api-key`) and a public post or Reel `url` query param. Read `data.lookupStatus`, then `data.post`, `data.owner`, `data.metrics`, and `data.media`. Full parameters and examples are in the API docs.
How much does the Instagram Post API cost?
1 credit per successful completed lookup. If you pass `downloadMedia=true`, the charge is 11 credits (1 base plus a 10-credit hosted download surcharge). Always trust `meta.creditsCharged` on the response over a spreadsheet estimate.
What URL formats does the Instagram Post API accept?
Public Instagram post and Reel URLs, including `/p/…`, `/reel/…`, and `/tv/…` links. Private, deleted, or restricted media resolve as `not_found` or `restricted`. Pass the link as the `url` query param.
What fields are in the Instagram post response?
When `lookupStatus` is `found`, you get `post` (id, shortcode, public URL, caption, takenAt, optional ad/affiliate flags), `owner` (handle, verification, avatar when present), `metrics` (likes, comments, playCount for video), and `media` (mediaType, display/thumbnail/video URLs, dimensions, carousel children for sidecars). Tagged users and coauthors appear when Instagram exposes them.
What does downloadMedia do on Instagram posts?
When `downloadMedia=true`, successful responses can include `data.downloads`: permanent CDN URLs for image or video assets instead of short-lived Instagram CDN links. That option adds 10 credits on top of the 1-credit base lookup.
What does restricted mean for an Instagram post lookup?
`lookupStatus` of `restricted` means the media exists but is age-gated or otherwise not scrapable into the public payload. Post, owner, metrics, and media are null. Keep `meta.requestId` if you need support on that row.
Instagram post detail vs profile posts vs transcript?
Use `GET /v1/instagram/posts` when you already have a post or Reel URL and need metadata. Use `GET /v1/instagram/profiles/{handle}/posts` to page a feed by username. Use `GET /v1/instagram/posts/transcript` when you need spoken text. They are separate paths on the Instagram hub.
Other Instagram endpoints
- ProfileGET /v1/instagram/profiles/{handle}
- Basic profileGET /v1/instagram/profiles/{userId}/basic
- Profile postsGET /v1/instagram/profiles/{handle}/posts
- Profile reelsGET /v1/instagram/profiles/{handle}/reels
- Profile highlightsGET /v1/instagram/profiles/{handle}/highlights
- HighlightGET /v1/instagram/highlights/{highlightId}
- CommentsGET /v1/instagram/posts/comments
- TranscriptGET /v1/instagram/posts/transcript