Instagram
GET /v1/instagram/highlights

Instagram Highlights API

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

1 credit per request
TL;DR
Persistent Story Highlight albums for a public profile — id, title, cover, owner. Flat 1 credit. The Instagram Highlights API (Instagram) is a single authenticated GET request to /v1/instagram/highlights that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.

What is the Instagram Highlights API?

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. Native tray is often login/WAF gated; we read edge_highlight_reels from logged-out web_profile_info, then a datacenter/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.

What you get

  • id / title / coverUrl / itemCount / owner from a full tray or WPI shelf
  • 503 ids_unresolvable (0 credits) instead of HTML-only ids that 404 on details
  • Persistent albums (not live Stories)
  • Flat 1 credit on a full shelf; 5xx do not bill

Try it

Open in Playground

Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).

Parameters

Sign in to run live
curl "https://api.captapi.com/v1/instagram/highlights?url=https%3A%2F%2Fwww.instagram.com%2Fnatgeo%2F" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

Edit the parameters and the code updates instantly. Switch languages and hit copy.

Example response

{
  "success": true,
  "data": {
    "userId": "787132",
    "username": "natgeo",
    "totalReturned": 1,
    "degraded": true,
    "degradedReason": "profile-html-ids-only",
    "highlights": [
      {
        "id": "17895558443196850",
        "title": null,
        "coverUrl": null,
        "itemCount": null,
        "owner": null
      }
    ]
  }
}

Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.

Response structure

A successful call returns success and a data object with the following fields:

Top-level fields

  • userIdNumeric Instagram user id of the profile.
  • usernameProfile username.
  • totalReturnedNumber of highlight albums in this response.
  • degradedtrue when every row is an HTML-ids handoff (no title/cover). false on a full tray or an empty confirmed shelf.
  • degradedReason"profile-html-ids-only" when degraded is true. null otherwise — always keyed.

Highlights

Each item in highlights contains:

  • idNumeric highlight id (no highlight: prefix) — pass to /v1/instagram/highlights-details.
  • titleAlbum title as shown on the profile (GRWM, Travel, …). Null on the HTML-ids rung.
  • coverUrlCover image URL for the album. Null on the HTML-ids rung.
  • itemCountNumber of items in the album when Instagram exposes it. Null on the HTML-ids rung.
  • ownerAlbum owner {id, username, url}. Null on the HTML-ids rung — not filled from the envelope.

Parameters

NameTypeRequiredDescription
urlstringNoInstagram profile URL, @handle, or username. Omit when userId is set.
userIdstringNoNumeric Instagram user ID. Prefer when known — skips handle→ID resolve. When only userId is set we reverse-resolve the username so the WPI / profile-HTML shelf can still run.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.

Using an AI agent? This endpoint is the MCP tool instagram_highlights via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/instagram/highlights and parse the JSON response.

Use cases

Brand shelf inventory

List a public account's persistent Highlight albums (GRWM, Travel, Products). Titles are niche signal without an extra AI call. An HTML-only shelf is 503 — those ids do not resolve on highlights-details.

Handoff to album items

Take highlights[].id from a full shelf into /v1/instagram/highlights-details. Details cannot invent an id — a 503 list means there is no handoff.

Competitor albums

Compare which Highlight collections a competitor keeps on the profile versus live 24h Stories.

Frequently asked questions

What does the Instagram Highlights API do?+

The Instagram Highlights API lets you list items in bulk with metadata from a public Instagram highlights using one GET request to /v1/instagram/highlights. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Instagram Highlights API cost?+

Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Instagram API key or OAuth?+

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.

Why did I get 502 and then 503 on the same account?+

Those are two walls, not a retry that got further. Resolver miss is 502 (no user id yet). Tray miss is 503 (id in hand, albums still withheld). Both are 0 credits. Pass userId from /v1/instagram/basic-profile or /v1/instagram/profile-search to skip the resolver; we then reverse-resolve the username so the WPI / profile-HTML shelf can still run. 404 only when Instagram confirms the account is gone.

If Highlights is down, can I still call Highlights Details?+

Only with an id you already have. Details cannot invent an album id — it needs one from this list, or from Instagram's web UI. When the list is down both are. Platform /status already counts these 5xx; there is no separate per-endpoint incident flag.

Why is highlights[] just {id} with the other keys null?+

We no longer return that shape. Instagram's public page can expose /stories/highlights/{id} links with no title/cover, but those ids 404 on /v1/instagram/highlights-details. The list now skips them and answers 503 ids_unresolvable (retryable, 0 credits) instead of a billed 200 that cannot compose with details.

Is the Instagram Highlights API suitable for production use?+

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

More Instagram APIs

Ready to use the Instagram Highlights API?

Sign up, grab your key, and make your first call in 60 seconds.

Instagram Highlights API | Captapi — Captapi