> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/instagram/v2-instagram-profiles-profile-media>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/instagram/v2-instagram-profiles-profile-media.mdx>

---

# Instagram Profile Media API

One list for a profile's posts, Reels and the posts it is tagged in, by handle, profile URL or numeric user id, in the same media object every v2 list returns.

`GET /v2/instagram/profiles/{profile}/media` takes a handle (with or without `@`), a profile URL or a numeric user id, and a `tab`: `posts` (the profile grid, the default), `reels` or `tagged` (posts other accounts tagged this profile in). Read `data.lookupStatus` (`found`, `private` or `not_found`), then `data.media` and `data.page`. When `data.page.hasMore` is true, pass `data.page.nextCursor` as `cursor` with the same `tab` and profile. A cursor from another `tab` is a 400. Each page is 1 credit; bill from `meta.creditsCharged`. `meta.version` is `v2`.

Every item is the shared v2 media object: id, shortcode, URL, `kind` (`post` or `reel`), media type, caption, time, owner, like, comment, play, share and save counts, image and video URLs, carousel items, audio, co-authors, tagged users and location. Every field is always present and is `null` when Instagram doesn't say. In the Reels list `taggedUsers` is `null`, because that list doesn't say who is tagged; fetch the Reel with `GET /v2/instagram/media/{media}` for the full list. A private or missing profile returns an empty `data.media`.

## Request

- **Endpoint:** `GET /v2/instagram/profiles/{profile}/media`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by handle or user id
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v2/instagram/profiles/profile/media/get)
- **Platform page:** [/platforms/instagram](https://www.socialfetch.dev/platforms/instagram)

## FAQ

### How do I list an Instagram profile's posts with the v2 API?

Call `GET /v2/instagram/profiles/{profile}/media` with your Social Fetch API key (`x-api-key`) and a handle, profile URL or numeric user id in the path. Read `data.media`. When `data.page.hasMore` is true, send `data.page.nextCursor` as `cursor` to get the next page.

### How do I get a profile's Reels or the posts it is tagged in?

Pass `tab=reels` or `tab=tagged`. Keep the same `tab` on every page: a cursor from another tab is a 400. Give a handle or a user id for any tab; the credit price is the same.

### How much does it 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 does a private or missing profile return?

`lookupStatus: private` or `not_found` with an empty `data.media`, still a completed lookup. A public profile with nothing in the chosen list is `found` with an empty `data.media`.

### Do I need Instagram Graph API access?

No. Social Fetch returns publicly visible posts and Reels with an API key. Meta's Instagram Graph API is for accounts you manage or that grant your app access.
