---
title: "Instagram Post & Reel Details API"
method: GET
path: "/v1/instagram/details"
tags: ["Instagram"]
---

# Instagram Post & Reel Details API

`GET /v1/instagram/details`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/instagram/details`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Get an Instagram post, Reel or carousel — caption, likes, comments, views, media URLs, author, and per-slide children on carousels.

Paste an Instagram post or Reel URL and get the item as clean JSON: caption, like and comment counts, media URLs, author profile, duration when it is a Reel, and publish date (ISO 8601 with milliseconds). postType is customer vocabulary — image | video | carousel (never Meta's internal "Sidecar"). productType is clips | feed | carousel (carousel_container is normalized). On Reels, engagement.views is the canonical play count when the media object exposes it, and viewsSource is instagram|facebook whenever views is set. Every present counter carries a precision flag (likesIsApproximate / commentsIsApproximate / viewsIsApproximate — false: Instagram counts are exact integers). Carousels omit durationSeconds, engagement.views, viewsIsApproximate, and children[].videoUrl on image slides — the same rule as views that do not apply. Carousels ship mediaCount plus children[] with per-slide id / mediaType / thumbnailUrl / videoUrl. mediaUrlsExpireAt is the earliest Instagram CDN oe= stamp (typically ~5 days) across media URLs. previewComments is Instagram's embedded preview (usually 2); previewCommentsTruncated is true when engagement.comments is larger — it does not point at /v1/instagram/comments (that path used to return the same preview after a billed hang). Slim preview authors omit avatar/verified — those keys are null, never fabricated false. A 200 is the post only — no source / timings. Fetch is GraphQL first, then the public embed card; if GraphQL misses, a fallback path starts in parallel (55s deadline), so a login-wall window does not 502 just because the fallback never ran. A definitive miss is reason not_found | private | deleted (404, retryable false — fix the URL); a fallback "Post does not exist" verdict maps to not_found too, so deleted Reels stop cycling as retryable 502s. A timeout/login-wall cascade is fetch_exhausted (502, retry later). A resolved but hollow body is empty_payload (502, retryable). A public embed/og card is a 200 even when later paths miss. 404/502 are 0 credits. Flat 1 credit on a 200. Pass cache=true for the 24h shared cache.

Docs: https://captapi.com/apis/instagram-details

## Query parameters

- `url` string, required
- `cache` boolean

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `platform` string: Platform identifier for this response (matches the endpoint's platform).
    - `url` string: Canonical URL of the item.
    - `id` string: Stable platform ID for the item.
    - `postType` string: Content type. YouTube community: "text" | "image" | "poll" | "video" | "playlist" | "quiz". Instagram: "image" | "video" | "carousel".
    - `productType` string: Instagram surface: "clips" (Reel), "feed" (in-feed video/photo), or "carousel". Meta's carousel_container token is normalized to carousel.
    - `caption` string: Post or creative caption when the platform exposes one.
    - `description` string: Description text.
    - `publishedAt` string: Publish date (ISO 8601) when the platform exposes an absolute timestamp.
    - `durationSeconds` unknown
    - `thumbnailUrl` string: Thumbnail image URL.
    - `videoUrl` unknown
    - `author` object
      - `username` string: Account username / handle.
      - `displayName` string: Display name of the account. Canonical across profile endpoints (prefer over name).
      - `url` string: Canonical URL of the item.
      - `verified` boolean: Whether the account is verified on this platform.
      - `profileImage` string: Profile image URL. Deprecated alias of avatar on Instagram/Twitter/Threads/TikTok profile endpoints (one release).
    - `engagement` object
      - `likes` integer: Like count (number).
      - `comments` integer: Comment count.
    - `hashtags` string[]: Hashtags extracted from the text.
    - `mentions` string[]: Accounts mentioned in the text.

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

[API](https://skmtc.dev/captapi/apis/captapi-api.md) · [All operations](https://skmtc.dev/captapi/apis/captapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/captapi/apis/captapi-api/revisions/c9b9ac5ff1bd?raw)
