Instagram tagged posts API
Page posts other accounts tagged a user in — by numeric Instagram user id — in the shared Social Fetch JSON envelope.
GET /v1/instagram/profiles/{userId}/tagged-posts1 credit base. With `hostMedia`, +2 credits per hosted asset (up to 24 assets, 49 credits max).
About this endpoint
`GET /v1/instagram/profiles/{userId}/tagged-posts` lists the public Tagged tab for a digits-only Instagram user id. This is not the profile grid. `GET /v1/instagram/profiles/{handle}/posts` pages the owner's own feed by username. On a completed call, branch on `data.lookupStatus` (`found`, `private`, or `not_found`), then read `data.posts` and `data.page`. Each row reuses the profile-post card and always includes `owner` (`handle` and `platformUserId` when Instagram exposes them, otherwise `null`). `createdAt` is ISO-8601 when we have a timestamp: Instagram's own value when the Tagged tab includes one, otherwise derived from the media id. It is null only when neither is available. When `data.page.hasMore` is true, pass `data.page.nextCursor` as the opaque `cursor` query param. Bill from `meta.creditsCharged`.
This route does not resolve a username to an id. If you only have a handle, call `GET /v1/instagram/profiles/{handle}` or `GET /v1/instagram/profiles/{userId}/basic` first and use `data.profile.platformUserId` here.
`displayUrl`, `thumbnailUrl`, and `videoUrl` are source-platform CDN links when Instagram exposes them. They can expire or be rejected outside the original retrieval context and are not SocialFetch-hosted assets. Tagged-tab videos often include a cover image only (`displayUrl` / `thumbnailUrl`) with no playback `videoUrl`. For SocialFetch-hosted copies of whatever source URLs are present, pass `hostMedia=true` (up to 24 assets / 90-day retention; +2 credits per successfully stored asset; failures are reported per asset and not charged). Source CDN fields stay unchanged.
Instagram tagged posts API FAQ
How do I list Instagram tagged posts for a user via API?
Call `GET /v1/instagram/profiles/{userId}/tagged-posts` with your Social Fetch API key (`x-api-key`) and the numeric Instagram user id in the path (digits only). Read `data.lookupStatus`, then `data.posts` and `data.page`. See the API docs for parameters and examples.
How much does the Instagram tagged posts endpoint cost?
1 credit per successful list page by default. With `hostMedia`, +2 credits per hosted asset (up to 24 assets, 49 credits max). Always bill from `meta.creditsCharged` on the response.
Tagged posts vs profile posts?
This route is the Tagged tab: posts authored by other accounts that tagged the requested user. `GET /v1/instagram/profiles/{handle}/posts` is the owner's own grid, keyed by username. They are separate operations.
I only have an Instagram username. How do I call this?
This path takes a numeric user id, not a handle. Resolve the username with `GET /v1/instagram/profiles/{handle}` or `GET /v1/instagram/profiles/{userId}/basic`, then pass `data.profile.platformUserId` into this route.
How does pagination work on Instagram tagged posts?
Each response includes `data.page.nextCursor` and `data.page.hasMore`. When `hasMore` is true, pass `nextCursor` as the `cursor` query param on the next request. The cursor is opaque.
What fields are in each tagged post?
Items can include id, shortcode, mediaType, caption, createdAt (ISO-8601; from Instagram when present, otherwise from the media id), public URL (Reels use `/reel/` even when the upstream permalink is `/p/`), display and thumbnail URLs, video URL when a playback file is present (Tagged-tab clips often have a cover image only), likeCount, commentCount, playCount for video, dimensions, taggedUsers when Instagram lists people tagged in that media, and owner (handle and platformUserId, or null). Source CDN media URLs are transient — do not treat them as durable embeds.
Can I embed tagged-post image URLs in my own HTML?
Not from the source CDN fields. `displayUrl`, `thumbnailUrl`, and `videoUrl` are Instagram links that can expire or fail with signature errors outside the fetch context. For SocialFetch-hosted copies on a tagged-tab page, call the same route with `hostMedia=true` and use `hostedMedia[].url` (valid until `expiresAt`; objects are retained up to 90 days).
What happens for private, missing, or empty tagged tabs?
Branch on `data.lookupStatus`. An empty public Tagged tab is `found` with `posts: []`. With the current upstream, unknown and private ids often look the same — HTTP 200, `found`, empty `posts` — rather than a distinct `not_found` or `private`. Those statuses still apply when the provider actually signals them (HTTP 404 → `not_found`; a restricted envelope → `private`). Keep `meta.requestId` if you need support on a failed list call.
Do I need Instagram Graph API access to list tagged posts?
No. Social Fetch returns publicly visible Tagged-tab data for enrichment-style lookups. Meta's Instagram Graph API is for accounts you manage or that grant your app access — not arbitrary public tagged feeds.
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}
- Profile engagementGET /v1/instagram/profiles/{handle}/engagement
- SearchGET /v1/instagram/search