Instagram hub

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-posts

1 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, restricted, 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 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: []. 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 Instagram returns them (HTTP 404 → not_found; a private account → private; an age- or region-restricted account → restricted). 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.