---
title: "Instagram Trending Reels API"
method: GET
path: "/v1/instagram/trending-reels"
tags: ["Instagram"]
---

# Instagram Trending Reels API

`GET /v1/instagram/trending-reels`

## Request

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

Cache-first trending Reels.

On-demand trending Reels from Instagram's logged-out /reels Explore feed (not keyword search). Every payload carries listing: "reels_feed" is the feed itself; "hashtag_clips" means Instagram was not serving the logged-out feed (it has gone dark for every country for days at a time — 6–10 Oct 2026) and the rows are instead the current top clips for the country's hashtags (listingHashtags, e.g. india/bharat/mumbai) merged and ranked by views, with a note saying exactly that. It is a labelled stand-in, not Instagram's own trending signal — branch on listing if that distinction matters to you. Flat 2 credits on a live or cache-fresh 200 of either listing; a miss on both with a last-good snapshot is labelled stale at 0 credits (held 7 days; fetchedAt is the scrape time, servedAt the handover) and only then 502. Default cache=true is cache-first (4h per-country TTL). cache=false forces a live scrape — feed listing ~18s, Polarıs hydrate cut at 50s, then the hashtag grids (~5–10s) if the feed missed; 110s hard ceiling. Envelope: platform, country, countryCode, cached, source (native | cache), listing, requested, totalReturned, hasMore (always false — no cursor), nextCursor null, truncatedReason (hydrate_deadline | age_filter | upstream_supply | null), fetchMs / hydrateMs / totalMs, fetched / hydrated / hydrateSkipped. Each reel splits videoUrlExpiresAt / thumbnailUrlExpiresAt and flags likesIsApproximate / commentsIsApproximate. engagement.views is omitted on reels_feed rows (logged-out /reels never exposes play counts) and present on most hashtag_clips rows. limit max 50 (store caps around 24). No fallback path on this endpoint. For a live hashtag scrape of your own tag use Instagram Reels Search.

Docs: https://captapi.com/apis/instagram-trending-reels

## Query parameters

- `country` string
- `limit` integer
- `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).
    - `country` string: Localized country name used for native geo (e.g. United States).
    - `countryCode` string: ISO-3166 alpha-2 for the same country (e.g. US). Prefer this for joins.
    - `cached` boolean: true when served from the per-country response cache (4h TTL); false on a live scrape. Billing is flat 2 credits either way.
    - `totalReturned` integer: Number of items returned in this response.
    - `requested` integer: The limit you asked for.
    - `hasMore` boolean: Always false — this Explore window has no cursor.
    - `nextCursor` unknown
    - `truncatedReason` unknown
    - `reels` object[]
      - `platform` string: Platform identifier for this response (matches the endpoint's platform).
      - `url` string: Canonical URL of the item.
      - `id` string: Id of this reels item.
      - `shortcode` string: Instagram shortcode of the post (posts/reels only).
      - `postType` string: Content type. YouTube community: "text" | "image" | "poll" | "video" | "playlist" | "quiz". Instagram: "image" | "video" | "carousel".
      - `productType` string: Platform product type (e.g. clips, feed). Null when not applicable (image/carousel) — never an empty string.
      - `section` unknown
      - `topic` unknown
      - `caption` string: Reel caption. description is not duplicated on this endpoint.
      - `description` string: Description of this reels item.
      - `publishedAt` string: Publish date (ISO 8601) when the platform exposes an absolute timestamp.
      - `durationSeconds` unknown
      - `thumbnailUrl` string: Thumbnail image URL.
      - `videoUrl` string: Playback URL when the platform exposes one. Content type varies by platform — check videoType (hls vs mp4) before treating it as a downloadable file.
      - `author` object: Author name or handle.
        - `username` string
        - `url` string: Canonical URL of the item.
      - `engagement` object: Engagement metrics for the item.
        - `views` integer, nullable
        - `likes` integer
        - `comments` integer
        - `viewsInstagram` integer, nullable
        - `viewsFacebook` integer, nullable
      - `hashtags` string[]: Hashtags extracted from the text.
      - `mentions` string[]: Accounts mentioned in the text.
    - `note` string: Only on listing=hashtag_clips: states that Instagram's logged-out Reels feed was unavailable (and why), that the rows are a labelled hashtag-clips stand-in ranked by views, and that they are not Instagram's own trending feed.
    - `cachedAt` string: Cached at. Example: "2026-07-29T18:00:00Z".
    - `stale` boolean: Stale. Example: true.
    - `ageHours` integer: Age hours. Example: 32.
    - `source` unknown

## 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)
