Instagram · Guide

How to get Instagram highlights

TL;DR
To get Instagram highlights, sign up for a free Captapi key, then send one GET request to /v1/instagram/highlights with your input. You get clean JSON back in seconds for 1 credit per call — no OAuth, scraping or platform SDKs. Persistent Story Highlight albums for a public profile — id, title, cover, owner. Flat 1 credit.

How to get Instagram highlights (step by step)

  1. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 2

    Call the Instagram Highlights API

    Send an authenticated GET request to /v1/instagram/highlights with your input. No OAuth, no scraping setup.

  3. 3

    Read the JSON response

    Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.

Code example

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_..."

What the response looks like

{
  "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 (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.

Request 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.

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.

Ready to get Instagram highlights?

Start free with 100 credits — no credit card required.

Get your free API key