curl --request GET \
--url https://api.scraperize.com/v1/instagram/user/highlights \
--header 'x-api-key: <api-key>'import requests
url = "https://api.scraperize.com/v1/instagram/user/highlights"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.scraperize.com/v1/instagram/user/highlights', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scraperize.com/v1/instagram/user/highlights",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scraperize.com/v1/instagram/user/highlights"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scraperize.com/v1/instagram/user/highlights")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scraperize.com/v1/instagram/user/highlights")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"user": {
"id": "23947096",
"handle": "natgeotravel",
"fullName": "National Geographic Travel",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/685024507_18593567491011097_8135647783480608234_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy40MDAuQzMifQ%3D%3D&_nc_ohc=Ms9NcuAUTnQQ7kNvwFT1SXC&_nc_oc=AdqpzWPnmO7al1wjXSgiqSnkY6OC-UxHuF1Nwie4UEgRJmpnJIxh2BsNBneBOnbrFgs&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQMAbUZ7vxyEkV8tyFuVGeKnbVTBeoeJHYkZWJCNDgdIug&oe=6AD2D522",
"url": "https://www.instagram.com/natgeotravel/",
"isPrivate": false
},
"highlights": [
{
"id": "17948430864033948",
"title": "Guess This View",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/656854223_18585892363011097_5675596934186734096_n.jpg?stp=c0.5x0.5f_dst-jpg_e35_p150x150_tt6_u&_nc_cat=107&ccb=7-5&_nc_sid=18de74&efg=eyJlZmdfdGFnIjoiU1RPUlkuYmVzdF9pbWFnZV91cmxnZW4uQzMifQ%3D%3D&_nc_ohc=XfoyAH06GGwQ7kNvwGC0cEP&_nc_oc=Adoe9BtzmD5KqyrkVdrm1LItFmJ5w0nAXwan8J5yKRkWr1Kirdz3rUMSucQV5Lmr5TQ&_nc_zt=23&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQMRsAFmgpBqkho-arQwqUgzAJCWmf7Yrsf3_SbnscJn8w&oe=6AD2E05A",
"url": "https://www.instagram.com/stories/highlights/17948430864033948/"
},
{
"id": "18195414706378757",
"title": "BOTW26 Hotels",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/795253047_1541922793885513_5875113514527308057_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=111&ccb=7-5&_nc_sid=acbce5&_nc_ohc=GnNPQ5MTMlkQ7kNvwFb7K9g&_nc_oc=AdrmDtP4xvZ6LLjLpudTiIi8gArPAmfUWJipPlVZD3_YeyiK2D5sLgsXEHuecH55HSg&_nc_zt=23&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQOF__cK9TdA-gmCULOCIffI7AFxxZmeYlDPXmi_uMd1VQ&oe=6AD2CDD2",
"url": "https://www.instagram.com/stories/highlights/18195414706378757/"
},
{
"id": "18088628705524247",
"title": "BOTW26 Food",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/702214472_1546487837059060_5713948379982724072_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=106&ccb=7-5&_nc_sid=acbce5&_nc_ohc=dmsccAUkCjAQ7kNvwHeN7Bv&_nc_oc=Adrihum8GFVskZ7Eem6-FUm_JK_ks57ljo5KWYEA5DCreH5BV0Sz6byMzbtFbi5Q8Ro&_nc_zt=23&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQN0XeUVENGDBMHNNdHhaZ4h-C5APON6R4vrfQhqKdlvTA&oe=6AD2C9D7",
"url": "https://www.instagram.com/stories/highlights/18088628705524247/"
}
],
"count": 8,
"hasMore": false,
"fetchedAt": "2026-10-12T14:55:42.153Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "API key required — pass it in the `x-api-key` header.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 1 credit, but your balance is 0. Top up to continue.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested content was not found (it may not exist, be deleted, or be private).",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"details": [
{
"path": "url",
"message": "Required"
}
]
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded — max 100 requests per 60s. Retry in ~30s.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "The source is temporarily unavailable. Please try again shortly.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}User highlights
Fetches a public Instagram account’s story highlights by user id or username, in profile order. Each highlight has its id, title, cover image and link. Also returns the account (id, handle, name, verified, private, picture, profile URL). Logged out, Instagram shows an account’s first 10 highlights and offers no way to page further — hasMore says when the account has more. A highlight’s stories aren’t included. Pass either userId or handle. Only publicly available data is returned.
curl --request GET \
--url https://api.scraperize.com/v1/instagram/user/highlights \
--header 'x-api-key: <api-key>'import requests
url = "https://api.scraperize.com/v1/instagram/user/highlights"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.scraperize.com/v1/instagram/user/highlights', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scraperize.com/v1/instagram/user/highlights",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scraperize.com/v1/instagram/user/highlights"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scraperize.com/v1/instagram/user/highlights")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scraperize.com/v1/instagram/user/highlights")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"user": {
"id": "23947096",
"handle": "natgeotravel",
"fullName": "National Geographic Travel",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/685024507_18593567491011097_8135647783480608234_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy40MDAuQzMifQ%3D%3D&_nc_ohc=Ms9NcuAUTnQQ7kNvwFT1SXC&_nc_oc=AdqpzWPnmO7al1wjXSgiqSnkY6OC-UxHuF1Nwie4UEgRJmpnJIxh2BsNBneBOnbrFgs&_nc_zt=24&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQMAbUZ7vxyEkV8tyFuVGeKnbVTBeoeJHYkZWJCNDgdIug&oe=6AD2D522",
"url": "https://www.instagram.com/natgeotravel/",
"isPrivate": false
},
"highlights": [
{
"id": "17948430864033948",
"title": "Guess This View",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/656854223_18585892363011097_5675596934186734096_n.jpg?stp=c0.5x0.5f_dst-jpg_e35_p150x150_tt6_u&_nc_cat=107&ccb=7-5&_nc_sid=18de74&efg=eyJlZmdfdGFnIjoiU1RPUlkuYmVzdF9pbWFnZV91cmxnZW4uQzMifQ%3D%3D&_nc_ohc=XfoyAH06GGwQ7kNvwGC0cEP&_nc_oc=Adoe9BtzmD5KqyrkVdrm1LItFmJ5w0nAXwan8J5yKRkWr1Kirdz3rUMSucQV5Lmr5TQ&_nc_zt=23&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQMRsAFmgpBqkho-arQwqUgzAJCWmf7Yrsf3_SbnscJn8w&oe=6AD2E05A",
"url": "https://www.instagram.com/stories/highlights/17948430864033948/"
},
{
"id": "18195414706378757",
"title": "BOTW26 Hotels",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/795253047_1541922793885513_5875113514527308057_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=111&ccb=7-5&_nc_sid=acbce5&_nc_ohc=GnNPQ5MTMlkQ7kNvwFb7K9g&_nc_oc=AdrmDtP4xvZ6LLjLpudTiIi8gArPAmfUWJipPlVZD3_YeyiK2D5sLgsXEHuecH55HSg&_nc_zt=23&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQOF__cK9TdA-gmCULOCIffI7AFxxZmeYlDPXmi_uMd1VQ&oe=6AD2CDD2",
"url": "https://www.instagram.com/stories/highlights/18195414706378757/"
},
{
"id": "18088628705524247",
"title": "BOTW26 Food",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/702214472_1546487837059060_5713948379982724072_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=106&ccb=7-5&_nc_sid=acbce5&_nc_ohc=dmsccAUkCjAQ7kNvwHeN7Bv&_nc_oc=Adrihum8GFVskZ7Eem6-FUm_JK_ks57ljo5KWYEA5DCreH5BV0Sz6byMzbtFbi5Q8Ro&_nc_zt=23&_nc_ht=scontent-los4-1.cdninstagram.com&_nc_gid=a78HOrX3gVHy2BV-nbTROw&_nc_ss=7a689&oh=00_AQN0XeUVENGDBMHNNdHhaZ4h-C5APON6R4vrfQhqKdlvTA&oe=6AD2C9D7",
"url": "https://www.instagram.com/stories/highlights/18088628705524247/"
}
],
"count": 8,
"hasMore": false,
"fetchedAt": "2026-10-12T14:55:42.153Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "API key required — pass it in the `x-api-key` header.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "This request costs 1 credit, but your balance is 0. Top up to continue.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "The requested content was not found (it may not exist, be deleted, or be private).",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"details": [
{
"path": "url",
"message": "Required"
}
]
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded — max 100 requests per 60s. Retry in ~30s.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "UPSTREAM_BLOCKED",
"message": "The source is temporarily unavailable. Please try again shortly.",
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f"
}
}cache_max_age) are free.Copy for AI assistant
Copy for AI assistant
I want to make an API call to /v1/instagram/user/highlights. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/user/highlights
Description: Fetches a public Instagram account's story highlights by user id or username, in profile order. Each highlight has its id, title, cover image and link. Also returns the account (id, handle, name, verified, private, picture, profile URL). Logged out, Instagram shows an account's first 10 highlights and offers no way to page further — `hasMore` says when the account has more. A highlight's stories aren't included. Pass either `userId` or `handle`. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- userId (string): The Instagram user id (numeric `pk`), e.g. `13460080`. Pass this or `handle`.
- handle (string): The Instagram username, e.g. `natgeotravel` (an `@handle` or profile URL also works). Pass this or `userId`.
- cache_max_age (select): Optional. Return a cached result if one this age or newer exists — served for **0 credits** with `meta.cached=true` and `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and refreshes the cache. Omit to always scrape fresh.
Example Response:
{
"data": {
"user": {
"id": "23947096",
"handle": "natgeotravel",
"fullName": "National Geographic Travel",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/685024507_18593567491011097_8135647783480608234_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"url": "https://www.instagram.com/natgeotravel/",
"isPrivate": false
},
"highlights": [
{
"id": "17948430864033948",
"title": "Guess This View",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/656854223_18585892363011097_5675596934186734096_n.jpg?stp=c0.5x0.5f_dst-jpg_e35_p150x150_tt6_u&_nc_cat=1…",
"url": "https://www.instagram.com/stories/highlights/17948430864033948/"
}
],
"count": 8,
"hasMore": false,
"fetchedAt": "2026-10-12T14:55:42.153Z"
},
"meta": {
"requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}
Please help me write code in my preferred programming language to make this API call and handle the response appropriately. Include error handling and best practices.
Authorizations
Your API key. Send it in the x-api-key header (or Authorization: Bearer <key>). Create and manage keys from your dashboard.
Query Parameters
The Instagram user id (numeric pk), e.g. 13460080. Pass this or handle.
The Instagram username, e.g. natgeotravel (an @handle or profile URL also works). Pass this or userId.
Optional. Return a cached result if one this age or newer exists — served for 0 credits with meta.cached=true and meta.cachedAt. Otherwise a fresh scrape runs (1 credit) and refreshes the cache. Omit to always scrape fresh.
1d, 3d, 7d, 14d, 30d