instagram-api/highlights
The story highlight tray of a public profile: id, title and cover image for each one. Read from the same logged-out page as the profile, which already carried it.
| Name | What it is |
|---|---|
handle | The Instagram handle, without the @. |
handlefollower_countidtitlethumbnail_urlurlA field we cannot read comes back null, never 0. A zero would be a claim about the account; null is a fact about our collection.
A handle that does not exist returns HTTP 200 on Instagram, with a generic page and no follower_count. That is why this route keeps the profile anchor instead of parsing highlights alone: without it, a typo would come back as an empty tray with success true.
Measured on 2026-10-01 against the committed 829 KB page for nasa: the tray carries 5 highlights — Roman, Wallpapers, Artemis III, Artemis II, MoonTunes — and has_next_page comes back false, so that is the whole tray and has_more says so.
1 credit per call. A call that finds nothing costs nothing.
Because it downloads it again. The cache is per endpoint and params, so profile and highlights for the same handle are two fetches of about 830 KB each, through the paid residential path. What is free is the parsing, not the bandwidth — and threads/posts has carried the same note since 2026-09-15.
No, and nobody reading a logged-out page can. That needs a session.