---
title: "Instagram Highlights API"
method: GET
path: "/v1/instagram/highlights"
tags: ["Instagram"]
---

# Instagram Highlights API

`GET /v1/instagram/highlights`

## Request

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

Persistent Story Highlight albums for a public profile — id, title, cover, owner.

Pass a profile URL/@handle or numeric userId and get that account's Story Highlight albums as clean JSON — persistent collections (GRWM, Travel, Products…), not live 24h Stories. Each item always keys id, title, coverUrl, itemCount, and owner{id,username,url} — null when that rung did not expose them, never absent. The native tray is often login-gated; we read highlights from the logged-out profile data first, then the mobile highlights tray. Bare /stories/highlights/ ids from public profile HTML are not returned — those ids do not resolve on /v1/instagram/highlights-details, so an HTML-only shelf is 503 ids_unresolvable (retryable, 0 credits) instead of a billed 200 that leads to 404s. userId skips handle→ID resolve; when only userId is set we reverse-resolve the username so the WPI shelf can still run. A live handle that neighbouring endpoints resolve is never 404: resolver miss is 502 (pass userId from /v1/instagram/basic-profile or /v1/instagram/profile-search), tray miss or unresolvable HTML ids is 503 (0 credits). 404 only when Instagram confirms the account is gone. This list and /v1/instagram/highlights-details are a pair: details needs an id only a full shelf (or Instagram's web UI) can give you. Flat 1 credit on a full shelf. Pass cache=true for the 24h shared cache.

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

## Query parameters

- `url` string
- `userId` string
- `cache` boolean

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `userId` string: Numeric Instagram user id of the profile.
    - `username` string: Profile username.
    - `totalReturned` integer: Number of highlight albums in this response.
    - `degraded` boolean: true when every row is an HTML-ids handoff (no title/cover). false on a full tray or an empty confirmed shelf.
    - `degradedReason` string: "profile-html-ids-only" when degraded is true. null otherwise — always keyed.
    - `highlights` object[]
      - `id` string: Numeric highlight id (no highlight: prefix) — pass to /v1/instagram/highlights-details.
      - `title` unknown
      - `coverUrl` unknown
      - `itemCount` unknown
      - `owner` 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)
