# Amazon Shop page
Source: https://docs.scraperize.com/api-reference/amazon/amazon-shop-page
/api-reference/openapi.json get /v1/amazon/shop
Fetches a creator's Amazon Shop (influencer storefront) page: the creator profile (name, avatar, bio, socials, Top Creator/earns-commission status), their curated collections, the "Trending picks" products (with price), and the content feed of shoppable posts (idea lists / photos / videos) — each with its product ASINs, images, and affiliate product links. Paginate the feed with the returned `paging.pageToken`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/amazon/shop. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/amazon/shop
Description: Fetches a creator's Amazon Shop (influencer storefront) page: the creator profile (name, avatar, bio, socials, Top Creator/earns-commission status), their curated collections, the "Trending picks" products (with price), and the content feed of shoppable posts (idea lists / photos / videos) — each with its product ASINs, images, and affiliate product links. Paginate the feed with the returned `paging.pageToken`.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Amazon Shop URL, e.g. https://www.amazon.com/shop/.
- pageToken (string): The `paging.pageToken` from a previous call, to fetch the next batch of posts.
- 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": {
"shop": {
"handle": "sydneydelrey",
"name": "sydney del rey",
"url": "https://www.amazon.com/shop/sydneydelrey",
"avatarUrl": "https://m.media-amazon.com/images/I/71D+tmgGHHL._CR0%2C0%2C972%2C972_._US500_SCLZZZZZZZ_.jpg",
"bio": "sharing all of my favorite Amazon finds ᥫ᭡ click the icons below to follow me on socials! all photo & video content is also shoppable x",
"isTopCreator": true,
"earnsCommissions": true,
"affiliateTag": "onamzsydn05c4-20",
"storefrontId": "2GK5L3R8SDDP8",
"totalPosts": 1833,
"socialLinks": [
{
"platform": "tiktok",
"url": "https://vm.tiktok.com/ZTFrowSpg/"
}
],
"curations": [
{
"id": "amzn1.curation.7e16f5d6-99a7-4277-b498-caffddd25cd5",
"title": "fall by category 🍂",
"postCount": 12,
"coverImage": "https://m.media-amazon.com/images/I/71ANtYnrf2L._US225_SCLZZZZZZZ_.jpg",
"url": "https://www.amazon.com/shop/sydneydelrey/curation/7e16f5d6-99a7-4277-b498-caffddd25cd5"
}
],
"trending": [
{
"asin": "B0FY2MD64Y",
"image": "https://m.media-amazon.com/images/I/410oP54WC7L._AC_.jpg",
"price": "$39.99",
"badge": null,
"productUrl": "https://www.amazon.com/dp/B0FY2MD64Y?tag=onamzsydn05c4-20"
}
]
},
"posts": [
{
"id": "amzn1.ideas.3QCPC18WETJFQ",
"type": "List",
"title": "fall fitspo",
"url": "https://www.amazon.com/shop/sydneydelrey/list/3QCPC18WETJFQ",
"image": "https://m.media-amazon.com/images/I/71ANtYnrf2L._AC_._US550_SCLZZZZZZZ_.jpg",
"heartCount": 488,
"productCount": 133,
"products": [
{
"asin": "B0FJ21MMRY",
"image": "https://m.media-amazon.com/images/I/41gq2G5kbDL._AC_.jpg",
"productUrl": "https://www.amazon.com/dp/B0FJ21MMRY?tag=onamzsydn05c4-20"
}
]
}
],
"postCount": 20,
"paging": {
"pageToken": "amzn1.vse.video.080daeab78de406c9874b56bf5624e1e_0_2026-09-23T22:47:50.824Z",
"hasMore": true
},
"fetchedAt": "2026-10-05T14:43:41.343Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/bluesky/post
/api-reference/openapi.json get /v1/bluesky/post
Fetches a public Bluesky post by URL: its text, hashtags, mentions and links, language, the author, like / repost / reply / quote / bookmark counts, images, video or link preview, the quoted post (or embedded feed, list or starter pack), reply restrictions and content labels — plus its thread context: for a reply, the parent and root posts and every post above it, root first, and whether it is part of the author’s own thread.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/bluesky/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/bluesky/post
Description: Fetches a public Bluesky post by URL: its text, hashtags, mentions and links, language, the author, like / repost / reply / quote / bookmark counts, images, video or link preview, the quoted post (or embedded feed, list or starter pack), reply restrictions and content labels — plus its thread context: for a reply, the parent and root posts and every post above it, root first, and whether it is part of the author’s own thread.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Bluesky post link, e.g. `https://bsky.app/profile/espn.com/post/3muznlkmspz2x` (the handle or the DID form both work; the post’s `at://` URI is accepted too).
- 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": {
"post": {
"id": "3muznlkmspz2x",
"uri": "at://did:plc:x7d6j54pm22ufehkes6jo4jf/app.bsky.feed.post/3muznlkmspz2x",
"cid": "bafyreiceaay7jrgqznvxhttsmizofewx3mj6bwebjtz76nd2wh4hix4fty",
"url": "https://bsky.app/profile/espn.com/post/3muznlkmspz2x",
"text": "One more sleep until NFL football is BACK. 🏈",
"createdAt": "2026-09-08T18:27:24.700Z",
"indexedAt": "2026-09-08T18:27:30.159Z",
"langs": [],
"tags": [],
"via": null,
"hashtags": [],
"mentions": [],
"links": [],
"author": {
"did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
"handle": "espn.com",
"displayName": "ESPN",
"url": "https://bsky.app/profile/espn.com",
"avatarUrl": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie",
"pronouns": null,
"isVerified": true,
"labels": [],
"createdAt": "2024-11-25T21:49:49.345Z"
},
"likeCount": 100,
"repostCount": 11,
"replyCount": 11,
"quoteCount": 6,
"bookmarkCount": 0,
"media": {
"images": [],
"video": {
"playlistUrl": "https://video.bsky.app/watch/did%3Aplc%3Ax7d6j54pm22ufehkes6jo4jf/bafkreiflqivgi6afl5jv4qnmwzo3ks7jwe2dfurohsjfgafbtd5crw4gaq/playlist.m3u8",
"thumbnailUrl": "https://video.bsky.app/watch/did%3Aplc%3Ax7d6j54pm22ufehkes6jo4jf/bafkreiflqivgi6afl5jv4qnmwzo3ks7jwe2dfurohsjfgafbtd5crw4gaq/thumbnail.jpg",
"alt": null,
"width": null,
"height": null
},
"link": null
},
"quote": null,
"embeddedRecord": null,
"isReply": false,
"reply": null,
"isRepost": false,
"repostedBy": null,
"repostedAt": null,
"isPinned": false,
"threadPostIndex": null,
"threadPostCount": null,
"replySettings": null,
"labels": []
},
"thread": {
"ancestors": [],
"hasMoreAncestors": false,
"isAuthorThread": true,
"hiddenByThreadgate": false
},
"fetchedAt": "2026-10-17T19:15:45.046Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/bluesky/profile
/api-reference/openapi.json get /v1/bluesky/profile
Fetches a public Bluesky profile by handle: DID, display name, bio, pronouns, website, avatar and banner, follower / following / post counts, how many lists, feeds and starter packs the account made, whether it is a labeler, its verification (and who verified it), DM settings, the pinned post, a live status, the starter pack it joined through, labels, and when the account was created.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/bluesky/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/bluesky/profile
Description: Fetches a public Bluesky profile by handle: DID, display name, bio, pronouns, website, avatar and banner, follower / following / post counts, how many lists, feeds and starter packs the account made, whether it is a labeler, its verification (and who verified it), DM settings, the pinned post, a live status, the starter pack it joined through, labels, and when the account was created.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: Bluesky handle, e.g. `espn.com` or `name.bsky.social`. A leading `@`, a `bsky.app/profile/...` URL or the account DID (`did:plc:...`) also work.
- 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": {
"profile": {
"did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
"handle": "espn.com",
"displayName": "ESPN",
"url": "https://bsky.app/profile/espn.com",
"description": "Serving sports fans. Anytime. Anywhere.",
"pronouns": null,
"website": null,
"avatarUrl": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie",
"bannerUrl": null,
"followerCount": 302335,
"followingCount": 32,
"postCount": 872,
"listCount": 0,
"feedCount": 0,
"starterPackCount": 0,
"isLabeler": false,
"chatAllowIncoming": null,
"chatAllowGroupInvites": null,
"activitySubscriptionsAllowedFrom": "followers",
"isVerified": true,
"isTrustedVerifier": false,
"verification": {
"status": "valid",
"trustedVerifierStatus": "none",
"verifications": [
{
"issuerDid": "did:plc:z72i7hdynmk6r22z27h6tvur",
"issuerHandle": "bsky.app",
"issuerDisplayName": "Bluesky",
"uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndppjqgb72f",
"isValid": true,
"createdAt": "2025-04-21T10:44:20.398Z"
}
]
},
"pinnedPost": null,
"status": null,
"joinedViaStarterPack": null,
"labels": [],
"createdAt": "2024-11-25T21:49:49.345Z",
"indexedAt": "2024-12-19T20:49:48.843Z"
},
"fetchedAt": "2026-10-17T19:15:41.345Z"
},
"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.
```
# User posts
Source: https://docs.scraperize.com/api-reference/bluesky/user-posts
/api-reference/openapi.json get /v1/bluesky/user/posts
An account's posts, newest first, as on its profile's Posts tab: its posts, reposts and its own threads, with the pinned post first on page 1. About 30 per page, with a `cursor` for the next page. Each post has its text, hashtags, mentions and links, the author, like / repost / reply / quote / bookmark counts, images, video or link preview, the quoted post (or embedded feed, list or starter pack), reply context (parent, root and grandparent author), who reposted it and when, reply restrictions and content labels.
Pass exactly one of `handle` or `userId`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/bluesky/user/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/bluesky/user/posts
Description: An account's posts, newest first, as on its profile's Posts tab: its posts, reposts and its own threads, with the pinned post first on page 1. About 30 per page, with a `cursor` for the next page. Each post has its text, hashtags, mentions and links, the author, like / repost / reply / quote / bookmark counts, images, video or link preview, the quoted post (or embedded feed, list or starter pack), reply context (parent, root and grandparent author), who reposted it and when, reply restrictions and content labels.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string): Bluesky handle, e.g. `espn.com` or `name.bsky.social` (a leading `@` or a `bsky.app/profile/...` URL also work). Required unless `userId` is given.
- userId (string): The account DID, e.g. `did:plc:x7d6j54pm22ufehkes6jo4jf`. Required unless `handle` is given.
- cursor (string): The `cursor` from the previous page, to get the next one.
- 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": {
"did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
"handle": "espn.com",
"displayName": "ESPN",
"url": "https://bsky.app/profile/espn.com",
"avatarUrl": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie",
"pronouns": null,
"isVerified": true,
"labels": [],
"createdAt": "2024-11-25T21:49:49.345Z"
},
"posts": [
{
"id": "3muznlkmspz2x",
"uri": "at://did:plc:x7d6j54pm22ufehkes6jo4jf/app.bsky.feed.post/3muznlkmspz2x",
"cid": "bafyreiceaay7jrgqznvxhttsmizofewx3mj6bwebjtz76nd2wh4hix4fty",
"url": "https://bsky.app/profile/espn.com/post/3muznlkmspz2x",
"text": "One more sleep until NFL football is BACK. 🏈",
"createdAt": "2026-09-08T18:27:24.700Z",
"indexedAt": "2026-09-08T18:27:30.159Z",
"langs": [],
"tags": [],
"via": null,
"hashtags": [],
"mentions": [],
"links": [],
"author": {
"did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
"handle": "espn.com",
"displayName": "ESPN",
"url": "https://bsky.app/profile/espn.com",
"avatarUrl": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie",
"pronouns": null,
"isVerified": true,
"labels": [],
"createdAt": "2024-11-25T21:49:49.345Z"
},
"likeCount": 100,
"repostCount": 11,
"replyCount": 11,
"quoteCount": 6,
"bookmarkCount": 0,
"media": {
"images": [],
"video": {
"playlistUrl": "https://video.bsky.app/watch/did%3Aplc%3Ax7d6j54pm22ufehkes6jo4jf/bafkreiflqivgi6afl5jv4qnmwzo3ks7jwe2dfurohsjfgafbtd5crw4gaq/playlist.m3u8",
"thumbnailUrl": "https://video.bsky.app/watch/did%3Aplc%3Ax7d6j54pm22ufehkes6jo4jf/bafkreiflqivgi6afl5jv4qnmwzo3ks7jwe2dfurohsjfgafbtd5crw4gaq/thumbnail.jpg",
"alt": null,
"width": null,
"height": null
},
"link": null
},
"quote": null,
"embeddedRecord": null,
"isReply": false,
"reply": null,
"isRepost": false,
"repostedBy": null,
"repostedAt": null,
"isPinned": false,
"threadPostIndex": null,
"threadPostCount": null,
"replySettings": null,
"labels": []
}
],
"count": 30,
"cursor": "2025-09-25T17:06:11.912Z",
"hasMore": true,
"fetchedAt": "2026-10-17T19:15:44.136Z"
},
"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.
```
# Comment replies
Source: https://docs.scraperize.com/api-reference/facebook/comment-replies
/api-reference/openapi.json get /v1/facebook/post/comment/replies
Fetches the replies to a comment on a public Facebook post/reel. Pass the comment's **`feedbackId`** and **`expansionToken`** (both from `/facebook/post/comments`). Note: `feedbackId` is the comment's FEEDBACK id, NOT the comment id. Each reply has the same shape as a comment (text, author, reactions + breakdown, its own reply count, media, permalink). Returns a `paging.cursor` / `paging.hasNextPage` for the next page.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/post/comment/replies. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/post/comment/replies
Description: Fetches the replies to a comment on a public Facebook post/reel. Pass the comment's **`feedbackId`** and **`expansionToken`** (both from `/facebook/post/comments`). Note: `feedbackId` is the comment's FEEDBACK id, NOT the comment id. Each reply has the same shape as a comment (text, author, reactions + breakdown, its own reply count, media, permalink). Returns a `paging.cursor` / `paging.hasNextPage` for the next page.
Required Headers:
- x-api-key: Your API key
Parameters:
- feedbackId (string) [required]: The COMMENT's feedback id (from /facebook/post/comments — NOT the comment id).
- expansionToken (string) [required]: The comment's expansion token (from /facebook/post/comments).
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- 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": {
"replies": [
{
"id": "Y29tbWVudDoxNjkzMjY0MTA1NDkzNDU2XzEwMDIxMTMzMzI2NTU5MTM=",
"legacyId": "1002113332655913",
"text": "Ribesh Chhetri GOAT for a reason 😂",
"author": {
"id": "pfbid0zVpDNnawuW4paKCghNnwKgJMPTsPQN41ncsPEMjJEZbzfLpFiNKFT79enVtRvWgal",
"name": "Si Kute",
"shortName": "Si",
"url": "https://www.facebook.com/pfbid0zVpDNnawuW4paKCghNnwKgJMPTsPQN41ncsPEMjJEZbzfLpFiNKFT79enVtRvWgal",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/437570319_2203651459994026_1171989696690737756_n.jpg?stp=c0.0.648.648a_cp0_dst-jpg_tt6&cstp=mx648x648&ctp=s32…",
"verified": false,
"gender": "MALE",
"isPage": false
},
"createdAt": "2026-07-21T14:22:47.000Z",
"createdTimestamp": 1784643767,
"reactionCount": 9,
"reactionsByType": [
{
"type": "Like",
"count": 5
}
],
"replyCount": 0,
"feedbackId": "ZmVlZGJhY2s6MTY5MzI2NDEwNTQ5MzQ1Nl8xMDAyMTEzMzMyNjU1OTEz",
"expansionToken": "MjoxNzkxMjExNjEzOgF_Fjn06f16sM-kuPqztHDvgdb0PbH5wiNYxj7uQAYMW5bxaCEuX3kmaLUxp-q2fNpDmVTakJduYcRM98RxCrpJEfbKyKGJY0NODBvv1tM-shdmw8tlpSD3qSLyLAn3aGU4ce3sGmTUazWN…",
"url": "https://www.facebook.com/reel/1549207066583030/?comment_id=1413811814127518&reply_comment_id=1002113332655913",
"depth": 1,
"isAuthorOriginalPoster": false,
"attachments": []
}
],
"replyCount": 10,
"paging": {
"cursor": "MToxNzkxMjExNjEzOgF_4YcQtZrc9TOcGs-Q3ACyPlD-F23U_7bpWxdKFCJa3HmlP8tBRVqdbwOcqg8YJC8jSUc3ybBZKqEAI5FTLr3U4jQG_syJYSJohtFr43_E6Vpf4zmW2e5BAmsv3J8t20d1qDcOQ14mt30H…",
"hasNextPage": true
},
"feedbackId": "ZmVlZGJhY2s6MTY5MzI2NDEwNTQ5MzQ1Nl8xNDEzODExODE0MTI3NTE4",
"fetchedAt": "2026-10-05T14:46:54.002Z"
},
"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.
```
# Group
Source: https://docs.scraperize.com/api-reference/facebook/group
/api-reference/openapi.json get /v1/facebook/group
Fetches a public Facebook group's About-page information (from its `/about` page): name, id, vanity, description, privacy, type, member count, creation date + history, cover photo, admins/moderators, and the group rules. Pass `url` OR `groupId`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/group. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/group
Description: Fetches a public Facebook group's About-page information (from its `/about` page): name, id, vanity, description, privacy, type, member count, creation date + history, cover photo, admins/moderators, and the group rules. Pass `url` OR `groupId`.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string): **Required — provide one of `url` or `groupId`.** Public Facebook group URL (sub-pages like /about work too).
- groupId (string): **Required — provide one of `url` or `groupId`.** Numeric Facebook group id (faster if you have it).
- 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": {
"group": {
"id": "367172990112802",
"name": "Cristiano Ronaldo CR 7",
"url": "https://www.facebook.com/groups/cristianoronaldo404/about/",
"vanity": "cristianoronaldo404",
"description": "Cristiano Ronaldo dos Santos Aveiro GOIH ComM is a Portuguese professional footballer who plays as a forward for Premier League club Manchester United and capta…",
"privacy": {
"label": "Public group",
"icon": "globe-americas"
},
"groupType": "GROUP",
"memberCount": 1184205,
"memberCountText": "1.2M members",
"activity": {
"postsLastDay": 0,
"postsLastMonth": 0,
"newMembersText": "No new members in the last week"
},
"createdTimestamp": 1416202227,
"createdAt": "2014-11-17T05:30:27.000Z",
"historySummary": "Group created on 17 November 2014. Name last changed on 8 July 2022.",
"coverPhotoUrl": null,
"admins": {
"count": 3,
"profiles": [
{
"id": "pfbid02ejSBAvbRYFR3vnmPXzdVZAdLbpwDmTbNBmsT8FixHgvDLgomKToW9FobussSUmXal",
"name": "សីហា កំពត",
"url": "https://www.facebook.com/pfbid02ejSBAvbRYFR3vnmPXzdVZAdLbpwDmTbNBmsT8FixHgvDLgomKToW9FobussSUmXal",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/330989668_765158771278136_4230346575304946020_n.jpg?stp=cp0_dst-jpg_tt6&cstp=mx946x960&ctp=p64x64&_nc_cat=110…"
}
]
},
"moderators": {
"count": 11,
"profiles": [
{
"id": "100094571611307",
"name": "Scarlett Rose",
"url": "https://www.facebook.com/100094571611307",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t1.30497-1/453178253_471506465671661_2781666950760530985_n.png?stp=cp0_dst-png&cstp=mx2048x2048&ctp=s64x64&_nc_cat=1&ccb=…"
}
]
},
"adminModeratorSentence": "Janice and 2 other members are admins. Alice and 10 other members are moderators.",
"rules": [
{
"title": "anybody can join this group, but don’t post bad.",
"description": "it’s is a only Ertugrul Gazi fans group, so you can post for Ertugrul pictures, family picture, dirilis series and good qualityful videos. If you share others g…"
}
],
"viewerJoinState": "CAN_JOIN"
},
"fetchedAt": "2026-10-05T14:43:20.223Z"
},
"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.
```
# Group posts
Source: https://docs.scraperize.com/api-reference/facebook/group-posts
/api-reference/openapi.json get /v1/facebook/group/posts
Fetches a public Facebook group's discussion posts (only publicly visible posts). Pass `url` OR `groupId` (the numeric group id — faster). Each post includes text, author (the member who posted), media (photos/video), a shared-link preview, timestamp, and engagement stats (reactions with a per-type breakdown, comments, shares). Returns a `paging.cursor` / `paging.hasNextPage` for the next page. Use `sortBy` to change the ordering (default CHRONOLOGICAL).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/group/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/group/posts
Description: Fetches a public Facebook group's discussion posts (only publicly visible posts). Pass `url` OR `groupId` (the numeric group id — faster). Each post includes text, author (the member who posted), media (photos/video), a shared-link preview, timestamp, and engagement stats (reactions with a per-type breakdown, comments, shares). Returns a `paging.cursor` / `paging.hasNextPage` for the next page. Use `sortBy` to change the ordering (default CHRONOLOGICAL).
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string): **Required — provide one of `url` or `groupId`.** Public Facebook group URL, e.g. https://www.facebook.com/groups/cristianoronaldo404.
- groupId (string): **Required — provide one of `url` or `groupId`.** Numeric group id (faster than url).
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- sortBy (select): Feed ordering (default `CHRONOLOGICAL`). `CHRONOLOGICAL` = newest first; `TOP_POSTS` = Facebook's "Most relevant"; `RECENT_ACTIVITY` = most recent activity first; `CHRONOLOGICAL_LISTINGS` = newest buy/sell listings (only groups with marketplace listings return anything). Case-insensitive; spaces are accepted (e.g. "recent activity").
- 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": {
"posts": [
{
"postId": "3516531235176946",
"storyId": "UzpfSTEwMDA5MDM0ODgxMjU5OTpWSzozNTE2NTMxMjM1MTc2OTQ2",
"url": "https://www.facebook.com/groups/cristianoronaldo404/posts/3516531235176946/",
"text": "Easy DIY Tool Hack 😮 #DIY #WorkshopHacks #DIYTools #ToolTips #USA",
"author": {
"name": "Alice Angel",
"id": "100090348812599",
"url": "https://www.facebook.com/people/Alice-Angel/100090348812599/",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/503737997_680208598334095_3767475048790493201_n.jpg?stp=c0.270.1080.1080a_cp0_dst-jpg_tt6&cstp=mx1080x1080&ct…",
"verified": null
},
"createdAt": "2026-08-31T17:54:52.000Z",
"createdTimestamp": 1788198892,
"media": {
"type": "video",
"videoId": "2332244467596542",
"videoUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQMpowAj8kbVPvfLLnTGpi8v2K0Wtq-3EmilGrWtT0-hiWbOPXUvkz7-aA1DPf67VLlf9mBarzEYT__IGBWBVXzsmHU0gwr98HZ4qRQqp3KhMg…",
"videoHdUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQMpowAj8kbVPvfLLnTGpi8v2K0Wtq-3EmilGrWtT0-hiWbOPXUvkz7-aA1DPf67VLlf9mBarzEYT__IGBWBVXzsmHU0gwr98HZ4qRQqp3KhMg…",
"videoSdUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m412/AQNFTvOwg0PRi5yJoY6STCthra-mYmiHcbOYEsDhCd8lVOKTrvINyHP9oRq2G77HTzKRP0-pEVwvSA9nLaTiH5Pj8o-lY4ZA3-cEojlC9w.mp4…",
"thumbnailUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t15.5256-10/777800040_27464747536561006_509832802318622594_n.jpg?stp=dst-jpg_tt6&cstp=mx1080x1920&ctp=s960x960&_nc_cat=10…",
"width": 1080,
"height": 1920,
"durationSeconds": 29,
"images": [],
"music": null
},
"link": null,
"stats": {
"reactions": 0,
"reactionsByType": [],
"comments": 0,
"shares": 0,
"views": null,
"viewsLabel": null
},
"topComments": [],
"isReshare": true,
"sharedPost": {
"text": null,
"author": {
"name": null,
"id": null,
"url": null,
"avatarUrl": null,
"verified": null
},
"url": "https://www.facebook.com/reel/2332244467596542/"
}
}
],
"postCount": 3,
"paging": {
"cursor": "Cg8TZXhpc3RpbmdfdW5pdF9jb3VudAIEDwtyZWFsX2N1cnNvcg+zQVFIVGdMYVk3T3Z4VVVRTTV6YkFXLW5XS3dUWXh6cnhyeFFUMC1zYm9qc2RXZmpPUzN5QTdfeGhFVXAtZmo5YTExaW1mYUhEYU1TbFBaODBz…",
"hasNextPage": true
},
"fetchedAt": "2026-10-05T14:43:24.389Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/facebook/post
/api-reference/openapi.json get /v1/facebook/post
Fetches a public Facebook post or reel and returns its text, author, media (video/thumbnail), engagement stats, and timestamp. Accepts share, reel, permalink, /posts/, and /videos/ URLs.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/post
Description: Fetches a public Facebook post or reel and returns its text, author, media (video/thumbnail), engagement stats, and timestamp. Accepts share, reel, permalink, /posts/, and /videos/ URLs.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Facebook post or reel URL.
- 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": {
"post": {
"id": "1058174846575046",
"postId": "1037614172517424",
"url": "https://www.facebook.com/100088065513660/videos/bltv-she-is-coming/1058174846575046/",
"kind": "reel",
"text": "#bltv she is coming",
"author": {
"name": "Beautiful loveth TV",
"id": "100088065513660",
"url": "https://www.facebook.com/people/Beautiful-loveth-TV/100088065513660/",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/424585004_352374554374726_2380182907750720076_n.jpg?stp=cp0_dst-jpg_tt6&cstp=mx960x960&ctp=s80x80&_nc_cat=103…",
"verified": false
},
"media": {
"type": "video",
"videoId": "1058174846575046",
"videoUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQMhueuWuQYfhe2SsSOoJ0yQdP45hgqpTczGF1EZ7RKFvW0UQaJKu0UP1ONFwDsw5mPh2y2ZCaeT0haDcnY4wrlDBeANnb739_JrfAXD1w5PbA…",
"videoHdUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQMhueuWuQYfhe2SsSOoJ0yQdP45hgqpTczGF1EZ7RKFvW0UQaJKu0UP1ONFwDsw5mPh2y2ZCaeT0haDcnY4wrlDBeANnb739_JrfAXD1w5PbA…",
"videoSdUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m412/AQOFqZ9wd36PuUFXb7EofKYVbrehl1XuN2OuwAVqWRMUqFdissjZ45nZadysKUcZIzWHl92OzCa-BnKPA7S7F2p-z5kjRjOD4K0RsLtF6w.mp4…",
"thumbnailUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t15.5256-10/761113616_1058174873241710_4338206855944057211_n.jpg?_nc_cat=105&ccb=1-7&_nc_sid=596eb7&_nc_ohc=OaWtXkprfIAQ7…",
"width": 1080,
"height": 1920,
"durationSeconds": 43.745,
"images": [
"https://scontent-los4-1.xx.fbcdn.net/v/t15.5256-10/761113616_1058174873241710_4338206855944057211_n.jpg?_nc_cat=105&ccb=1-7&_nc_sid=596eb7&_nc_ohc=OaWtXkprfIAQ7…"
],
"music": null
},
"link": null,
"stats": {
"reactions": 22725,
"reactionsByType": [],
"comments": 364,
"shares": 319,
"views": null,
"viewsLabel": "2.1M views"
},
"comments": [],
"feedbackId": "ZmVlZGJhY2s6MTAzNzYxNDE3MjUxNzQyNA==",
"createdAtMs": 1785481347000,
"createdAt": "2026-07-31T07:02:27.000Z"
},
"fetchedAt": "2026-10-05T14:42:41.368Z"
},
"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.
```
# Post comments
Source: https://docs.scraperize.com/api-reference/facebook/post-comments
/api-reference/openapi.json get /v1/facebook/post/comments
Fetches the comments on a public Facebook post or reel. Pass `url` OR `feedbackId` (the post's feedback id from `/facebook/post` — faster). Each comment includes text, author, timestamp, reaction count + per-type breakdown, reply count, any media attachment, and its permalink. Returns a `paging.cursor` / `paging.hasNextPage` for the next page, plus the `feedbackId` to reuse.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/post/comments. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/post/comments
Description: Fetches the comments on a public Facebook post or reel. Pass `url` OR `feedbackId` (the post's feedback id from `/facebook/post` — faster). Each comment includes text, author, timestamp, reaction count + per-type breakdown, reply count, any media attachment, and its permalink. Returns a `paging.cursor` / `paging.hasNextPage` for the next page, plus the `feedbackId` to reuse.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string): **Required — provide one of `url` or `feedbackId`.** Public Facebook post/reel URL.
- feedbackId (string): **Required — provide one of `url` or `feedbackId`.** The post's feedback id (from /facebook/post) — faster than url.
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- 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": {
"comments": [
{
"id": "Y29tbWVudDoxNjkzMjY0MTA1NDkzNDU2XzE0MTM4MTE4MTQxMjc1MTg=",
"legacyId": "1413811814127518",
"text": "Meanwhile Ronaldo has never lost any FIFA world cup finals he played. 🔥",
"author": {
"id": "pfbid02eQDMoFm69PSpmkbZDEHP5QTEBxQAv7Wt4wWS4FzjaL5sQfJCAfS4qJBSAQ7mGmF4l",
"name": "Ribesh Chhetri",
"shortName": "Ribesh",
"url": "https://www.facebook.com/ribesh.chhetri",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t1.6435-1/140304033_4896315097105613_3903629056200245534_n.jpg?stp=cp0_dst-jpg_tt6&cstp=mx819x819&ctp=s32x32&_nc_cat=107&…",
"verified": false,
"gender": "MALE",
"isPage": false
},
"createdAt": "2026-07-21T14:07:04.000Z",
"createdTimestamp": 1784642824,
"reactionCount": 346,
"reactionsByType": [
{
"type": "Like",
"count": 161
}
],
"replyCount": 28,
"feedbackId": "ZmVlZGJhY2s6MTY5MzI2NDEwNTQ5MzQ1Nl8xNDEzODExODE0MTI3NTE4",
"expansionToken": "MjoxNzkxMjExMzk3OgF_gL5-Wlc5Bzrc13LRiJnZRMT7tSt4CzZW6TgSucXv79qCnud4Sq39l_anvEhoIH1yGIBV6sfIbkm6FVTQH9EtVy4oteqRt5QONNbUFWfmDhNcl5yr3uMzyBCh7R908AjVtdjbBlT3v0xa…",
"url": "https://www.facebook.com/reel/1549207066583030/?comment_id=1413811814127518",
"depth": 0,
"isAuthorOriginalPoster": false,
"attachments": []
}
],
"commentCount": 10,
"paging": {
"cursor": "MToxNzkxMjExMzk3OgF_FGr6iQFHo5LPuxb-_0zYRiTdafeVXNCo9f4vv13s5acda125lFvO9pS3kAwZaeIg0XomWE2PCa9NB4HUdXV7w4Z7uuzufuOKpGZAv5pMUwoZsH-pbwF4IHl5Vw3E9WVoxKf6X-gAQ6n7…",
"hasNextPage": true
},
"feedbackId": "ZmVlZGJhY2s6MTY5MzI2NDEwNTQ5MzQ1Ng==",
"fetchedAt": "2026-10-05T14:43:18.396Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/facebook/profile
/api-reference/openapi.json get /v1/facebook/profile
Fetches a public Facebook page/profile's information (from its `/about` tab): identity (name, id, url, username, verified, profile & cover photos), categories, follower/following counts, contact (phone, email, website, address), rating, and (optionally) the business hours status.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/profile
Description: Fetches a public Facebook page/profile's information (from its `/about` tab): identity (name, id, url, username, verified, profile & cover photos), categories, follower/following counts, contact (phone, email, website, address), rating, and (optionally) the business hours status.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Facebook page URL, e.g. https://www.facebook.com/metmuseum
- businessHours (select): Include the business's hours status (e.g. "Open now"/"Closed now"). Default true. (Only the current status is available — not the per-day schedule.)
- includeGatedProfile (select): When true, a gated/age-restricted/unavailable page returns a limited response (`gated: true`) instead of a 404. Ignored for normal public profiles (always full). Default true.
- 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": {
"gated": false,
"profile": {
"id": "100064879894574",
"name": "The Metropolitan Museum of Art, New York",
"url": "https://www.facebook.com/metmuseum",
"username": null,
"alternateName": null,
"gender": "NEUTER",
"verified": true,
"categories": [
"Art Museums"
],
"profilePictureUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/347625751_651532197019438_2073582740604276353_n.jpg?stp=dst-jpg_tt6&cstp=mx1803x1803&ctp=s480x480&_nc_cat=103…",
"profilePicture": {
"small": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/347625751_651532197019438_2073582740604276353_n.jpg?stp=dst-jpg_tt6&cstp=mx1803x1803&ctp=s200x200&_nc_cat=103…",
"medium": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/347625751_651532197019438_2073582740604276353_n.jpg?stp=dst-jpg_tt6&cstp=mx1803x1803&ctp=s320x320&_nc_cat=103…",
"large": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/347625751_651532197019438_2073582740604276353_n.jpg?stp=dst-jpg_tt6&cstp=mx1803x1803&ctp=s480x480&_nc_cat=103…"
},
"coverPhotoUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-6/481991954_1056653546507299_950545646890195151_n.jpg?stp=dst-jpg_tt6&cstp=mx2048x1365&ctp=s2048x1365&_nc_cat=1…",
"followers": {
"count": 2400000,
"label": "2.4M followers"
},
"following": {
"count": 12,
"label": "12 following"
},
"likes": null,
"intro": null,
"contact": {
"phone": "+1 212-535-7710",
"email": null,
"website": "http://www.metmuseum.org/",
"address": "1000 5th Ave, New York, NY, United States, 10028"
},
"links": [
{
"type": "website",
"label": "Website",
"url": "http://www.metmuseum.org/",
"value": "http://www.metmuseum.org/"
}
],
"rating": "100% recommend (119,584 reviews)",
"isBusinessPage": false,
"otherDetails": [],
"businessHours": {
"status": "Open now"
}
},
"fetchedAt": "2026-10-05T14:43:15.154Z"
},
"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.
```
# Profile events
Source: https://docs.scraperize.com/api-reference/facebook/profile-events
/api-reference/openapi.json get /v1/facebook/profile/events
Fetches a public Facebook page's events (from its `/events` tab). Each event includes its name, url, start time (unix + ISO + the human date line), past/online/canceled flags, kind, cover photo, place (name/type/city/coords when present), and creator. Returns the first page plus a `paging.cursor` / `paging.hasNextPage` for the next page.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/profile/events. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/profile/events
Description: Fetches a public Facebook page's events (from its `/events` tab). Each event includes its name, url, start time (unix + ISO + the human date line), past/online/canceled flags, kind, cover photo, place (name/type/city/coords when present), and creator. Returns the first page plus a `paging.cursor` / `paging.hasNextPage` for the next page.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Facebook page URL, e.g. https://www.facebook.com/WebSummitHQ
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- 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": {
"events": [
{
"id": "668090121966465",
"name": "Tech For Good",
"url": "https://www.facebook.com/events/668090121966465/",
"startTimestamp": 1696946400,
"startDate": "2023-10-10T14:00:00.000Z",
"dayTimeSentence": "Tue, 10 Oct 2023",
"isPast": true,
"isHappeningNow": false,
"isCanceled": false,
"isOnline": true,
"eventKind": "PUBLIC_TYPE",
"onlineEventType": "FB_LIVE",
"coverPhotoUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-6/384120671_713131144187494_3360755611233295705_n.png?stp=c118.0.1044.720a_dst-png&cstp=mx1044x720&ctp=s235x165…",
"coverVideoUrl": null,
"place": null,
"creator": {
"id": "100064718437596",
"name": "Web Summit",
"url": "https://www.facebook.com/WebSummitHQ"
}
}
],
"eventCount": 8,
"totalCount": 53,
"paging": {
"cursor": "AQHTzpw3vw12YnEoNjwAzXeqFikbX05iBiF0cksdsggf0zIprzBbHWTVou_cF6-tujzH3CUxj4zFGrXccF2jdvv6aQ",
"hasNextPage": true
},
"fetchedAt": "2026-10-05T14:43:04.505Z"
},
"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.
```
# Profile photos
Source: https://docs.scraperize.com/api-reference/facebook/profile-photos
/api-reference/openapi.json get /v1/facebook/profile/photos
Fetches a public Facebook page's photos (from its `/photos` tab). Returns the first page plus a `paging.cursor` / `paging.hasNextPage` for the next page.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/profile/photos. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/profile/photos
Description: Fetches a public Facebook page's photos (from its `/photos` tab). Returns the first page plus a `paging.cursor` / `paging.hasNextPage` for the next page.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Facebook page URL, e.g. https://www.facebook.com/Cristiano
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- 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": {
"photos": [
{
"photoId": "1757191975767335",
"id": "YXBwX2l0ZW06MTAwMDQ0Mjk2NDg2MzgyOjIzMDUyNzI3MzI6NTo6MTc1NzE5MTk3NTc2NzMzNQ==",
"url": "https://www.facebook.com/photo.php?fbid=1757191975767335&set=pb.100044296486382.-2207520000&type=3",
"imageUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.99422-6/829136203_1608902097576513_7516733035385102623_n.png?stp=dst-jpg_tt6&cstp=mx1332x1666&ctp=s1332x1666&_nc_cat=…",
"thumbnailUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.99422-6/829136203_1608902097576513_7516733035385102623_n.png?stp=c0.110.1332.1332a_dst-jpg_tt6&cstp=mx1332x1332&ctp=s…",
"caption": "May be an image of American football and football",
"width": 1332,
"height": 1666,
"immersivePhotoEncodings": []
}
],
"photoCount": 8,
"paging": {
"cursor": "AQHTRjC48UiFn4TeEPBQiN4izjRExJM4D6Mj5LmhWoyebqFUEqr5UUsbObY6TyDWHmVIiI9cbHYjm9G9xC3-qHF83w",
"hasNextPage": true
},
"fetchedAt": "2026-10-05T14:42:43.026Z"
},
"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.
```
# Profile posts
Source: https://docs.scraperize.com/api-reference/facebook/profile-posts
/api-reference/openapi.json get /v1/facebook/profile/posts
Fetches a public Facebook profile/page's timeline posts (only publicly visible posts). Pass `url` OR `pageId` (the numeric profile id — faster). Each post includes text, author, media (photos/video), a shared-link preview, timestamp, and engagement stats (reactions with a per-type breakdown, comments, shares). Returns a `paging.cursor` / `paging.hasNextPage` for the next page.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/profile/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/profile/posts
Description: Fetches a public Facebook profile/page's timeline posts (only publicly visible posts). Pass `url` OR `pageId` (the numeric profile id — faster). Each post includes text, author, media (photos/video), a shared-link preview, timestamp, and engagement stats (reactions with a per-type breakdown, comments, shares). Returns a `paging.cursor` / `paging.hasNextPage` for the next page.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string): **Required — provide one of `url` or `pageId`.** Public Facebook profile URL, e.g. https://www.facebook.com/Cristiano.
- pageId (string): **Required — provide one of `url` or `pageId`.** Numeric profile id (faster than url).
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- 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": {
"posts": [
{
"postId": "1757191985767334",
"storyId": "UzpfSTEwMDA0NDI5NjQ4NjM4MjoxNzU3MTkxOTg1NzY3MzM0OjE3NTcxOTE5ODU3NjczMzQ=",
"url": "https://www.facebook.com/Cristiano/posts/pfbid02sAsoykNcMENEg7DTZoxYbGJccm4yrPRF8ksHP4PsYeT7hy9L53yzhc619z3ZigdCl",
"text": "Após a conferência de imprensa do Selecionador Nacional, e no seguimento de uma conversa com o Presidente da Federação Portuguesa de Futebol, tomei a decisão de…",
"author": {
"name": "Cristiano Ronaldo",
"id": "100044296486382",
"url": "https://www.facebook.com/Cristiano",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/722217916_1657518502401350_4679611467133898245_n.avif?stp=c0.54.1366.1366a_cp0_dst-avif&cstp=mx1366x1366&ctp=…",
"verified": null
},
"createdAt": "2026-09-30T18:36:43.000Z",
"createdTimestamp": 1790793403,
"media": {
"type": "photo",
"videoId": null,
"videoUrl": null,
"videoHdUrl": null,
"videoSdUrl": null,
"thumbnailUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.99422-6/829136203_1608902097576513_7516733035385102623_n.png?stp=dst-jpg_tt6&cstp=mx1332x1666&ctp=s640x640&_nc_cat=10…",
"width": null,
"height": null,
"durationSeconds": null,
"images": [
"https://scontent-los4-1.xx.fbcdn.net/v/t39.99422-6/829136203_1608902097576513_7516733035385102623_n.png?stp=dst-jpg_tt6&cstp=mx1332x1666&ctp=s640x640&_nc_cat=10…"
],
"music": null
},
"link": null,
"stats": {
"reactions": 2284381,
"reactionsByType": [
{
"type": "Like",
"count": 1293723
}
],
"comments": 188146,
"shares": 124534,
"views": null,
"viewsLabel": null
},
"topComments": [
{
"id": "Y29tbWVudDoxNzU3MTkxOTg1NzY3MzM0XzQyMDUyMTU0NDY0MzYzNjQ=",
"text": "When Ronaldo is happy the world is happy except particular group of people",
"author": {
"name": "Bilen Bahta",
"id": "pfbid0ePzmwJnoZW7W6e7pqYQVwwMDohXQL1H5V72GFREzstS48iF1pjBQiuaCHUHYAQr8l",
"url": "https://www.facebook.com/pfbid0ePzmwJnoZW7W6e7pqYQVwwMDohXQL1H5V72GFREzstS48iF1pjBQiuaCHUHYAQr8l",
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t1.30497-1/453178253_471506465671661_2781666950760530985_n.png?stp=cp0_dst-png&cstp=mx2048x2048&ctp=s32x32&_nc_cat=1&ccb=…",
"verified": false
},
"reactions": 16000,
"reactionsByType": [
{
"type": "Like",
"count": 13701
}
],
"replyCount": 526,
"createdAtMs": 1790793985000,
"createdAt": "2026-09-30T18:46:25.000Z",
"url": "https://www.facebook.com/Cristiano/posts/pfbid02sAsoykNcMENEg7DTZoxYbGJccm4yrPRF8ksHP4PsYeT7hy9L53yzhc619z3ZigdCl?comment_id=4205215446436364"
}
],
"isReshare": false,
"sharedPost": null
}
],
"postCount": 3,
"paging": {
"cursor": "Cg8Ob3JnYW5pY19jdXJzb3IJAAACmkFRSFREVlpaN0xGbWxYUUZZNUJYU0xSVkJYNEJ3cXNnMG5yUDJDTDZtMzB0UlZXekNwaXcwTS0wVE1QcUNPYTNaeTlsX3ZRZFVyWmJRWTNFak1XSHl1MThPRnVRTmZnTjJE…",
"hasNextPage": true
},
"fetchedAt": "2026-10-05T14:42:59.313Z"
},
"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.
```
# Profile reels
Source: https://docs.scraperize.com/api-reference/facebook/profile-reels
/api-reference/openapi.json get /v1/facebook/profile/reels
Fetches a public Facebook page's reels (from its `/reels` tab). Each reel includes its video id, permalink, caption, publish time, dimensions, thumbnail, a direct MP4 url, author, audio/soundtrack, and engagement stats (exact reactions & comments; Facebook-abbreviated share & view labels). Returns the first page plus a `paging.cursor` / `paging.hasNextPage` for the next page.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/facebook/profile/reels. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/facebook/profile/reels
Description: Fetches a public Facebook page's reels (from its `/reels` tab). Each reel includes its video id, permalink, caption, publish time, dimensions, thumbnail, a direct MP4 url, author, audio/soundtrack, and engagement stats (exact reactions & comments; Facebook-abbreviated share & view labels). Returns the first page plus a `paging.cursor` / `paging.hasNextPage` for the next page.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Facebook page URL, e.g. https://www.facebook.com/Cristiano
- cursor (string): The `paging.cursor` from a previous call, to fetch the next page.
- 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": {
"reels": [
{
"videoId": "1549207066583030",
"postId": "1693264105493456",
"storyId": "UzpfSTEwMDA0NDI5NjQ4NjM4MjpWSzoxNTQ5MjA3MDY2NTgzMDMw",
"url": "https://www.facebook.com/reel/1549207066583030",
"caption": "Greatness takes many forms 💪\n\nEsports World Cup is live in Paris with over 2000 players putting in the work to be the champion. \n\n@ewc_en",
"createdAt": "2026-07-21T13:55:43.000Z",
"createdTimestamp": 1784642143,
"durationSeconds": 84.28,
"width": 1918,
"height": 1080,
"thumbnailUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t51.82787-10/753225069_18753687136056421_3177299699481750751_n.jpg?stp=dst-jpg_tt6&cstp=mx1080x1920&ctp=s960x960&_nc_cat=…",
"videoUrl": "https://video-los4-1.xx.fbcdn.net/o1/v/t2/f2/m367/AQPJ1HokO3L-cfH7Rp1IpdhkhNnahtRm6Du01t1ApV1NvPPeTH4FsrhGBONIoOPu1qzYrz3TolBASuIgrH9Izpy8vVxzCV42vrmsEI1CIw.mp4…",
"author": {
"id": "100044296486382",
"name": "Cristiano Ronaldo",
"url": "https://www.facebook.com/Cristiano",
"isVerified": true,
"avatarUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-1/722217916_1657518502401350_4679611467133898245_n.avif?stp=c0.54.1366.1366a_cp0_dst-avif&cstp=mx1366x1366&ctp=…"
},
"audio": {
"trackTitle": "Cristiano Ronaldo · Original audio",
"isOriginalAudio": true,
"soundtrackId": "27127875796913092"
},
"stats": {
"reactions": 964277,
"comments": 25731,
"sharesLabel": "5.5K",
"viewsLabel": "11M"
},
"feedbackId": "ZmVlZGJhY2s6MTY5MzI2NDEwNTQ5MzQ1Ng=="
}
],
"reelCount": 10,
"paging": {
"cursor": "AQHTUQrM2BH2vlehstnBx-XqoaTQKhZSCy7sqyZjNz8Ckax3xYFNy5Z584sdkVPT2j7nk2TremsLkJRqxR8vtYHr2g",
"hasNextPage": true
},
"fetchedAt": "2026-10-05T14:42:55.145Z"
},
"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.
```
# Audio Reels
Source: https://docs.scraperize.com/api-reference/instagram/audio-reels
/api-reference/openapi.json get /v1/instagram/audio/reels
Fetches the public Reels that use an Instagram audio — a licensed song or an original sound — by the audio's URL (the `audio.url` every Instagram post and Reel endpoint returns), 12 per page with a cursor. The first page also returns the audio itself (`audio` is null on later pages): title, artist (and their Instagram account), cover art, duration, how many Reels use it, explicit and trending flags, a direct download link to the full audio, a 30-second preview, Spotify link and highlight times (licensed music), or the Reel the sound comes from (original audio). Each Reel has its id, shortcode and URL, play count, like and comment counts, caption with hashtags and mentions, posted date, cover image, video files with duration, its audio track, location, tagged users, collaborators, sponsors and the owner (handle, name, verified, picture, profile URL). Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/audio/reels. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/audio/reels
Description: Fetches the public Reels that use an Instagram audio — a licensed song or an original sound — by the audio's URL (the `audio.url` every Instagram post and Reel endpoint returns), 12 per page with a cursor. The first page also returns the audio itself (`audio` is null on later pages): title, artist (and their Instagram account), cover art, duration, how many Reels use it, explicit and trending flags, a direct download link to the full audio, a 30-second preview, Spotify link and highlight times (licensed music), or the Reel the sound comes from (original audio). Each Reel has its id, shortcode and URL, play count, like and comment counts, caption with hashtags and mentions, posted date, cover image, video files with duration, its audio track, location, tagged users, collaborators, sponsors and the owner (handle, name, verified, picture, profile URL). Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The Instagram audio URL, `https://www.instagram.com/reels/audio//`.
- cursor (string): The `cursor` from a previous response (same `url`) to fetch the next page. Omit for the first page.
- 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": {
"audioId": "2165804150321495",
"audio": {
"id": "2165804150321495",
"url": "https://www.instagram.com/reels/audio/2165804150321495/",
"reelsCount": 1723,
"reelsCountText": "1.7K reels",
"isRestricted": false,
"musicCanonicalId": "18124142074124533",
"type": "licensed_music",
"title": "Mozart Requiem: Lacrimosa",
"subtitle": null,
"artist": "Apollo's Fire & Jeannette Sorrell",
"artistAccount": null,
"artistId": "2636476966643137",
"coverUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-6/426544318_2198728903804555_7253798101550739750_n.jpg?stp=dst-jpg_p526x296_tt6&_nc_cat=1&ccb=1-7&_nc_sid=2f255…",
"coverThumbnailUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-6/426544318_2198728903804555_7253798101550739750_n.jpg?stp=dst-jpg_s168x128_tt6&_nc_cat=1&ccb=1-7&_nc_sid=2f255…",
"durationSeconds": 221.866,
"isExplicit": false,
"isTrending": false,
"trendRank": null,
"hasLyrics": false,
"downloadUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m69/AQNr5XNPwF-tDnNDDR6uebxcys6Nk8--ytmdaU6vVJYvvyQ9gvJFt83FtZAPys6CYmO9DofOIXbl9DJkb4l6tpUU.mp4?strext=1&_n…",
"previewUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m69/AQNwjiShe4an2wNQIaYGoldqF8thvI2ISKaT6oLcanFw8_E6GlQFa91-AXbtr12TbHKilYWClvXabT2B2YnVq3TT.mp4?strext=1&_n…",
"highlightStartTimesSeconds": [
12.5
],
"spotify": {
"trackId": "23m2f4rRU6tTatKkzqUPVT",
"url": "https://open.spotify.com/track/23m2f4rRU6tTatKkzqUPVT?utm_source=instagram&utm_medium=listen"
},
"originalReel": null,
"createdAt": null,
"isReuseAllowed": true,
"audioAssetId": "180945896082373",
"audioClusterId": "2165804150321495"
},
"reels": [
{
"id": "3996422285559022292",
"code": "Dd2JOUPM0LU",
"url": "https://www.instagram.com/reel/Dd2JOUPM0LU/",
"postType": "video",
"productType": "clips",
"isReel": true,
"owner": {
"id": "1175255683",
"handle": "ainima__aa",
"fullName": null,
"isVerified": false,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/712903680_18592559155023684_5173890581012070109_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/ainima__aa/"
},
"caption": "Truly amazing 🤩 #vatican #rome #italy #viral",
"captionIsEdited": false,
"hashtags": [
"vatican"
],
"mentions": [],
"takenAt": "2026-09-28T21:30:22.000Z",
"likeCount": 104,
"commentCount": 1,
"likeAndViewCountsHidden": false,
"isPinned": false,
"isPaidPartnership": false,
"width": 1080,
"height": 1920,
"imageUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/825320544_18631411843023684_7507620453771349711_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=109&ig_cache_key=Mzk5N…",
"videoUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQOH9a-p731vudZ_sDhUKMULEgdfTF-k5l-qvxDNCyeET-4v8zhTOA3CBUckJHoTxaoJAZ4ntgaPTl_89ewnrvfEtDd_IC076GhWOq4.…",
"videoVersions": [
{
"type": 101,
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQOH9a-p731vudZ_sDhUKMULEgdfTF-k5l-qvxDNCyeET-4v8zhTOA3CBUckJHoTxaoJAZ4ntgaPTl_89ewnrvfEtDd_IC076GhWOq4.…",
"width": 720,
"height": 1280
}
],
"videoDurationSeconds": 25.54,
"hasAudio": true,
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/825320544_18631411843023684_7507620453771349711_n.jpg?stp=dst-jpg_e15_p640x640_tt6&_nc_cat=109&ig_cache_…",
"accessibilityCaption": null,
"aiLabel": null,
"location": {
"id": "213968539",
"name": "Vatican City",
"lat": 41.904,
"lng": 12.453
},
"audio": {
"type": "licensed_music",
"id": "2165804150321495",
"url": "https://www.instagram.com/reels/audio/2165804150321495/",
"title": "Mozart Requiem: Lacrimosa",
"artist": "Apollo's Fire & Jeannette Sorrell",
"artistHandle": null,
"coverUrl": "https://scontent-los4-1.xx.fbcdn.net/v/t39.30808-6/426544318_2198728903804555_7253798101550739750_n.jpg?stp=dst-jpg_s168x128_tt6&_nc_cat=1&ccb=1-7&_nc_sid=2f255…",
"isExplicit": false,
"isTrending": false
},
"coauthors": [],
"sponsors": [],
"taggedUsers": [],
"carouselCount": null,
"carouselItems": [],
"playCount": 2184
}
],
"count": 12,
"cursor": "eyJoIjoiYXVkaW86MjE2NTgwNDE1MDMyMTQ5NSIsImMiOiJHdWFLdDhmNzdmdVBqMi1vaTVyem9ibVM5bTdNa2NTN250NkY2MjZ5MnVURG5jSDItbTdPai1mejJzM082VzZVem9QYjlPM3VfbTY4dHFhMGlLT0Zo…",
"hasMore": true,
"fetchedAt": "2026-10-12T08:16:15.112Z"
},
"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.
```
# Basic profile
Source: https://docs.scraperize.com/api-reference/instagram/basic-profile
/api-reference/openapi.json get /v1/instagram/basic-profile
Fetches a public Instagram profile by its numeric user id and returns it as clean JSON: user id, username, full name, bio, profile picture (standard and full-size), verified/private/memorialized flags, follower, following and post counts, bio links (title, URL, pinned), the linked Facebook Page, the Threads username, pronouns, whether the account has an active story (and when it was posted), and whether it posts Reels. Useful when you have an account id but not its current username. Posts, highlights and related accounts are not included (see the Profile endpoint). Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/basic-profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/basic-profile
Description: Fetches a public Instagram profile by its numeric user id and returns it as clean JSON: user id, username, full name, bio, profile picture (standard and full-size), verified/private/memorialized flags, follower, following and post counts, bio links (title, URL, pinned), the linked Facebook Page, the Threads username, pronouns, whether the account has an active story (and when it was posted), and whether it posts Reels. Useful when you have an account id but not its current username. Posts, highlights and related accounts are not included (see the Profile endpoint). Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- userId (string) [required]: The Instagram user id (numeric `pk`), e.g. `787132`.
- 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": {
"profile": {
"id": "787132",
"graphId": "17841400573960012",
"handle": "natgeo",
"fullName": "National Geographic",
"url": "https://www.instagram.com/natgeo/",
"biography": "Step into wonder and find your inner explorer with National Geographic 🌎",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"profilePicUrlHd": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"isPrivate": false,
"isVerified": true,
"isMemorialized": false,
"followerCount": 268400764,
"followingCount": 194,
"postCount": 32000,
"postCountApproximate": true,
"hasActiveStory": true,
"latestStoryAt": "2026-10-11T19:24:21.000Z",
"hasReels": true,
"threadsHandle": "natgeo",
"pronouns": [],
"bioLinks": [
{
"id": "17954981494900183",
"title": null,
"url": "http://visitstore.bio/natgeo",
"type": "external",
"isPinned": false,
"imageUrl": null
}
],
"linkedFacebookPage": null
},
"fetchedAt": "2026-10-12T08:15:58.465Z"
},
"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.
```
# Highlight detail
Source: https://docs.scraperize.com/api-reference/instagram/highlight-detail
/api-reference/openapi.json get /v1/instagram/user/highlight/detail
Fetches one Instagram story highlight by its id (from `/v1/instagram/user/highlights`) with every story in it. The highlight has its title, cover, link, when its newest story was posted, story count and owner (id, handle, verified, private, picture, profile URL). Each story has its id, image or video (files, size, duration, audio flag), when it was posted and when it expired from the 24h stories, caption, link stickers (with the real target URL), hashtags, mentions, location ids, shared posts, music, call-to-action links, sponsors, the account a re-shared story came from, app attribution (e.g. Spotify), "captured with" attribution and the AI label. Instagram withholds some accounts' highlight stories from logged-out visitors: those come back with the title, cover and owner, `storiesAvailable: false` and no stories. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/user/highlight/detail. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/user/highlight/detail
Description: Fetches one Instagram story highlight by its id (from `/v1/instagram/user/highlights`) with every story in it. The highlight has its title, cover, link, when its newest story was posted, story count and owner (id, handle, verified, private, picture, profile URL). Each story has its id, image or video (files, size, duration, audio flag), when it was posted and when it expired from the 24h stories, caption, link stickers (with the real target URL), hashtags, mentions, location ids, shared posts, music, call-to-action links, sponsors, the account a re-shared story came from, app attribution (e.g. Spotify), "captured with" attribution and the AI label. Instagram withholds some accounts' highlight stories from logged-out visitors: those come back with the title, cover and owner, `storiesAvailable: false` and no stories. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- id (string) [required]: The highlight id, e.g. `17975319242920589` (the `id` from `/v1/instagram/user/highlights`; a `/stories/highlights//` URL also works).
- 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": {
"highlight": {
"id": "17975319242920589",
"title": "Just Do It",
"url": "https://www.instagram.com/stories/highlights/17975319242920589/",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/544818894_2419507208428757_4822384952945732927_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=104&ccb=7-5&_nc_si…",
"latestStoryAt": "2025-09-19T16:48:25.000Z",
"storyCount": 48,
"storiesAvailable": true,
"canReshare": true,
"owner": {
"id": "13460080",
"handle": "nike",
"fullName": null,
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/551608484_18567162979020081_1135468084872726555_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/nike/",
"isPrivate": false,
"transparencyLabel": null,
"aiLabel": null
}
},
"stories": [
{
"id": "3713636227774800082",
"code": "DOJfHk1ieDS",
"mediaType": "video",
"takenAt": "2025-09-03T17:19:17.000Z",
"expiredAt": "2025-09-04T17:19:17.000Z",
"width": 1080,
"height": 1920,
"imageUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/542276903_2085294435612351_6356133177611658319_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=103&ig_cache_key=MzcxMz…",
"videoUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m78/AQNTsJfd6gqlJnxcA6qz1CR4cX-0IhuMWJymr62cDBFFLIYVhmUbM32DIsZoOo0UNmucuZbQ94MoRxktLhsETmxqFSTVXgdaiJwzzOo.…",
"videoVersions": [
{
"type": 101,
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m78/AQNTsJfd6gqlJnxcA6qz1CR4cX-0IhuMWJymr62cDBFFLIYVhmUbM32DIsZoOo0UNmucuZbQ94MoRxktLhsETmxqFSTVXgdaiJwzzOo.…",
"width": null,
"height": null
}
],
"videoDurationSeconds": 9.8,
"hasAudio": true,
"caption": null,
"accessibilityCaption": null,
"isPaidPartnership": false,
"isEdited": false,
"aiLabel": null,
"links": [],
"hashtags": [],
"mentions": [],
"locationIds": [],
"sharedPosts": [],
"music": [],
"ctaLinks": [],
"sponsors": [],
"resharedFrom": null,
"appAttribution": null,
"capturedWith": null
}
],
"count": 48,
"fetchedAt": "2026-10-12T15:30:06.501Z"
},
"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.
```
# Popular Search
Source: https://docs.scraperize.com/api-reference/instagram/popular-search
/api-reference/openapi.json get /v1/instagram/search/popular
Explores an Instagram topic and its curated posts — the public page Instagram publishes for a popular keyword (the same page `instagram.com/popular//` shows, and where hashtag pages now lead). Returns the topic (display name, number of Reels about it, an AI-written summary with its source links, and up to 100 related keywords) and its curated posts, 12 per page with a cursor (Instagram curates around 50 per topic). Each post has its id, shortcode and URL, play count, like and comment counts, caption with hashtags and mentions, posted date, cover image, video files with duration, the audio track (with its audio page URL), tagged users, collaborators, sponsors, location and the owner (handle, name, verified, profile picture, profile URL). Also returns Instagram's site-wide trending topics right now. Instagram only publishes pages for widely searched topics: a niche keyword returns 404. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/search/popular. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/search/popular
Description: Explores an Instagram topic and its curated posts — the public page Instagram publishes for a popular keyword (the same page `instagram.com/popular//` shows, and where hashtag pages now lead). Returns the topic (display name, number of Reels about it, an AI-written summary with its source links, and up to 100 related keywords) and its curated posts, 12 per page with a cursor (Instagram curates around 50 per topic). Each post has its id, shortcode and URL, play count, like and comment counts, caption with hashtags and mentions, posted date, cover image, video files with duration, the audio track (with its audio page URL), tagged users, collaborators, sponsors, location and the owner (handle, name, verified, profile picture, profile URL). Also returns Instagram's site-wide trending topics right now. Instagram only publishes pages for widely searched topics: a niche keyword returns 404. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The topic keyword, e.g. `nike`, `lagos restaurants` or `#wizkid` (case and a leading `#` are ignored).
- cursor (string): The `cursor` from a previous response (same `query`) to fetch the next page. Omit for the first page.
- 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": {
"query": "nike",
"topic": {
"keyword": "nike",
"title": "Nike",
"url": "https://www.instagram.com/popular/nike/",
"totalReels": 588000000,
"totalReelsApproximate": true,
"totalReelsText": "588M",
"summary": {
"text": "Nike (nike) posted several major 2026 campaigns, including A'ja Wilson’s defiant MVP video and the Caitlin Clark Caitlin 1 launch, called the largest women’s si…",
"sources": [
"https://hawkeyeswire.usatoday.com/story/sports/college/hawkeyes/womens-basketball/2026/10/05/caitlin-clark-nike-signature-shoes-launch/92096964007/"
],
"linkedTerms": []
},
"relatedKeywords": [
{
"keyword": "nike airforces",
"url": "https://www.instagram.com/popular/nike%20airforces/"
}
]
},
"posts": [
{
"id": "3941303402563080102",
"code": "DayUpANz4-m",
"url": "https://www.instagram.com/reel/DayUpANz4-m/",
"postType": "video",
"productType": "clips",
"isReel": true,
"owner": {
"id": "64159681757",
"handle": "tk.kaylee.vip",
"fullName": "Jay-shoes",
"isVerified": false,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/660740589_17948491257137758_9211439282716157928_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/tk.kaylee.vip/"
},
"caption": "Nike mind 001🔥🔥🔥\n#sneakers #nike #shopping #fyp #shoes",
"captionIsEdited": false,
"hashtags": [
"sneakers"
],
"mentions": [],
"takenAt": "2026-07-14T20:14:07.000Z",
"likeCount": 263695,
"commentCount": 649,
"likeAndViewCountsHidden": false,
"isPinned": false,
"isPaidPartnership": false,
"width": 1440,
"height": 2560,
"imageUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/734797505_1499766601441076_1244056075345681875_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=1&ig_cache_key=Mzk0MTMw…",
"videoUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQOtquwpu4BrYuqpzBoiHEhUrDMEs2VlxHK1CFrG3LTeBUmF_T7wts3ZGCxnbh0rMc84YaNM81eI9oHTeDhy3sBaos9sECXDEWUKAWw.…",
"videoVersions": [
{
"type": 101,
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQOtquwpu4BrYuqpzBoiHEhUrDMEs2VlxHK1CFrG3LTeBUmF_T7wts3ZGCxnbh0rMc84YaNM81eI9oHTeDhy3sBaos9sECXDEWUKAWw.…",
"width": 720,
"height": 1280
}
],
"videoDurationSeconds": 14.033,
"hasAudio": true,
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/734797505_1499766601441076_1244056075345681875_n.jpg?stp=c0.248.640.640a_dst-jpg_e15_tt6&_nc_ht=scontent…",
"accessibilityCaption": null,
"aiLabel": null,
"location": null,
"audio": {
"type": "original_sounds",
"id": "27841799135458429",
"url": "https://www.instagram.com/reels/audio/27841799135458429/",
"title": "Original audio",
"artist": "tk.kaylee.vip",
"artistHandle": "tk.kaylee.vip",
"coverUrl": null,
"isExplicit": false,
"isTrending": false
},
"coauthors": [],
"sponsors": [],
"taggedUsers": [],
"carouselCount": null,
"carouselItems": [],
"playCount": 7762062,
"partial": false
}
],
"count": 12,
"cursor": "eyJoIjoia3c6bmlrZSIsImMiOiJBUUhUSzFnMUdGbGZLR3V0dEx5QUNXOUR2THNZTkpPS2VUWTByN2V5Z3p2RndXT0hCUW5QOXd0VkpObldfT1dlNGR3MCJ9",
"hasMore": true,
"trendingTopics": [
{
"keyword": "nationalcomingoutday",
"url": "https://www.instagram.com/popular/nationalcomingoutday/",
"mediaCount": 18
}
],
"fetchedAt": "2026-10-12T08:16:12.466Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/instagram/post
/api-reference/openapi.json get /v1/instagram/post
Fetches a public Instagram post or Reel by URL — a photo, a video/Reel or a carousel — and returns it as clean JSON: id, shortcode and URL, type, caption with hashtags and mentions, posted date, like and comment counts, video views and (for Reels) plays, the media files (full-size image, video renditions with duration, first frame, every carousel slide with its own files, alt text and tagged users), the audio track (original sound or licensed music, with its audio page URL), tagged users, collaborators, sponsors, location, paid-partnership and AI labels, the topics Instagram links to the post and Instagram's AI-generated title and summary. Also returns the owner (id, handle, name, verified, private, HD picture, follower and post counts), the first comments shown under the post (text, date, likes, author) and more posts from the owner's profile. Media URLs download directly, with no extra headers. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/post
Description: Fetches a public Instagram post or Reel by URL — a photo, a video/Reel or a carousel — and returns it as clean JSON: id, shortcode and URL, type, caption with hashtags and mentions, posted date, like and comment counts, video views and (for Reels) plays, the media files (full-size image, video renditions with duration, first frame, every carousel slide with its own files, alt text and tagged users), the audio track (original sound or licensed music, with its audio page URL), tagged users, collaborators, sponsors, location, paid-partnership and AI labels, the topics Instagram links to the post and Instagram's AI-generated title and summary. Also returns the owner (id, handle, name, verified, private, HD picture, follower and post counts), the first comments shown under the post (text, date, likes, author) and more posts from the owner's profile. Media URLs download directly, with no extra headers. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The Instagram post or Reel URL, e.g. `https://www.instagram.com/p/DeMa5eeRPYL/` or `https://www.instagram.com/reel/DdG4RIxIPyf/`.
- region (select): The country to fetch the post from, as a two-letter code (ISO 3166-1) — useful when a post isn't available everywhere. Defaults to NG (Nigeria).
- 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": {
"post": {
"id": "3983118388705688735",
"code": "DdG4RIxIPyf",
"url": "https://www.instagram.com/reel/DdG4RIxIPyf/",
"postType": "video",
"productType": "clips",
"isReel": true,
"owner": {
"id": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/natgeo/"
},
"caption": "Presented by @Rolex. Welcome to Africa 🌍 Africa Earth’s Wild Home takes you deep into the heart of our wildest continent, bringing you closer to its animals, l…",
"captionIsEdited": false,
"hashtags": [
"Rolex"
],
"mentions": [
"Rolex"
],
"takenAt": "2026-09-10T13:00:14.000Z",
"likeCount": 79573,
"commentCount": 576,
"likeAndViewCountsHidden": false,
"isPinned": false,
"isPaidPartnership": true,
"width": 1080,
"height": 1920,
"imageUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/802503979_18695767555019133_6909214034622416488_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=101&ig_cache_key=Mzk4M…",
"videoUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQPDJtVww4K_686Ed9TbciE3dp0nrA4iUd5M8OJJIZKcU-RmkzTGwtpi3CsZY9Pgqj7h7kSpk9qe7k5S4JdWZ-Z2s7pzWC2DxuqU8rc.…",
"videoVersions": [
{
"type": 101,
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQPDJtVww4K_686Ed9TbciE3dp0nrA4iUd5M8OJJIZKcU-RmkzTGwtpi3CsZY9Pgqj7h7kSpk9qe7k5S4JdWZ-Z2s7pzWC2DxuqU8rc.…",
"width": 720,
"height": 1280
}
],
"videoDurationSeconds": 72.614,
"hasAudio": true,
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/802503979_18695767555019133_6909214034622416488_n.jpg?stp=c0.420.1080.1080a_dst-jpg_e15_fr_s1080x1080_tt…",
"accessibilityCaption": "Video by National Geographic on September 10, 2026. May be an image of elephant, rhinoceros, poster, outdoors and text that says 'DisNey+ hulu NATIONAL GEOGRAPH…",
"aiLabel": null,
"location": null,
"audio": {
"type": "original_sounds",
"id": "26106058285758518",
"url": "https://www.instagram.com/reels/audio/26106058285758518/",
"title": "Original audio",
"artist": "natgeo",
"artistHandle": "natgeo",
"coverUrl": null,
"isExplicit": false,
"isTrending": false
},
"coauthors": [
{
"id": "1165531538",
"handle": "rolex",
"fullName": "ROLEX",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/12142450_157279231293241_2115688096_a.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcG…",
"url": "https://www.instagram.com/rolex/"
}
],
"sponsors": [
{
"id": "1165531538",
"handle": "rolex",
"fullName": "ROLEX",
"isVerified": null,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/12142450_157279231293241_2115688096_a.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcG…",
"url": "https://www.instagram.com/rolex/"
}
],
"taggedUsers": [
{
"id": "1165531538",
"handle": "rolex",
"fullName": "ROLEX",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/12142450_157279231293241_2115688096_a.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcG…",
"url": "https://www.instagram.com/rolex/",
"x": 0,
"y": 0
}
],
"carouselCount": null,
"carouselItems": [],
"viewCount": 877976,
"playCount": 3339774,
"firstFrameUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/800449751_1552464312681294_2310629050779752568_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=109&ccb=7-5&_nc_sid=58c…",
"topics": [
{
"id": "national-geographic-africa",
"name": "national geographic africa"
}
],
"aiSummary": null,
"commentsDisabled": false,
"sharingDisabled": false
},
"owner": {
"id": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/natgeo/",
"isPrivate": false,
"profilePicUrlHd": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby…",
"isEmbedsDisabled": false,
"followerCount": 268414816,
"followerCountApproximate": false,
"postCount": 32067
},
"comments": [
{
"id": "18627640678004801",
"text": "🔥🔥🔥🔥🔥",
"hashtags": [],
"mentions": [],
"createdAt": "2026-10-12T07:05:05.000Z",
"likeCount": 0,
"replyCount": null,
"author": {
"id": "33402776402",
"handle": "seetheworld3000",
"fullName": null,
"isVerified": false,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/780593730_18093068459112403_8813944285625000079_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=101&ccb=7-5&_nc_s…",
"url": "https://www.instagram.com/seetheworld3000/"
},
"gif": null,
"isHidden": false,
"restrictedStatus": null,
"hasTranslation": null
}
],
"commentsHasMore": true,
"moreFromOwner": [
{
"id": "3947535193527528320",
"code": "DbIdlf0j6uA",
"url": "https://www.instagram.com/reel/DbIdlf0j6uA/",
"postType": "video",
"productType": "clips",
"caption": "Describe Pompeii: Out of Time in 3 words? It's Now Streaming.\n\n#PompeiiOutOfTime with @twhiddleston is now streaming on @DisneyPlus and @hulu.",
"accessibilityCaption": "Video by National Geographic on July 23, 2026. May be an image of one or more people.",
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/752808040_18678898645019133_4153257147870540953_n.jpg?stp=dst-jpg_e35_s640x640_tt6&_nc_cat=106&ccb=7-5&_…"
}
],
"region": "NG",
"fetchedAt": "2026-10-12T09:30:15.062Z"
},
"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.
```
# Post comments
Source: https://docs.scraperize.com/api-reference/instagram/post-comments
/api-reference/openapi.json get /v1/instagram/post/comments
Fetches the comments on a public Instagram post or Reel by its URL, newest first, about 12–15 per page with a cursor. Each comment has its id, text with hashtags and mentions, posted date, like count, the author (id, handle, verified, profile picture, profile URL), the GIF for GIF comments, and hidden / restricted / translation flags. Top-level comments only: Instagram does not make comment replies (or reply counts) available without logging in, so replies can't be returned. Also lists comments Instagram withholds in the requester's country. A post with comments turned off returns an empty list; a private or missing post returns 404. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/post/comments. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/post/comments
Description: Fetches the comments on a public Instagram post or Reel by its URL, newest first, about 12–15 per page with a cursor. Each comment has its id, text with hashtags and mentions, posted date, like count, the author (id, handle, verified, profile picture, profile URL), the GIF for GIF comments, and hidden / restricted / translation flags. Top-level comments only: Instagram does not make comment replies (or reply counts) available without logging in, so replies can't be returned. Also lists comments Instagram withholds in the requester's country. A post with comments turned off returns an empty list; a private or missing post returns 404. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The Instagram post or Reel URL, e.g. `https://www.instagram.com/reel/DdG4RIxIPyf/`.
- cursor (string): The `cursor` from a previous response (same `url`) to fetch the next page. Omit for the first page.
- 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": {
"post": {
"id": "3983118388705688735",
"code": "DdG4RIxIPyf",
"url": "https://www.instagram.com/p/DdG4RIxIPyf/"
},
"comments": [
{
"id": "18627640678004801",
"text": "🔥🔥🔥🔥🔥",
"hashtags": [],
"mentions": [],
"createdAt": "2026-10-12T07:05:05.000Z",
"likeCount": 0,
"replyCount": null,
"author": {
"id": "33402776402",
"handle": "seetheworld3000",
"fullName": null,
"isVerified": false,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/780593730_18093068459112403_8813944285625000079_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=101&ccb=7-5&_nc_s…",
"url": "https://www.instagram.com/seetheworld3000/"
},
"gif": null,
"isHidden": false,
"restrictedStatus": null,
"hasTranslation": null
}
],
"count": 13,
"cursor": "eyJpbnYiOiJ0cnVlIiwiaCI6Im1lZGlhOjM5ODMxMTgzODg3MDU2ODg3MzUiLCJjIjoiQVFIVGoxNzBNUkFBRS1FQ1pJZ1RhaXNVU19IT2MxMEtpR0hwOGZmX0dqNmxabU9HdE10bmc2aHJtOUNXS1R5aGRtVnF1…",
"hasMore": true,
"geoblockedComments": [],
"fetchedAt": "2026-10-12T09:30:17.319Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/instagram/profile
/api-reference/openapi.json get /v1/instagram/profile
Fetches a public Instagram profile by username and returns it as clean JSON: user id, handle, full name, bio, profile picture, verified/private/memorialized flags, follower, following and post counts, bio links (title, URL, pinned), the linked Facebook Page, the Threads username, pronouns, whether the account has an active story (and when it was posted), whether it posts Reels, and its story highlights (id, title, cover, link). Also returns related accounts — the "Accounts you might like" Instagram suggests for the profile (id, handle, name, verified, picture). Posts are not included. Private accounts return their public profile header. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/profile
Description: Fetches a public Instagram profile by username and returns it as clean JSON: user id, handle, full name, bio, profile picture, verified/private/memorialized flags, follower, following and post counts, bio links (title, URL, pinned), the linked Facebook Page, the Threads username, pronouns, whether the account has an active story (and when it was posted), whether it posts Reels, and its story highlights (id, title, cover, link). Also returns related accounts — the "Accounts you might like" Instagram suggests for the profile (id, handle, name, verified, picture). Posts are not included. Private accounts return their public profile header. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Instagram username, e.g. `natgeo` (an `@handle` or profile URL also works).
- 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": {
"profile": {
"id": "787132",
"graphId": "17841400573960012",
"handle": "natgeo",
"fullName": "National Geographic",
"url": "https://www.instagram.com/natgeo/",
"biography": "Step into wonder and find your inner explorer with National Geographic 🌎",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"isPrivate": false,
"isVerified": true,
"isMemorialized": false,
"followerCount": 268400763,
"followingCount": 194,
"postCount": 32000,
"postCountApproximate": true,
"hasActiveStory": true,
"latestStoryAt": "2026-10-11T19:24:21.000Z",
"hasReels": true,
"threadsHandle": "natgeo",
"pronouns": [],
"bioLinks": [
{
"id": "17954981494900183",
"title": null,
"url": "http://visitstore.bio/natgeo",
"type": "external",
"isPinned": false,
"imageUrl": null
}
],
"linkedFacebookPage": null,
"highlights": [],
"highlightsHasMore": false
},
"relatedAccounts": [
{
"id": "378353537",
"handle": "animalplanet",
"fullName": "Animal Planet",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/471307838_1123917355849999_3742640417869698375_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=105&ccb=7-5&_nc_sid…",
"url": "https://www.instagram.com/animalplanet/"
}
],
"fetchedAt": "2026-10-12T08:15:55.996Z"
},
"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.
```
# Profile post count
Source: https://docs.scraperize.com/api-reference/instagram/profile-post-count
/api-reference/openapi.json get /v1/instagram/profile/post-count
Fetches the number of posts an Instagram profile shows, by username — fast, from a single page load. Returns the count as a number, exactly as Instagram prints it (e.g. `1,798` or `32K`), and whether it is exact. Also returns the account (id, handle, name, private and verified flags) and its exact follower and following counts alongside the figures the profile prints. Works for private accounts too. Instagram abbreviates large post counts for everyone who is logged out; the exact figure is not public. The profile summary Instagram prints is cached on its side, so its figures can trail the live numbers slightly (compare the printed and exact following counts). Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/profile/post-count. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/profile/post-count
Description: Fetches the number of posts an Instagram profile shows, by username — fast, from a single page load. Returns the count as a number, exactly as Instagram prints it (e.g. `1,798` or `32K`), and whether it is exact. Also returns the account (id, handle, name, private and verified flags) and its exact follower and following counts alongside the figures the profile prints. Works for private accounts too. Instagram abbreviates large post counts for everyone who is logged out; the exact figure is not public. The profile summary Instagram prints is cached on its side, so its figures can trail the live numbers slightly (compare the printed and exact following counts). Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Instagram username, e.g. `natgeo` (an `@handle` or profile URL also works).
- 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": {
"profile": {
"id": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"url": "https://www.instagram.com/natgeo/",
"isPrivate": false,
"isVerified": true
},
"postCount": 32000,
"postCountText": "32K",
"isExact": false,
"hasPosts": true,
"followers": {
"count": 268400764,
"text": "268M"
},
"following": {
"count": 194,
"text": "195"
},
"fetchedAt": "2026-10-12T08:16:04.978Z"
},
"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.
```
# User highlights
Source: https://docs.scraperize.com/api-reference/instagram/user-highlights
/api-reference/openapi.json get /v1/instagram/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.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
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.
```
# User posts
Source: https://docs.scraperize.com/api-reference/instagram/user-posts
/api-reference/openapi.json get /v1/instagram/user/posts
Fetches a public Instagram account's posts — photos, Reels and carousels — 12 per page, pinned posts first and then newest first, paged with a cursor. Each post has its id, shortcode and URL, type (photo / video / carousel, and whether it is a Reel), caption with hashtags and mentions, posted date, like and comment counts, pinned and paid-partnership flags, the full-size image, video files (with duration and audio flag), every carousel slide, the audio track (original sound or licensed music: title, artist, cover, trending, audio page URL), location, tagged users, collaborators, sponsors, accessibility caption and AI label. Also returns the account (id, handle, name, verified, profile picture). Private accounts and accounts with no posts return 404. View counts are not available. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/user/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/user/posts
Description: Fetches a public Instagram account's posts — photos, Reels and carousels — 12 per page, pinned posts first and then newest first, paged with a cursor. Each post has its id, shortcode and URL, type (photo / video / carousel, and whether it is a Reel), caption with hashtags and mentions, posted date, like and comment counts, pinned and paid-partnership flags, the full-size image, video files (with duration and audio flag), every carousel slide, the audio track (original sound or licensed music: title, artist, cover, trending, audio page URL), location, tagged users, collaborators, sponsors, accessibility caption and AI label. Also returns the account (id, handle, name, verified, profile picture). Private accounts and accounts with no posts return 404. View counts are not available. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Instagram username, e.g. `natgeo` (an `@handle` or profile URL also works).
- cursor (string): The `cursor` from a previous response (same handle) to fetch the next page. Omit for the first page.
- 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": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"url": "https://www.instagram.com/natgeo/",
"profilePicUrlHd": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX…",
"isPrivate": false
},
"posts": [
{
"id": "3983118388705688735",
"code": "DdG4RIxIPyf",
"url": "https://www.instagram.com/reel/DdG4RIxIPyf/",
"postType": "video",
"productType": "clips",
"isReel": true,
"owner": {
"id": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"url": "https://www.instagram.com/natgeo/"
},
"caption": "Presented by @Rolex. Welcome to Africa 🌍 Africa Earth’s Wild Home takes you deep into the heart of our wildest continent, bringing you closer to its animals, l…",
"captionIsEdited": false,
"hashtags": [
"Rolex"
],
"mentions": [
"Rolex"
],
"takenAt": "2026-09-10T13:00:14.000Z",
"likeCount": 79568,
"commentCount": 576,
"likeAndViewCountsHidden": false,
"isPinned": true,
"isPaidPartnership": true,
"width": 1080,
"height": 1920,
"imageUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/802503979_18695767555019133_6909214034622416488_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=101&ig_cache_key=Mzk4M…",
"videoUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQPDJtVww4K_686Ed9TbciE3dp0nrA4iUd5M8OJJIZKcU-RmkzTGwtpi3CsZY9Pgqj7h7kSpk9qe7k5S4JdWZ-Z2s7pzWC2DxuqU8rc.…",
"videoVersions": [
{
"type": 101,
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQPDJtVww4K_686Ed9TbciE3dp0nrA4iUd5M8OJJIZKcU-RmkzTGwtpi3CsZY9Pgqj7h7kSpk9qe7k5S4JdWZ-Z2s7pzWC2DxuqU8rc.…",
"width": 720,
"height": 1280
}
],
"videoDurationSeconds": 72.614,
"hasAudio": true,
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/802503979_18695767555019133_6909214034622416488_n.jpg?stp=c0.420.1080.1080a_dst-jpg_e15_s1080x1080_tt6&_…",
"accessibilityCaption": null,
"aiLabel": null,
"location": null,
"audio": {
"type": "original_sounds",
"id": "26106058285758518",
"url": "https://www.instagram.com/reels/audio/26106058285758518/",
"title": "Original audio",
"artist": "natgeo",
"artistHandle": "natgeo",
"coverUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid…",
"isExplicit": false,
"isTrending": false
},
"coauthors": [
{
"id": "1165531538",
"handle": "rolex",
"fullName": "ROLEX",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/12142450_157279231293241_2115688096_a.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=e…",
"url": "https://www.instagram.com/rolex/"
}
],
"sponsors": [
{
"id": "1165531538",
"handle": "rolex",
"fullName": "ROLEX",
"isVerified": null,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/12142450_157279231293241_2115688096_a.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=e…",
"url": "https://www.instagram.com/rolex/"
}
],
"taggedUsers": [
{
"id": "1165531538",
"handle": "rolex",
"fullName": "ROLEX",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/12142450_157279231293241_2115688096_a.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=1&ccb=7-5&_nc_sid=f7ccc5&efg=e…",
"url": "https://www.instagram.com/rolex/",
"x": 0,
"y": 0
}
],
"carouselCount": null,
"carouselItems": []
}
],
"count": 12,
"cursor": "eyJoIjoibmF0Z2VvIiwiYyI6IkFRSFRFLU9ZRnU0dFdEcDlEeWg3eXJFcTZCQ2wzazNEcEJrMlVwS09kWWxaZDFjSDVtb0NKYkxoaHBia1JRRC1rcjV6SGxaby11cTZKNFFhTWJfb0lUWFhMZyJ9",
"hasMore": true,
"fetchedAt": "2026-10-12T08:16:00.641Z"
},
"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.
```
# User Reels
Source: https://docs.scraperize.com/api-reference/instagram/user-reels
/api-reference/openapi.json get /v1/instagram/user/reels
Fetches a public Instagram account's Reels by user id or username, 12 per page in the order of the profile's Reels tab (pinned first, then newest), paged with a cursor. Each Reel has its id, shortcode and URL, view (play) count, like and comment counts, caption with hashtags and mentions, posted date, pinned and paid-partnership flags, cover image, video files with duration and audio flag, the audio track (original sound or licensed music: title, artist, cover, trending, audio page URL), tagged users, collaborators, sponsors, location, accessibility caption and AI label. Also returns the account (id, handle, name, verified, profile picture). Pass either `userId` or `handle`. Private accounts and accounts with no Reels return 404. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/instagram/user/reels. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/instagram/user/reels
Description: Fetches a public Instagram account's Reels by user id or username, 12 per page in the order of the profile's Reels tab (pinned first, then newest), paged with a cursor. Each Reel has its id, shortcode and URL, view (play) count, like and comment counts, caption with hashtags and mentions, posted date, pinned and paid-partnership flags, cover image, video files with duration and audio flag, the audio track (original sound or licensed music: title, artist, cover, trending, audio page URL), tagged users, collaborators, sponsors, location, accessibility caption and AI label. Also returns the account (id, handle, name, verified, profile picture). Pass either `userId` or `handle`. Private accounts and accounts with no Reels return 404. 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. `787132`. Pass this or `handle`.
- handle (string): The Instagram username, e.g. `natgeo` (an `@handle` or profile URL also works). Pass this or `userId`.
- cursor (string): The `cursor` from a previous response (same account) to fetch the next page. Omit for the first page.
- 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": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/natgeo/",
"profilePicUrlHd": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLmRqYW5nby…",
"isPrivate": false
},
"reels": [
{
"id": "4005771580272580688",
"code": "DeXXAddgJhQ",
"url": "https://www.instagram.com/reel/DeXXAddgJhQ/",
"postType": "video",
"productType": "clips",
"isReel": true,
"owner": {
"id": "787132",
"handle": "natgeo",
"fullName": "National Geographic",
"isVerified": true,
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/683576066_18653628823019133_9051036240972105113_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"url": "https://www.instagram.com/natgeo/"
},
"caption": "It’s snack time for these humpback whales. They use rings of bubbles like nets to concentrate fish and krill before surging through for a feast.\n\n#EuropeFromAbo…",
"captionIsEdited": false,
"hashtags": [
"EuropeFromAbove"
],
"mentions": [
"DisneyPlus"
],
"takenAt": "2026-10-11T19:01:22.000Z",
"likeCount": 65626,
"commentCount": 150,
"likeAndViewCountsHidden": false,
"isPinned": false,
"isPaidPartnership": false,
"width": 1080,
"height": 1920,
"imageUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/847570097_18706820542019133_7455916707765318737_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=1&ig_cache_key=NDAwNTc…",
"videoUrl": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQOkSrAEN8KwVY4aMEq8am1mrrOzzYjtCH_-noXMocBc8k7B4gHBV7l19_Qf_49Fv6gqJ0mrfMszGiesyhi1IjlavVP-vqz8SPVphSc.…",
"videoVersions": [
{
"type": 101,
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t2/f2/m86/AQOkSrAEN8KwVY4aMEq8am1mrrOzzYjtCH_-noXMocBc8k7B4gHBV7l19_Qf_49Fv6gqJ0mrfMszGiesyhi1IjlavVP-vqz8SPVphSc.…",
"width": 720,
"height": 1280
}
],
"videoDurationSeconds": 30.208,
"hasAudio": true,
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/847570097_18706820542019133_7455916707765318737_n.jpg?stp=c0.420.1080.1080a_dst-jpg_e15_fr_s1080x1080_tt…",
"accessibilityCaption": null,
"aiLabel": null,
"location": null,
"audio": {
"type": "original_sounds",
"id": "28298205573209552",
"url": "https://www.instagram.com/reels/audio/28298205573209552/",
"title": "Original audio",
"artist": "natgeo",
"artistHandle": "natgeo",
"coverUrl": null,
"isExplicit": false,
"isTrending": false
},
"coauthors": [],
"sponsors": [],
"taggedUsers": [],
"carouselCount": null,
"carouselItems": [],
"playCount": 1199342,
"partial": false
}
],
"count": 12,
"cursor": "eyJ1IjoibmF0Z2VvIiwiaCI6ImlkOjc4NzEzMiIsImMiOiJBUUhUazNUOEpmNHRPZWtGRThtRnpVQWVISDNCeWVrZUNlRUY2cW1CMExmZ1ZyS2RnQTJOcGQxRVNCTGhPODZaTzNxWDVtWWZpamp5X1B6T09BNW9J…",
"hasMore": true,
"fetchedAt": "2026-10-12T08:16:03.282Z"
},
"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.
```
# Clip
Source: https://docs.scraperize.com/api-reference/kick/clip
/api-reference/openapi.json get /v1/kick/clip
Fetches a public Kick clip by URL: title, view/like counts, duration, thumbnail + HLS video URL, the source stream/VOD reference, the category, the channel (streamer), and the creator who made the clip.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/kick/clip. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/kick/clip
Description: Fetches a public Kick clip by URL: title, view/like counts, duration, thumbnail + HLS video URL, the source stream/VOD reference, the category, the channel (streamer), and the creator who made the clip.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Kick clip URL, e.g. https://kick.com/asmongold/clips/clip_01M1G0VANEMPRXHA6HP6K750QM.
- 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": {
"clip": {
"id": "clip_01M1G0VANEMPRXHA6HP6K750QM",
"title": "xpocjz",
"url": "https://kick.com/asmongold/clips/clip_01M1G0VANEMPRXHA6HP6K750QM",
"privacy": "public",
"isMature": false,
"durationSeconds": 61,
"views": 21590,
"likes": 0,
"thumbnailUrl": "https://clips.kick.com/clips/83/clip_01M1G0VANEMPRXHA6HP6K750QM/thumbnail.webp",
"videoUrl": "https://clips.kick.com/clips/83/clip_01M1G0VANEMPRXHA6HP6K750QM/playlist.m3u8",
"createdAt": "2026-09-02T03:01:29.718101Z",
"startedAt": "2026-09-01T18:21:25Z",
"vodStartsAt": 758,
"livestreamId": "125160739",
"vodId": null,
"category": {
"id": 15,
"name": "Just Chatting",
"slug": "just-chatting",
"parentCategory": "irl",
"imageUrl": "https://files.kick.com/images/subcategories/15/banner/b697a8a3-62db-4779-aa76-e4e47662af97"
},
"channel": {
"id": 13809,
"username": "asmongold",
"slug": "asmongold",
"profilePicture": "https://files.kick.com/images/user/13928/profile_image/conversion/0115ff28-1ec9-4e1f-a007-1108fc839bde-thumb.webp"
},
"creator": {
"id": 2220141,
"username": "etro",
"slug": "etro",
"profilePicture": null
}
},
"fetchedAt": "2026-10-05T14:44:02.144Z"
},
"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.
```
# Komi page
Source: https://docs.scraperize.com/api-reference/komi/komi-page
/api-reference/openapi.json get /v1/komi/page
Fetches a public Komi.io creator page by URL: the profile (name, display name, avatar, socials, theme) and its content sections — each with its title and the items it holds (links, products with prices, YouTube videos, podcast with streaming links, mailing-list forms, …), every item with its title, url and image.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/komi/page. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/komi/page
Description: Fetches a public Komi.io creator page by URL: the profile (name, display name, avatar, socials, theme) and its content sections — each with its title and the items it holds (links, products with prices, YouTube videos, podcast with streaming links, mailing-list forms, …), every item with its title, url and image.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Komi page URL, e.g. https://shxtsngigs.komi.io.
- 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": {
"page": {
"username": "shxtsngigs",
"name": "ShxtsNGigs",
"displayName": "ShxtsNGigs",
"displayNameType": "IMAGE",
"displayNameImageUrl": "https://komi-production-assets.s3-accelerate.amazonaws.com/photos/qpUoVqwkkPOn4iRdqNdnz.png",
"avatarUrl": "https://komi-production-assets.s3-accelerate.amazonaws.com/photos/y9apL0SDVc6CrGkUElA6k.jpg?tr=w-810%2Ch-1018%2Ccm-extract%2Cx-0%2Cy-0&crp=%7B%22x%22%3A0%2C%22y…",
"avatarRatio": 1.25,
"category": null,
"currency": "USD",
"status": "active",
"isActive": true,
"createdAt": "2024-03-19T11:32:59.680Z",
"updatedAt": "2024-07-04T10:55:41.860Z",
"theme": {
"type": "CUSTOM",
"backgroundColor": "#D02E26",
"typographyColor": "#FFFFFF",
"overlayColor": "#FFFFFF",
"overlayOpacity": 0.1,
"showNavBar": true,
"showDisplayName": true
},
"socialLinks": [
{
"type": "TIKTOK",
"url": "https://www.tiktok.com/@shxtsngigs"
}
],
"sections": [
{
"id": "54ac6f12-45d8-45bc-8b49-7effd634daa8",
"title": "Daddy's Home Live Tour",
"order": 1,
"showTitle": true,
"items": [
{
"id": "0b7b97c1-8ae4-4ac9-ba7b-a3805963e231",
"type": "LINK",
"title": "UK & Ireland Tour Tickets! ",
"subtitle": null,
"url": "https://www.livenation.co.uk/shxtsngigs-tickets-adp1406143",
"imageUrl": "https://komi-production-assets.s3-accelerate.amazonaws.com/photos/x0hzq2QRLdBkF2wMKxHOM.jpg",
"order": 0,
"variant": null,
"price": null,
"currency": null,
"numberOfEpisodes": null,
"links": null,
"cta": null,
"fields": null,
"videos": null
}
]
}
],
"sectionCount": 9,
"itemCount": 16
},
"fetchedAt": "2026-10-05T14:43:54.851Z"
},
"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.
```
# Billboards
Source: https://docs.scraperize.com/api-reference/lagos-life/billboards
/api-reference/openapi.json get /v1/lagos-life/billboards
Fetches every billboard in the Lagos Life world (Lagos, Abuja and Port Harcourt): its slot, area, city, airport flag and weekly ₦ price, and every ad live on it — boards rotate their ads, one every 15 seconds — with the ad's link, image and end date. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/billboards. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/billboards
Description: Fetches every billboard in the Lagos Life world (Lagos, Abuja and Port Harcourt): its slot, area, city, airport flag and weekly ₦ price, and every ad live on it — boards rotate their ads, one every 15 seconds — with the ad's link, image and end date. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"priceNgn": 250000,
"airportPriceNgn": 500000,
"days": 7,
"slots": [
{
"slot": 1,
"area": "Ikeja road",
"city": "lagos",
"isAirport": false,
"priceNgn": 250000,
"ads": [
{
"id": "73d31a63eaa040009b88",
"link": "https://wa.me/+2349130509514",
"imageUrl": "https://lagoslife.app/api/ads/73d31a63eaa040009b88/image?v=0",
"endsAt": "2026-10-13T00:56:28.179Z"
}
],
"adCount": 43
}
],
"fetchedAt": "2026-10-09T16:37:07.766Z"
},
"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.
```
# Daily bulletin
Source: https://docs.scraperize.com/api-reference/lagos-life/daily-bulletin
/api-reference/openapi.json get /v1/lagos-life/daily
Fetches Lagos Life's in-game bulletin for today: the date and weekday, the weather in the game, the day's headline and the tip of the day. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/daily. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/daily
Description: Fetches Lagos Life's in-game bulletin for today: the date and weekday, the weather in the game, the day's headline and the tip of the day. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"date": "2026-10-09",
"weekday": "Friday",
"weather": "rainy",
"headline": "Harmattan arrives. Lips cracking citywide. Vaseline stocks soar.",
"tip": "Rent is due every Saturday. Don't let Baba Landlord catch you.",
"fetchedAt": "2026-10-09T16:37:06.490Z"
},
"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.
```
# Government
Source: https://docs.scraperize.com/api-reference/lagos-life/government
/api-reference/openapi.json get /v1/lagos-life/government
Fetches Lagos Life's government: the current term and when it ends; the governor (username, slogan, the votes they won with, verified flag, any announcement) and the policy in force with its label, effect and when it was set; and the running election — when it closes, total votes and every candidate (username, name, slogan, votes, vote share, rank, verified flag), ranked by votes. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/government. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/government
Description: Fetches Lagos Life's government: the current term and when it ends; the governor (username, slogan, the votes they won with, verified flag, any announcement) and the policy in force with its label, effect and when it was set; and the running election — when it closes, total votes and every candidate (username, name, slogan, votes, vote share, rank, verified flag), ranked by votes. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"term": {
"id": 1,
"endsAt": "2026-10-11T19:00:00.000Z"
},
"governor": {
"id": "cc2653272eec4238b3d5",
"username": "Franka",
"slogan": "Good Lagos ahead",
"votes": 9543,
"isVerified": false,
"policy": {
"id": "wages",
"label": "Minimum wage raise",
"emoji": "💼",
"effect": "Everyone earns 15% more per shift",
"since": "2026-10-09T06:38:20.471Z"
},
"announcement": null,
"announcementAt": null
},
"election": {
"term": 2,
"closesAt": "2026-10-11T19:00:00.000Z",
"candidateCount": 200,
"totalVotes": 211225,
"candidates": [
{
"rank": 1,
"id": "04c9566fcea04598a816",
"username": "quantum",
"name": "Quantum",
"slogan": "The Squad Party",
"votes": 60752,
"voteShare": 0.2876,
"isVerified": false
}
]
},
"fetchedAt": "2026-10-09T16:37:07.086Z"
},
"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.
```
# Live stats
Source: https://docs.scraperize.com/api-reference/lagos-life/live-stats
/api-reference/openapi.json get /v1/lagos-life/stats
Fetches Lagos Life's headline numbers right now: players online and all-time visits; the player homes on the map (total, online, at home, and counts by home type with area and city); billboards (boards with ads, empty boards, live ads and their weekly ₦ value); the Sea Plots ad wall (ads, plots used and on hold, weekly ₦ value); the election (candidates, total votes, leader and their vote share); and the number of verified players. A small summary — the records behind it are in the other Lagos Life endpoints. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/stats. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/stats
Description: Fetches Lagos Life's headline numbers right now: players online and all-time visits; the player homes on the map (total, online, at home, and counts by home type with area and city); billboards (boards with ads, empty boards, live ads and their weekly ₦ value); the Sea Plots ad wall (ads, plots used and on hold, weekly ₦ value); the election (candidates, total votes, leader and their vote share); and the number of verified players. A small summary — the records behind it are in the other Lagos Life endpoints. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"online": 113131,
"visits": 28495278,
"homes": {
"total": 400,
"online": 60,
"atHome": 33,
"byType": [
{
"homeType": "bananaIsland",
"homeName": "Mansion",
"area": "Banana Island",
"city": "lagos",
"count": 170
}
]
},
"billboards": {
"total": 62,
"withAds": 40,
"empty": 22,
"liveAds": 230,
"weeklyValueNgn": 57500000
},
"sea": {
"ads": 741,
"plotsUsed": 21333,
"plotsHeld": 7563,
"weeklyValueNgn": 10666500
},
"election": {
"candidates": 200,
"totalVotes": 211225,
"leader": "quantum",
"leaderVoteShare": 0.2876
},
"verifiedPlayers": 13,
"fetchedAt": "2026-10-09T16:37:05.578Z"
},
"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.
```
# Map places
Source: https://docs.scraperize.com/api-reference/lagos-life/map-places
/api-reference/openapi.json get /v1/lagos-life/places
Fetches the places on the Lagos Life map across Lagos, Abuja and Port Harcourt (e.g. New Afrika Shrine, Quilox, Balogun Market): each place's name, area, city, emoji, description and opening hours. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/places. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/places
Description: Fetches the places on the Lagos Life map across Lagos, Abuja and Port Harcourt (e.g. New Afrika Shrine, Quilox, Balogun Market): each place's name, area, city, emoji, description and opening hours. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"places": [
{
"id": "lagosAirport",
"name": "Murtala Muhammed International Airport",
"area": "Ikeja",
"city": "lagos",
"emoji": "✈️",
"blurb": "Lagos's airport. Book a flight to Abuja or Port Harcourt at check-in, wait in the lounge, watch the jets take off, or charter a chopper. Private jets park on th…",
"opensAt": 0,
"closesAt": 24
}
],
"count": 133,
"fetchedAt": "2026-10-09T16:37:10.759Z"
},
"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.
```
# Player homes
Source: https://docs.scraperize.com/api-reference/lagos-life/player-homes
/api-reference/openapi.json get /v1/lagos-life/homes
Fetches the player homes on the Lagos Life map: each player's id and username, verified flag, home type with its name, area, city and weekly in-game rent, the number of items in the home, and whether the player is online and at home. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/homes. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/homes
Description: Fetches the player homes on the Lagos Life map: each player's id and username, verified flag, home type with its name, area, city and weekly in-game rent, the number of items in the home, and whether the player is online and at home. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"homes": [
{
"userId": "10a1bd2aa50d4155a18a",
"username": "shallyr",
"isVerified": true,
"homeType": "bananaIsland",
"homeName": "Mansion",
"area": "Banana Island",
"city": "lagos",
"rent": 1500000,
"items": 44,
"online": false,
"atHome": false
}
],
"count": 400,
"fetchedAt": "2026-10-09T16:37:09.572Z"
},
"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.
```
# Sea plots
Source: https://docs.scraperize.com/api-reference/lagos-life/sea-plots
/api-reference/openapi.json get /v1/lagos-life/sea
Fetches the Lagos Life Sea Plots ad wall — paid image tiles floating on the lagoon: each ad's title, link, image, position and size on the grid, plots used, weekly ₦ cost and end date, plus the plots on hold for bookings being paid for, and the price per plot. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/sea. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/sea
Description: Fetches the Lagos Life Sea Plots ad wall — paid image tiles floating on the lagoon: each ad's title, link, image, position and size on the grid, plots used, weekly ₦ cost and end date, plus the plots on hold for bookings being paid for, and the price per plot. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"pricePerPlotNgn": 500,
"days": 7,
"ads": [
{
"id": "24a2950d59684629bff5",
"title": "Know your worth by Salary Index",
"link": "https://salaryindex.ng/worth",
"imageUrl": "https://lagoslife.app/api/sea/24a2950d59684629bff5/image?v=2",
"x": 17,
"y": 80,
"w": 7,
"h": 7,
"plots": 49,
"weeklyValueNgn": 24500,
"endsAt": "2026-10-31T12:22:20.832Z"
}
],
"held": [
{
"x": 0,
"y": -70,
"w": 4,
"h": 7,
"plots": 28
}
],
"fetchedAt": "2026-10-09T16:37:08.715Z"
},
"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.
```
# Site info
Source: https://docs.scraperize.com/api-reference/lagos-life/site-info
/api-reference/openapi.json get /v1/lagos-life/site
Fetches the Lagos Life site's details (lagoslife.app — a life-sim game set in Lagos with real players): name, title, description, URL, share image, logo, contact email, the official social accounts (X, TikTok, Instagram, LinkedIn) and the deployed build id. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/site. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/site
Description: Fetches the Lagos Life site's details (lagoslife.app — a life-sim game set in Lagos with real players): name, title, description, URL, share image, logo, contact email, the official social accounts (X, TikTok, Instagram, LinkedIn) and the deployed build id. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"name": "Lagos Life",
"title": "Lagos Life — live your Lagos story",
"description": "A Sims-style life game set in Lagos. Ride danfo, chop amala at Shitta, party at Quilox, survive NEPA — and make real friends. Play free in your browser.",
"url": "https://lagoslife.app",
"imageUrl": "https://lagoslife.app/opengraph-image?3c97f788344d8ddc",
"logoUrl": "https://lagoslife.app/icon.svg",
"email": "support@lagoslife.app",
"socials": [
"https://x.com/LagosLifeApp"
],
"build": "1791536334",
"fetchedAt": "2026-10-09T16:37:03.984Z"
},
"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.
```
# Verified players
Source: https://docs.scraperize.com/api-reference/lagos-life/verified-players
/api-reference/openapi.json get /v1/lagos-life/verified-players
Fetches Lagos Life's verified players (the accounts with a verified badge): each one's id and username. Takes no parameters. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/lagos-life/verified-players. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/lagos-life/verified-players
Description: Fetches Lagos Life's verified players (the accounts with a verified badge): each one's id and username. Takes no parameters. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- 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": {
"players": [
{
"id": "de815b73dc1d42719dc3",
"username": "Davido"
}
],
"count": 13,
"fetchedAt": "2026-10-09T16:37:10.251Z"
},
"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.
```
# Lnk.Bio page
Source: https://docs.scraperize.com/api-reference/linkbio/lnkbio-page
/api-reference/openapi.json get /v1/linkbio/page
Fetches a public Lnk.Bio (lnk.bio) link-in-bio page by URL: the profile (username, name, pronouns, avatar, verified status), the custom theme colors, the social-icon row, and the main bio links (title, url, thumbnail).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkbio/page. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkbio/page
Description: Fetches a public Lnk.Bio (lnk.bio) link-in-bio page by URL: the profile (username, name, pronouns, avatar, verified status), the custom theme colors, the social-icon row, and the main bio links (title, url, thumbnail).
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Lnk.Bio profile URL, e.g. https://lnk.bio/tamirawill.
- 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": {
"page": {
"username": "tamirawill",
"userId": "-1123819",
"name": "Tamira",
"pronouns": "(they/them)",
"displayName": "Tamira",
"url": "https://lnk.bio/tamirawill",
"avatarUrl": "https://s3.us-west-2.amazonaws.com/cdn.lnk.bio/profilepics/-1123819_20210219387.jpg",
"verified": true,
"theme": {
"headingsColor": "#8E6859",
"bioColor": "#8E6859",
"iconsColor": "#8E6859",
"iconTextColor": "#FAFAFA",
"backgroundColor": "#FCFAF7",
"boxColor": "#F8EDDE",
"iconBackgroundColor": "#221F1F"
},
"socialLinks": [
{
"platform": "Instagram",
"network": "SOCIAL_IG",
"url": "https://instagram.com/tamirawill"
}
],
"links": [
{
"id": "7336276",
"title": "Test",
"url": "https://www.google.com",
"image": "https://cdn2.lnk.bi/uploads/7336276_20240419182619257-1024.jpg?lu=2024-04-19+10%3A26%3A24",
"isMultiLink": true
}
]
},
"fetchedAt": "2026-10-05T14:43:48.935Z"
},
"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.
```
# Company
Source: https://docs.scraperize.com/api-reference/linkedin/company
/api-reference/openapi.json get /v1/linkedin/company
Fetches a public LinkedIn company page and returns the company profile — name, tagline, about, website, industry, company size, employees, headquarters, founded year, specialties, follower count, and recent posts. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkedin/company. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkedin/company
Description: Fetches a public LinkedIn company page and returns the company profile — name, tagline, about, website, industry, company size, employees, headquarters, founded year, specialties, follower count, and recent posts. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The URL of the LinkedIn company page, e.g. `https://www.linkedin.com/company/shopify`.
- 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": {
"company": {
"id": "784652",
"url": "https://www.linkedin.com/company/shopify",
"handle": "shopify",
"name": "Shopify",
"tagline": "Make commerce better for everyone",
"description": "Shopify is a leading global commerce company, providing trusted tools to start, grow, market, and manage a retail business of any size. Shopify makes commerce b…",
"logoUrl": "https://media.licdn.com/dms/image/v2/D560BAQG_KjTcNcrLVw/company-logo_200_200/B56ZZolTV.HUAU-/0/1745511331439/shopify_logo?e=2147483647&v=beta&t=D2saVg58cKnwEiD…",
"coverImageUrl": "https://media.licdn.com/dms/image/v2/D563DAQGruQL8kvBvnw/image-scale_191_1128/B56ZanR4DSGoAs-/0/1746563203576/shopify_cover?e=2147483647&v=beta&t=rHubhVZZZSU_1V…",
"website": "https://www.shopify.com",
"industry": "Software Development",
"type": "Public Company",
"companySize": "10,001+ employees",
"employeeCount": 30135,
"headquarters": "Ottawa, ON",
"founded": 2006,
"specialties": [
"ecommerce"
],
"followerCount": 1113098,
"location": {
"locality": "Ottawa",
"region": "ON",
"country": "CA"
},
"posts": [
{
"id": "7511424930966654977",
"url": "https://www.linkedin.com/posts/shopify_theres-a-new-way-to-design-stores-on-shopify-activity-7511424930966654977-83Aa",
"text": "There’s a new way to design stores on Shopify. Introducing Canvas.\n\nDescribe your vision and Sidekick writes the code. No technical skills needed.\n\nSee your who…",
"headline": null,
"publishedAt": "2026-10-01T14:00:59.068Z",
"likeCount": 699
}
],
"employees": [
{
"name": "Joseph Smarr",
"url": "https://www.linkedin.com/in/jsmarr",
"imageUrl": "https://media.licdn.com/dms/image/v2/C5603AQG6JPHHDSVF_g/profile-displayphoto-shrink_100_100/profile-displayphoto-shrink_100_100/0/1600306045236?e=2147483647&v=…"
}
],
"similarCompanies": [
{
"name": "Stripe",
"url": "https://www.linkedin.com/company/stripe",
"industry": "Technology, Information and Internet",
"location": "South San Francisco, California",
"imageUrl": "https://media.licdn.com/dms/image/v2/D560BAQE2ZfJyfn-VCg/company-logo_100_100/B56ZlyKwpUKIAQ-/0/1758557047806/stripe_logo?e=2147483647&v=beta&t=fRMcaMGPJNFUMq_l…"
}
]
},
"fetchedAt": "2026-10-05T14:46:35.638Z"
},
"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.
```
# Company posts
Source: https://docs.scraperize.com/api-reference/linkedin/company-posts
/api-reference/openapi.json get /v1/linkedin/company/posts
Fetches a public LinkedIn company page and returns its recent posts as clean JSON (post id, url, text, headline, published date, and like count). Only the posts LinkedIn shows publicly are available — the public feed is not paginable.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkedin/company/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkedin/company/posts
Description: Fetches a public LinkedIn company page and returns its recent posts as clean JSON (post id, url, text, headline, published date, and like count). Only the posts LinkedIn shows publicly are available — the public feed is not paginable.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The URL of the LinkedIn company page, e.g. `https://www.linkedin.com/company/shopify`.
- 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": {
"company": {
"url": "https://www.linkedin.com/company/shopify",
"handle": "shopify",
"name": "Shopify"
},
"posts": [
{
"id": "7511424930966654977",
"url": "https://www.linkedin.com/posts/shopify_theres-a-new-way-to-design-stores-on-shopify-activity-7511424930966654977-83Aa",
"text": "There’s a new way to design stores on Shopify. Introducing Canvas.\n\nDescribe your vision and Sidekick writes the code. No technical skills needed.\n\nSee your who…",
"headline": null,
"publishedAt": "2026-10-01T14:00:59.068Z",
"likeCount": 699
}
],
"count": 6,
"fetchedAt": "2026-10-05T14:46:37.437Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/linkedin/post
/api-reference/openapi.json get /v1/linkedin/post
Fetches a public LinkedIn post or Pulse article and returns it as clean JSON. Works for both content types: a feed **post** (`linkedin.com/posts/`) or a long-form **article** (`linkedin.com/pulse/`) — the response `type` tells you which. Posts include any photos as an `images` array, and a rich attachment under `media` — either a video (stream url, thumbnail, duration, dimensions, embed url) or a document/slide deck (source url, title, page count, and the guest-visible slide images). Returns the id, canonical url, title, excerpt, full body, cover image, author (name, url, image, follower count), published/modified dates, reading time (articles), like and comment counts, the publicly rendered comments (each with the commenter's name and profile url), and — for an article — the related "Others also viewed" articles. Only public data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkedin/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkedin/post
Description: Fetches a public LinkedIn post or Pulse article and returns it as clean JSON. Works for both content types: a feed **post** (`linkedin.com/posts/`) or a long-form **article** (`linkedin.com/pulse/`) — the response `type` tells you which. Posts include any photos as an `images` array, and a rich attachment under `media` — either a video (stream url, thumbnail, duration, dimensions, embed url) or a document/slide deck (source url, title, page count, and the guest-visible slide images). Returns the id, canonical url, title, excerpt, full body, cover image, author (name, url, image, follower count), published/modified dates, reading time (articles), like and comment counts, the publicly rendered comments (each with the commenter's name and profile url), and — for an article — the related "Others also viewed" articles. Only public data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The URL of the LinkedIn post (`https://www.linkedin.com/posts/`) or article (`https://www.linkedin.com/pulse/`).
- 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": {
"content": {
"type": "post",
"id": "7483148510742343680",
"url": "https://www.linkedin.com/posts/shopify_the-preparedness-paradox-wait-for-ready-activity-7483148510742343680-cNqc",
"title": "The preparedness paradox: Wait for “ready,” and it might never come",
"excerpt": "57% of U.S.",
"body": "57% of U.S. founders who waited before launching a business wish they’d started sooner.\n\nWe surveyed aspiring entrepreneurs and business owners across five coun…",
"coverImageUrl": "https://media.licdn.com/dms/image/sync/v2/D5627AQFnTFkSXuQaVg/articleshare-shrink_800/B56Z9cGnSeGgAY-/0/1783956666107?e=2147483647&v=beta&t=2PgncJMqtEz69n4nfnAu…",
"author": {
"name": "Shopify",
"url": "https://ca.linkedin.com/company/shopify",
"imageUrl": "https://media.licdn.com/dms/image/v2/D560BAQG_KjTcNcrLVw/company-logo_100_100/B56ZZolTV.HUAc-/0/1745511331439/shopify_logo?e=2147483647&v=beta&t=nXMs-vUElNvDVFN…",
"type": "organization",
"followerCount": 1113098
},
"publishedAt": "2026-07-15T13:20:35.118Z",
"modifiedAt": null,
"readingTime": null,
"isAccessibleForFree": null,
"likeCount": 114,
"commentCount": 38,
"comments": [
{
"author": {
"name": "Biren Poriya",
"url": "https://au.linkedin.com/in/biren-poriya",
"imageUrl": null
},
"text": "The barrier is shifting from capital to conviction.\nExecution is becoming the scarcest differentiator.",
"publishedAt": "2026-07-16T04:09:31.257Z",
"postedAgo": null,
"likeCount": 8
}
],
"moreArticles": [],
"images": [],
"media": null
},
"fetchedAt": "2026-10-05T14:46:38.955Z"
},
"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.
```
# Post transcript
Source: https://docs.scraperize.com/api-reference/linkedin/post-transcript
/api-reference/openapi.json get /v1/linkedin/post/transcript
Fetches a public LinkedIn post and returns the transcript of its video, when LinkedIn exposes one. Most useful for video posts: the transcript is returned as plain text. If the post has no video, or the video has no transcript, `transcript` is `null`. Only the post URL and transcript are returned — all other post fields are on `GET /v1/linkedin/post`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkedin/post/transcript. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkedin/post/transcript
Description: Fetches a public LinkedIn post and returns the transcript of its video, when LinkedIn exposes one. Most useful for video posts: the transcript is returned as plain text. If the post has no video, or the video has no transcript, `transcript` is `null`. Only the post URL and transcript are returned — all other post fields are on `GET /v1/linkedin/post`.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The URL of the LinkedIn post, e.g. `https://www.linkedin.com/posts/`.
- 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": {
"post": {
"url": "https://www.linkedin.com/posts/artificial-analysis_gemini-35-flash-is-a-step-forward-for-google-activity-7465082408409870337-4Pm-"
},
"transcript": "Hey, my name is Declan Jackson. I am a member of technical staff here at Artificial Analysis and I'm going to do a quick chat through the recent release of Gemi…",
"fetchedAt": "2026-10-05T14:46:40.727Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/linkedin/profile
/api-reference/openapi.json get /v1/linkedin/profile
Fetches a person's public LinkedIn profile and returns identity, about, experience, education, certifications, honors, publications, volunteering, websites, languages, recent posts and articles, recommendations, and similar profiles. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkedin/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkedin/profile
Description: Fetches a person's public LinkedIn profile and returns identity, about, experience, education, certifications, honors, publications, volunteering, websites, languages, recent posts and articles, recommendations, and similar profiles. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The URL of the LinkedIn profile to fetch, e.g. `https://www.linkedin.com/in/williamhgates`.
- 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": {
"profile": {
"url": "https://www.linkedin.com/in/williamhgates",
"handle": "williamhgates",
"name": "Bill Gates",
"firstName": "Bill",
"lastName": "Gates",
"headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.",
"location": {
"locality": "Seattle, Washington, United States",
"country": "US"
},
"profilePhotoUrl": "https://media.licdn.com/dms/image/v2/D5603AQF-RYZP55jmXA/profile-displayphoto-shrink_200_200/B56ZRi8g.aGsAY-/0/1736826818802?e=2147483647&v=beta&t=bKWfN6UwwtiCq…",
"followerCount": 40705673,
"connections": null,
"languages": [],
"awards": [],
"experience": [
{
"company": "Gates Foundation",
"companyUrl": "https://www.linkedin.com/company/gates-foundation",
"location": null,
"title": "Co-chair",
"description": null
}
],
"education": [
{
"school": "Harvard University",
"schoolUrl": "https://www.linkedin.com/school/harvard-university/",
"description": null,
"startYear": 1973,
"endYear": 1975
}
],
"certifications": [],
"honors": [],
"publications": [],
"volunteering": [],
"websites": [],
"posts": [
{
"url": "https://www.linkedin.com/posts/williamhgates_results-report-2026-activity-7511544945862926336-2Ger",
"text": "The Global Fund has helped save 72 million lives since 2002. What an achievement. It’s exceedingly rare for an organization to work this well, this consistently…",
"publishedAt": "2026-10-01T21:57:52.849Z",
"likeCount": 1269
}
],
"articles": [
{
"url": "https://www.linkedin.com/pulse/ai-equity-choice-we-cant-delay-bill-gates-d1gte",
"headline": "AI, equity, and the choice we can’t delay",
"publishedAt": "2026-09-17T15:18:20.000+00:00",
"imageUrl": "https://media.licdn.com/dms/image/v2/D4E12AQFwjr3EOC2slQ/article-cover_image-shrink_720_1280/B4EaCvyLnRKAAQ-/0/1789655564567?e=2147483647&v=beta&t=LlizryNgZ1ezX…",
"likeCount": 2885
}
],
"recommendations": [],
"similarProfiles": [
{
"name": "Melinda French Gates",
"url": "https://www.linkedin.com/in/melindagates",
"headline": "Pivotal",
"followers": "7M followers",
"location": "United States"
}
]
},
"fetchedAt": "2026-10-05T14:46:33.223Z"
},
"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.
```
# Linkme profile
Source: https://docs.scraperize.com/api-reference/linkme/linkme-profile
/api-reference/openapi.json get /v1/linkme/profile
Fetches a public Linkme (link.me) profile by URL. Returns the identity (username, display name, bio, avatar, verified status), counts (profile views, followers, total links), the social-icon links, the featured link cards (with images, colors, and type), contact info, and the photo gallery.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linkme/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linkme/profile
Description: Fetches a public Linkme (link.me) profile by URL. Returns the identity (username, display name, bio, avatar, verified status), counts (profile views, followers, total links), the social-icon links, the featured link cards (with images, colors, and type), contact info, and the photo gallery.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Linkme profile URL, e.g. https://link.me/danucd.
- 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": {
"profile": {
"id": "1bf3efbf94cc4f55d3650ddc61094ac3",
"userId": "1169288",
"username": "danucd",
"displayName": "Dana",
"firstName": "Dana",
"lastName": null,
"bio": "ALL MY LINKS👇",
"url": "https://link.me/danucd",
"verified": false,
"verifiedColor": "blue",
"isAmbassador": true,
"isPrivate": false,
"isAdult": false,
"avatarUrl": "https://media.link.me/_resize/image/quality=90,format=webp/images/webp-images/user-profile/1169288/tmp-2541-1763300314455.webp",
"avatarUrlPng": "https://media.link.me/_resize/image/quality=90,format=webp/images/user-profile/1169288/tmp-2541-1763300314455.png",
"isDefaultProfilePicture": false,
"coverUrl": null,
"logoUrl": null,
"videoProfileUrl": null,
"videoProfileThumbnailUrl": null,
"views": "62.7k",
"followers": null,
"totalLinks": 7,
"theme": "dark",
"customTheme": {
"backgroundColor": null,
"backgroundImageUrl": null,
"bioBackground": null,
"mainTextColor": null,
"level1TextColor": null,
"level2TextColor": null,
"customFont": null,
"customFontUrl": null
},
"tipsEnabled": false,
"shopEnabled": false,
"qrCode": "qrCode/v2/danucd",
"referralLink": "https://meglobalapp.page.link/TFZgPYaJGeqm3mXt5",
"deeplink": "https://meglobalapp.page.link/14GsZs1EQ2KMqxjH7",
"createdAt": "2024-11-01T12:37:51.000Z",
"updatedAt": "2025-11-16T13:43:17.000Z",
"socialLinks": [
{
"platform": "Apple-music",
"url": "https://music.apple.com/ng/artist/danucd/1562315189",
"handle": "1562315189",
"iconUrl": "https://media.link.me/_resize/image/quality=90,format=webp/images/style/icons/v5.0/Apple-Music-1.png",
"isAdult": false
}
],
"featuredLinks": [
{
"id": 231267,
"title": "Twitch",
"description": null,
"url": "https://twitch.tv/danucd",
"platform": "twitch",
"imageUrl": null,
"iconUrl": "https://media.link.me/_resize/image/quality=90,format=webp/images/external-links/1169288/icon_1763239167644.png",
"thumbnail": "small",
"color": {
"c": "#61187bff"
},
"order": 0,
"isAdult": false,
"kind": "link"
}
],
"contactInfo": [
{
"type": "Email",
"value": "dana.danucd@gmail.com"
}
],
"gallery": [
{
"id": 673778,
"url": "https://media.link.me/_resize/image/quality=90,format=webp/images/webp-images/userImage/1169288/tmp-397-1730484089200.webp",
"order": 2,
"createdAt": "2024-11-01T18:01:30.000Z"
}
],
"sections": [
{
"section": "total_followers",
"order": 1,
"enabled": true
}
],
"sameAs": [
"https://music.apple.com/ng/artist/danucd/1562315189"
],
"metadata": {
"title": "Check out Dana (@danucd) on Linkme",
"description": "Discover Dana on LinkMe: ALL MY LINKS👇: Connect and see what they're passionate about.",
"image": "https://media.link.me/_resize/image/quality=90,format=webp/images/webp-images/user-profile/1169288/tmp-2541-1763300314455.webp",
"keywords": "Dana , Dana Linkme, Dana on Linkme, Dana Linkme Profile, Dana Linkme Profile Link",
"canonical": "https://link.me/danucd"
}
},
"fetchedAt": "2026-10-05T14:43:30.060Z"
},
"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.
```
# Linktree page
Source: https://docs.scraperize.com/api-reference/linktree/linktree-page
/api-reference/openapi.json get /v1/linktree/page
Fetches a public Linktree page by URL: the profile (name, avatar, verification, theme, social links) and the page links — each with its title, url, thumbnail, preview metadata, nested children, and gating — plus any storefront items.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/linktree/page. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/linktree/page
Description: Fetches a public Linktree page by URL: the profile (name, avatar, verification, theme, social links) and the page links — each with its title, url, thumbnail, preview metadata, nested children, and gating — plus any storefront items.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Linktree page URL, e.g. https://linktr.ee/pharrell.
- 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": {
"page": {
"username": "pharrell",
"accountId": 3025568,
"uuid": "b18d6498-3f5d-11eb-85b8-0a26086d88df",
"title": "@pharrell",
"name": "Pharrell Williams",
"description": null,
"isVerified": true,
"isActive": true,
"avatarUrl": "https://ugc.production.linktr.ee/54f5ea79-e633-456d-b88d-f75656c977dc_Screenshot-2025-05-06-at-7.42.05-AM.png",
"avatarType": "IMAGE",
"avatarShape": "CIRCLE_SMALL",
"bannerImageUrl": null,
"bannerType": "IMAGE",
"createdAt": "2019-08-23T09:48:16.000Z",
"updatedAt": "2026-09-29T19:26:38.000Z",
"socialLinksPosition": "TOP",
"metaTitle": "Pharrell Williams | Linktree",
"metaDescription": "Follow my Linktree for the latest.",
"theme": {
"key": "custom",
"luminance": "LIGHT",
"backgroundColor": "#ffffff",
"backgroundStyle": "FLAT",
"backgroundType": "COLOR",
"buttonType": "HARDSHADOW_CIRCULAR",
"buttonColor": "#ffffff",
"buttonTextColor": "#000000",
"buttonCornerType": "ROUNDED_FULL",
"buttonShadowColor": "#000000",
"socialColor": "#000000",
"fontFamily": "dm sans",
"fontColor": "#000000"
},
"socialLinks": [
{
"type": "FACEBOOK",
"url": "https://facebook.com/pharrell",
"position": 0
}
],
"links": [
{
"id": "13210175",
"type": "CLASSIC",
"title": "PHARRELLWILLIAMS.COM",
"url": "https://pharrellwilliams.com/",
"thumbnailUrl": null,
"position": 0,
"locked": false,
"gateTypes": null,
"layout": "stack",
"amazonAffiliate": false,
"meta": {
"title": "Pharrell Williams",
"description": "Dress Up Pharrell",
"image": "https://pharrellwilliams.com/opengraph-image.png?opengraph-image.1kc5_rpella_-.png"
},
"children": null
}
],
"pinnedLinks": [],
"storefront": {
"hasCommissionProducts": false,
"itemCount": 0,
"postCount": 0,
"items": [],
"posts": []
},
"linkCount": 10,
"totalLinkCount": 10,
"socialCount": 7
},
"fetchedAt": "2026-10-05T14:43:55.872Z"
},
"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.
```
# Pillar page
Source: https://docs.scraperize.com/api-reference/pillar/pillar-page
/api-reference/openapi.json get /v1/pillar/page
Fetches a public Pillar.io creator page by URL: the profile (name, display name, avatar, socials, theme) and the page content blocks (custom links, featured products with prices, videos, collections, …) — each with its title, url, image, and click count.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/pillar/page. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/pillar/page
Description: Fetches a public Pillar.io creator page by URL: the profile (name, display name, avatar, socials, theme) and the page content blocks (custom links, featured products with prices, videos, collections, …) — each with its title, url, image, and click count.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public Pillar.io profile URL, e.g. https://pillar.io/mdmotivator.
- 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": {
"page": {
"username": "mdmotivator",
"name": "Zachery Dereniowski",
"displayName": "Kindness is cool ❤️",
"tagline": null,
"location": null,
"avatarUrl": "https://res.cloudinary.com/pillario/image/upload/f_auto,q_auto/user-image/page/331d7f84-fbf1-46bc-9059-25b67f448578_43e61fa0-b3b6-11f0-a45c-05c8b1b25c46",
"bannerImageUrl": null,
"influencerId": "de9db532-6e21-48ae-b211-025d8ab6c9cc",
"userId": "331d7f84-fbf1-46bc-9059-25b67f448578",
"createdAt": "2022-08-03T21:17:11.519316+00:00",
"theme": {
"name": "customization-a",
"isDark": true,
"textColor": "#fff",
"backgroundColor": "#211D1B",
"backgroundImageUrl": null,
"itemStyle": "rounded-full",
"itemsFont": "'Ubuntu', sans-serif"
},
"socialLinks": [
{
"platform": "EMAIL",
"url": "mailto:zachery@onefluent.com"
}
],
"items": [
{
"id": "f234e305-7da7-4b60-99c6-276f947836bd",
"type": "BLOCK_COLLECTION",
"title": "Group Title",
"subtitle": null,
"url": null,
"imageUrl": null,
"cta": null,
"clicks": 0,
"order": 0,
"price": null,
"currency": null,
"brandName": null,
"text": null,
"blocks": [
{
"id": "2a2adc7d-c716-47c2-a2a4-fba2416fe172",
"type": "CUSTOM_LINK",
"title": "Let’s Save Michelle’s Life ❤️",
"subtitle": null,
"url": "https://slingshot.giving/Michelle",
"imageUrl": "https://res.cloudinary.com/pillario/image/upload/f_auto,q_auto/page-block-image/custom-link/2a2adc7d-c716-47c2-a2a4-fba2416fe172_845b176c-28e7-44c6-b590-f4314e2…",
"cta": "Donate Here",
"clicks": 0,
"order": 0,
"price": null,
"currency": null,
"brandName": null,
"text": null,
"blocks": null
}
]
}
],
"itemCount": 56,
"totalItems": 130
},
"fetchedAt": "2026-10-05T14:43:51.467Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/snapchat/profile
/api-reference/openapi.json get /v1/snapchat/profile
Fetches a public Snapchat profile by username (handle): identity (display name, bio, avatar, snapcode, verification badge, subscriber count, category, timestamps), the current story, curated + spotlight highlights (with snaps), and the profile lenses.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/snapchat/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/snapchat/profile
Description: Fetches a public Snapchat profile by username (handle): identity (display name, bio, avatar, snapcode, verification badge, subscriber count, category, timestamps), the current story, curated + spotlight highlights (with snaps), and the profile lenses.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Snapchat username (with or without a leading @), e.g. teamsnapchat.
- 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": {
"profile": {
"profileType": "publicProfileInfo",
"username": "heycalacademy",
"displayName": "California Academy of Sciences",
"bio": "An aquarium, planetarium, rainforest, natural history museum, & research institution—all under one living roof. 🌈",
"address": "San Francisco, CA, USA",
"websiteUrl": null,
"profilePictureUrl": "https://cf-st.sc-cdn.net/aps/bolt/aHR0cHM6Ly9jZi1zdC5zYy1jZG4ubmV0L2QvQ1BTdGxxbmZkdFZMS01xcEhFWENBP2JvPUVnMGFBQm9BTWdFRVNBSlFHV0FCJnVjPTI1._RS0,90_FMjpeg",
"snapcodeImageUrl": "https://app.snapchat.com/web/deeplink/snapcode?username=heycalacademy&type=SVG&bitmoji=enable",
"squareHeroImageUrl": null,
"subscriberCount": 0,
"badge": 0,
"isOfficial": false,
"category": null,
"subcategory": null,
"publisherType": null,
"primaryColor": null,
"hasStory": false,
"hasCuratedHighlights": true,
"hasSpotlightHighlights": false,
"createdAt": "2021-10-19T23:35:42.458Z",
"updatedAt": "2026-05-08T00:42:39.000Z",
"businessProfileId": "fd3eba83-bb8c-4126-8040-0c09e7535a2a",
"hostUserId": "544713de-2838-41d5-97d7-b3b82744926f",
"bitmoji3dUrl": null,
"canonicalUrl": "https://www.snapchat.com/@heycalacademy",
"previewImageUrl": "https://www.snapchat.com/web-capture/www.snapchat.com/@heycalacademy/preview/square.jpeg?xp_id=1",
"relatedAccounts": [],
"sameAsLinks": [],
"story": null,
"lenses": [
{
"id": "838c73413c2d4892b38c14cb9319059a",
"name": "Moray Eel",
"creatorDisplayName": "California Academy of Sciences",
"creatorUsername": null,
"previewImageUrl": "https://lens-preview-storage.storage.googleapis.com/previewmedia/preview_thumbnail/33bb420f-5161-4f37-a2f8-c7b67b44b7ab.webp",
"previewVideoUrl": null,
"iconUrl": "https://bolt-gcdn.sc-cdn.net/3/CrwAPWKfthKhklmyg1YTN?bo=EhgaABoAMgF9OgEEQgYIkabE8AVIAlASYAE%3D&uc=18",
"unlockUrl": "https://www.snapchat.com/unlock/?type=SNAPCODE&uuid=838c73413c2d4892b38c14cb9319059a&metadata=01",
"scannableImageUrl": null,
"isOfficial": false,
"updatedAt": "2026-05-08T00:39:26.000Z"
}
],
"curatedHighlights": [
{
"id": "2a0dc52c-99ce-443b-be0d-f6d2ccb41dd4",
"storyId": null,
"title": null,
"subtitle": null,
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/fS9yXoP12P2XITGaycT4g.410.IRZXSOY?mo=GjQaDRoAGgAyAQRIBFBeYAFaEERmTGFyZ2VUaHVtYm5haWyiARAImgMiCxIAKgdJUlpYU09Z&uc=94",
"emoji": null,
"canonicalUrlSuffix": null,
"snapCount": 1,
"snaps": [
{
"index": 0,
"mediaType": 1,
"mediaUrl": "https://cf-st.sc-cdn.net/d/fS9yXoP12P2XITGaycT4g.1034.IRZXSOY?mo=GkoaDRoAGgAyAQRIBlBeYAFaB0RmTWVkaWGiAS8IiggSHQobIAFKFwoSpAE6PS5DKjY3Ly08JzwpJyZNEPQDIgsSACoHSVJ…",
"previewUrl": "https://cf-st.sc-cdn.net/d/fS9yXoP12P2XITGaycT4g.410.IRZXSOY?mo=GjQaDRoAGgAyAQRIBFBeYAFaEERmTGFyZ2VUaHVtYm5haWyiARAImgMiCxIAKgdJUlpYU09Z&uc=94",
"overlayUrl": null,
"timestamp": "2022-03-02T17:06:25.000Z",
"title": null,
"lat": null,
"lng": null
}
]
}
],
"spotlightHighlights": [],
"counts": {
"lenses": 5,
"curatedHighlights": 3,
"spotlightHighlights": 0
}
},
"fetchedAt": "2026-10-05T14:44:03.503Z"
},
"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.
```
# Spotlight comments
Source: https://docs.scraperize.com/api-reference/snapchat/spotlight-comments
/api-reference/openapi.json get /v1/snapchat/spotlight/comments
Fetches the comments on a public Snapchat Spotlight video by URL — each with its text, author (display name + avatar), reaction count, threaded-reply count, and timestamp. Paginated via an opaque `cursor`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/snapchat/spotlight/comments. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/snapchat/spotlight/comments
Description: Fetches the comments on a public Snapchat Spotlight video by URL — each with its text, author (display name + avatar), reaction count, threaded-reply count, and timestamp. Paginated via an opaque `cursor`.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Snapchat Spotlight URL, e.g. https://www.snapchat.com/spotlight/.
- cursor (string): Pagination cursor from a previous response's `paging.cursor`.
- 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": {
"comments": [
{
"id": "13376388470259466268_11779197914746971007",
"text": "I really enjoy your posts and always look forward to them. 😊 I’ve tried to send you a friend request a few times, but it hasn’t worked. If you have a moment, I…",
"authorDisplayName": "John",
"authorAvatarUrl": null,
"likeCount": 384,
"replyCount": 79,
"timestamp": "2026-08-17T05:53:34.719Z",
"updatedAt": "2026-08-17T05:53:34.719Z",
"rankingScore": 1000
}
],
"count": 25,
"paging": {
"cursor": "CAESVNf5p5sHtvCVugPXp_qDBsiLwT6owqSFBbH76sQOrvPzwgjFpMS8C7Pn9IAMvo_G5ASWv-ekBu-kguQLmfWxpg_ssOn7D7ChmIAB3pfpogmN0tmSBRqDAhKAAkNyMEJDZzBLQW5SekVnY0k0YTJMbG93MEVx…",
"hasMore": true
},
"fetchedAt": "2026-10-05T14:44:05.003Z"
},
"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.
```
# Spotlight video
Source: https://docs.scraperize.com/api-reference/snapchat/spotlight-video
/api-reference/openapi.json get /v1/snapchat/spotlight
Fetches a public Snapchat Spotlight video by URL: the video (title, description, MP4 URL, thumbnail, engagement counts, duration, dimensions), the creator/user, the audio/music + lens attribution, the transcript, and the AI-generated SEO metadata.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/snapchat/spotlight. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/snapchat/spotlight
Description: Fetches a public Snapchat Spotlight video by URL: the video (title, description, MP4 URL, thumbnail, engagement counts, duration, dimensions), the creator/user, the audio/music + lens attribution, the transcript, and the AI-generated SEO metadata.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Snapchat Spotlight URL, e.g. https://www.snapchat.com/spotlight/ (the https://www.snapchat.com/@/spotlight/ form is also accepted).
- 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": {
"spotlight": {
"id": "W7_EDlXWTBiXAEEniNoMPwAAYcWJ1dGZxYm1kAZ-6WEWcAZ-6WA2bAAAAAw",
"url": "https://www.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYcWJ1dGZxYm1kAZ-6WEWcAZ-6WA2bAAAAAw",
"title": "Spotlight Snap",
"description": "Another Spotlight Snap brought to you by Snapchat",
"embeddedTextCaption": null,
"videoUrl": "https://cf-st.sc-cdn.net/d/cMqz9zr0wKrGpVbV6C1WK.27.IRZXSOY?mo=Gl0aCTIBBEgCUC5gAVCiAVoQU3BvdGxpZ2h0U2hhcmluZ6IBNggbEiUKIwjK82UgATCcBDjAB0ABSg4KCXc1QUU3NEg_QRD0A…",
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/cMqz9zr0wKrGpVbV6C1WK.256.IRZXSOY?mo=GkYaCTIBBEgCUC5gAVCgAVoQRGZMYXJnZVRodW1ibmFpbKIBEAiAAiILEgAqB0lSWlhTT1miARAImgoiCxIAKgdJUlpYU09Z…",
"viewCount": 139745,
"shareCount": 180,
"boostCount": 12680,
"recommendCount": 483,
"durationMs": 12670,
"width": 540,
"height": 960,
"uploadedAt": "2026-07-31T22:42:40.667Z",
"keywords": [],
"hashtags": [],
"language": "en",
"creator": {
"type": "personCreator",
"username": "angellynn21",
"name": "Angel vinup",
"url": "https://www.snapchat.com/@angellynn21",
"followerCount": 0,
"websiteUrl": null
},
"user": null,
"audio": {
"title": "Original Sound",
"subtitle": "angellynn21",
"id": "93783123568",
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/6YKRUxipwtyh6YMgtaJbK?bo=Eg0aABoAMgEESAJQCGAB&uc=8"
},
"lenses": [],
"contextCards": [
{
"type": 2,
"title": "Original Sound",
"subtitle": "angellynn21",
"url": null,
"thumbnailUrl": "https://cf-st.sc-cdn.net/d/6YKRUxipwtyh6YMgtaJbK?bo=Eg0aABoAMgEESAJQCGAB&uc=8",
"id": "93783123568"
}
],
"transcript": null,
"llm": {
"title": "Father and Son Enjoying a Boat Ride Together",
"description": "A shirtless man with a tattoo on his back sits on a boat, holding the steering wheel while a young boy sits beside him, wearing a life jacket. They are on a lak…",
"keywords": [
"boat safety tips"
]
},
"previewImageUrl": "https://story.snapchat.com/spotlight/W7_EDlXWTBiXAEEniNoMPwAAYcWJ1dGZxYm1kAZ-6WEWcAZ-6WA2bAAAAAw/preview/square.jpeg",
"isAttributed": true,
"restricted": false
},
"fetchedAt": "2026-09-14T12:14:55.187Z"
},
"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.
```
# Channel
Source: https://docs.scraperize.com/api-reference/telegram/channel
/api-reference/openapi.json get /v1/telegram/channel
Fetches a public Telegram channel by handle or t.me URL: title, @username, verified/scam/fake status, description, avatar, the counters (subscribers, photos, videos, links), and the most recent post time.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/telegram/channel. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/telegram/channel
Description: Fetches a public Telegram channel by handle or t.me URL: title, @username, verified/scam/fake status, description, avatar, the counters (subscribers, photos, videos, links), and the most recent post time.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: A public Telegram handle or t.me channel URL, e.g. telegram, @telegram, https://t.me/telegram, or https://t.me/s/telegram.
- 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": {
"channel": {
"handle": "telegram",
"title": "Telegram News",
"description": "The official Telegram on Telegram. Much recursion. Very Telegram. Wow.",
"avatarUrl": "https://cdn1.telesco.pe/file/uFYNMdturrfQWQKIUN-OOFpGgW51ifC6zoFl5fDK03QXavKQLPsC7MpCEGSN9A7AuEBYSfUUPMZxtGMUXp7Ma4OLu2pPsltHPRzVF2zmVUBiHjV0g7ri29W94kYF5Mrqd8Y…",
"verified": true,
"scam": false,
"fake": false,
"url": "https://t.me/telegram",
"previewUrl": "https://t.me/s/telegram",
"subscribers": 9393387,
"counters": [
{
"type": "subscribers",
"label": "9.39M",
"value": 9393387
}
],
"lastPostAt": "2026-08-26T19:12:34.000Z"
},
"fetchedAt": "2026-10-05T14:44:05.628Z"
},
"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.
```
# Channel posts
Source: https://docs.scraperize.com/api-reference/telegram/channel-posts
/api-reference/openapi.json get /v1/telegram/channel/posts
Fetches the recent public posts of a Telegram channel/group by handle — each with its text, date, view count, author, media (photos/videos with thumbnails + durations), link preview, and reactions. Paginated (older posts) via a numeric `cursor`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/telegram/channel/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/telegram/channel/posts
Description: Fetches the recent public posts of a Telegram channel/group by handle — each with its text, date, view count, author, media (photos/videos with thumbnails + durations), link preview, and reactions. Paginated (older posts) via a numeric `cursor`.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: A public Telegram handle or t.me URL, e.g. telegram or https://t.me/telegram.
- cursor (string): Numeric cursor from a previous response's `paging.cursor` (pages to older posts).
- 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": {
"posts": [
{
"id": 460,
"url": "https://t.me/telegram/460",
"handle": "telegram",
"channelId": -1005640892,
"date": "2026-08-26T19:12:34.000Z",
"text": "For all the info from today's update and a look back at 13 years of Telegram features — check out our blog:\nhttps://telegram.org/blog/welcome-messages-buttons-T…",
"views": 1670000,
"author": "Telegram News",
"authorUrl": "https://t.me/telegram",
"authorPhotoUrl": "https://cdn1.telesco.pe/file/uFYNMdturrfQWQKIUN-OOFpGgW51ifC6zoFl5fDK03QXavKQLPsC7MpCEGSN9A7AuEBYSfUUPMZxtGMUXp7Ma4OLu2pPsltHPRzVF2zmVUBiHjV0g7ri29W94kYF5Mrqd8Y…",
"verified": false,
"edited": false,
"forwardedFrom": null,
"replyToUrl": null,
"media": [],
"linkPreview": {
"url": "https://telegram.org/blog/welcome-messages-buttons-TG-13",
"siteName": "Telegram",
"title": "Welcome Messages, Buttons in Messages and Signed Gifts",
"description": "Introducing Welcome Messages to greet new members of groups or channels, Buttons in Messages to make any text interactive, Inline Documents in Messages and much…",
"imageUrl": "https://cdn4.telesco.pe/file/b01OYVU-nzH3fOkm1Atu-cXYGUC4IFztrQILNXi7XNqT3U06FUM6qsx8oxemaGkcZM7gO-R3grt2d5t8LgzYhIQGbBj5DFi7QnMXy9Tbiws9y-yLo_70_MqEyaMeo0wMWpR…"
},
"reactions": []
}
],
"count": 20,
"paging": {
"cursor": "441",
"hasMore": true
},
"fetchedAt": "2026-10-05T14:44:06.408Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/telegram/post
/api-reference/openapi.json get /v1/telegram/post
Fetches a single public Telegram post by its URL (`t.me//`) — with its text, date, view count, author (name, avatar, verified), media (photos/videos with thumbnails + durations), link preview, and reactions (standard / custom / paid).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/telegram/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/telegram/post
Description: Fetches a single public Telegram post by its URL (`t.me//`) — with its text, date, view count, author (name, avatar, verified), media (photos/videos with thumbnails + durations), link preview, and reactions (standard / custom / paid).
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The post URL `t.me//` — e.g. https://t.me/durov/537 (also accepts t.me/s/… , a bare durov/537, or a tg://resolve deeplink).
- 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": {
"post": {
"id": 537,
"url": "https://t.me/durov/537",
"handle": "durov",
"channelId": -1006503122,
"date": "2026-08-03T07:19:56.000Z",
"text": "🧠 The 2026 International Olympiad in Artificial Intelligence starts today. \n\nAs a token of support for those who will reinvent our civilization, we'll issue 🏆…",
"views": 3630000,
"author": "Pavel Durov",
"authorUrl": "https://t.me/durov",
"authorPhotoUrl": "https://cdn4.telesco.pe/file/XXLAYttYwubjgwyMpWMwpiDZFqOwlvfLxOZFdzcfFidOMKnZaQm_eh-hTs-tze4NkmDokT7prLQqdi7A4xV1NaE5uonlzM8ptSP_d2p_-_lWyTSmXiOC9mEvnrkwMgRXsBE…",
"verified": true,
"edited": false,
"forwardedFrom": null,
"replyToUrl": null,
"media": [
{
"type": "photo",
"url": "https://cdn4.telesco.pe/file/GnvufVCueRLgbZ0bYxTio1CifW4VhStENGQZr7ln737GxTkWzqg7Is8-a-szcC-w3hFb4bQDKFQGKIJB8ITSuHZZF6VJukwnEBImtZn01bsc141bj796JOsagTtRhw4qtx8…",
"thumbnailUrl": null,
"duration": null
}
],
"linkPreview": null,
"reactions": [
{
"emoji": null,
"customEmojiId": null,
"paid": true,
"count": 15500,
"countText": "15.5K"
}
]
},
"fetchedAt": "2026-10-05T14:44:06.786Z"
},
"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.
```
# Keyword search
Source: https://docs.scraperize.com/api-reference/threads/keyword-search
/api-reference/openapi.json get /v1/threads/search
Searches Threads posts by keyword, like Threads search's top results: up to 20 posts in one response, optionally limited to a date range with `startdate` and `enddate`. Each post has its id, link, text, date, author, like, reply, repost, quote and share counts, images, videos and carousels (with alt text), mentions and links, its topic, link preview, text attachment, GIFs and stickers, music, podcast or episode, an embedded Instagram post, the quoted post, and pinned, spoiler and AI-label flags. A matching reply also comes with the posts it replies to (`parentPosts`). No match returns an empty list. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/threads/search. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/threads/search
Description: Searches Threads posts by keyword, like Threads search's top results: up to 20 posts in one response, optionally limited to a date range with `startdate` and `enddate`. Each post has its id, link, text, date, author, like, reply, repost, quote and share counts, images, videos and carousels (with alt text), mentions and links, its topic, link preview, text attachment, GIFs and stickers, music, podcast or episode, an embedded Instagram post, the quoted post, and pinned, spoiler and AI-label flags. A matching reply also comes with the posts it replies to (`parentPosts`). No match returns an empty list. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The keyword(s) to search for, e.g. `coffee`.
- startdate (string): Only posts from this day on, as `YYYY-MM-DD` (UTC), e.g. `2024-07-01`.
- enddate (string): Only posts up to the end of this day, as `YYYY-MM-DD` (UTC). Must not be before `startdate`.
- 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": {
"query": "coffee",
"startDate": null,
"endDate": null,
"posts": [
{
"id": "4011488263802609679",
"code": "Derq1J4mmAP",
"url": "https://www.threads.com/@robertgcoulter/post/Derq1J4mmAP",
"text": "A long coffee read - \nThe United States is now threatening Europe with devastating economic retaliation over Elon Musk's Starlink. And the reason behind this la…",
"createdAt": "2026-10-19T16:18:07.000Z",
"isEdited": false,
"language": null,
"author": {
"id": "66420218195",
"handle": "robertgcoulter",
"url": "https://www.threads.com/@robertgcoulter",
"fullName": "Robert Coulter",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/773827420_17955109617210196_3137191367319950265_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"isVerified": false
},
"mediaType": "text",
"media": [],
"likeCount": 41,
"replyCount": 22,
"repostCount": 8,
"quoteCount": 1,
"shareCount": null,
"countsHidden": false,
"mentions": [],
"links": [],
"topic": null,
"linkPreview": null,
"textAttachment": null,
"gif": null,
"stickers": [],
"music": null,
"podcast": null,
"podcastEpisode": null,
"instagramPost": null,
"quotedPost": null,
"isQuotedPostUnavailable": false,
"isReply": false,
"replyToAuthor": null,
"rootPostAuthor": null,
"isPinned": false,
"isPinnedReply": false,
"isSpoiler": false,
"replyControl": "everyone",
"aiDetectionMethod": null,
"parentPosts": []
}
],
"count": 20,
"fetchedAt": "2026-10-19T16:35:18.974Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/threads/post
/api-reference/openapi.json get /v1/threads/post
Fetches a public Threads post by its URL and returns it as clean JSON with everything around it on the post page: the post (id, link, text, date, author, like, reply, repost, quote and share counts, images, videos and carousels, mentions and links, topic, link preview, text attachment, GIFs and stickers, music, podcast, embedded Instagram post, quoted post, reply context and flags), the posts above it when it is a reply, the replies its author added to continue it, the comments Threads shows first (sorted by Top, pinned replies first, each with the conversation under it), and the related posts Threads suggests. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/threads/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/threads/post
Description: Fetches a public Threads post by its URL and returns it as clean JSON with everything around it on the post page: the post (id, link, text, date, author, like, reply, repost, quote and share counts, images, videos and carousels, mentions and links, topic, link preview, text attachment, GIFs and stickers, music, podcast, embedded Instagram post, quoted post, reply context and flags), the posts above it when it is a reply, the replies its author added to continue it, the comments Threads shows first (sorted by Top, pinned replies first, each with the conversation under it), and the related posts Threads suggests. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The Threads post URL, e.g. `https://www.threads.com/@zuck/post/DeZtp-TkQHh` (`threads.net` and short `threads.com/t/` links also work).
- 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": {
"post": {
"id": "4006434140014576097",
"code": "DeZtp-TkQHh",
"url": "https://www.threads.com/@zuck/post/DeZtp-TkQHh",
"text": "Introducing Muse Wonder, our new family of frontier models with state of the art performance for personal and professional agentic work.",
"createdAt": "2026-10-12T16:56:29.000Z",
"isEdited": false,
"language": null,
"author": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck",
"fullName": "Mark Zuckerberg",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"isVerified": true
},
"mediaType": "image",
"media": [
{
"type": "image",
"url": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/844965867_17991705567103224_8296143909108287920_n.webp?_nc_cat=109&ig_cache_key=NDAwNjQzNDE0MDAxNDU3NjA5…",
"thumbnailUrl": null,
"width": 2160,
"height": 3260,
"altText": null,
"hasAudio": null
}
],
"likeCount": 2075,
"replyCount": 457,
"repostCount": 163,
"quoteCount": 59,
"shareCount": 142,
"countsHidden": false,
"mentions": [],
"links": [],
"topic": null,
"linkPreview": null,
"textAttachment": null,
"gif": null,
"stickers": [],
"music": null,
"podcast": null,
"podcastEpisode": null,
"instagramPost": null,
"quotedPost": null,
"isQuotedPostUnavailable": false,
"isReply": false,
"replyToAuthor": null,
"rootPostAuthor": null,
"isPinned": false,
"isPinnedReply": false,
"isSpoiler": false,
"replyControl": "everyone",
"aiDetectionMethod": null
},
"parentPosts": [],
"authorContinuations": [
{
"id": "4006434261020307755",
"code": "DeZtrvAEfEr",
"url": "https://www.threads.com/@zuck/post/DeZtrvAEfEr",
"text": "It's been just over a year since we started Meta Superintelligence Labs. Muse Spark was our first family of models, and now Muse Wonder is a much larger and mor…",
"createdAt": "2026-10-12T16:57:09.000Z",
"isEdited": false,
"language": null,
"author": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck",
"fullName": "Mark Zuckerberg",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"isVerified": true
},
"mediaType": "video",
"media": [
{
"type": "video",
"url": "https://scontent-los4-1.cdninstagram.com/o1/v/t16/f2/m84/AQNdJDHTIzzEwEm2PIjsadzjW1lwnHlvhFof0tf0jvzczIF8OYWYVm8Resjw7ztm_wUKjM1RRs5UCeXGQVVfsVYMFHfSYiO6pe7hf-o…",
"thumbnailUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.71878-15/843458448_2045298256099953_8644614754157170636_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=110&ig_cache_key=NDAwNj…",
"width": 1920,
"height": 1080,
"altText": null,
"hasAudio": true
}
],
"likeCount": 806,
"replyCount": 67,
"repostCount": 31,
"quoteCount": 9,
"shareCount": 30,
"countsHidden": false,
"mentions": [],
"links": [],
"topic": null,
"linkPreview": null,
"textAttachment": null,
"gif": null,
"stickers": [],
"music": null,
"podcast": null,
"podcastEpisode": null,
"instagramPost": null,
"quotedPost": null,
"isQuotedPostUnavailable": false,
"isReply": true,
"replyToAuthor": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck"
},
"rootPostAuthor": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck"
},
"isPinned": false,
"isPinnedReply": false,
"isSpoiler": false,
"replyControl": "everyone",
"aiDetectionMethod": null
}
],
"comments": [
{
"id": "4006435708155479455",
"code": "DeZuAywDEWf",
"url": "https://www.threads.com/@_randomdev001/post/DeZuAywDEWf",
"text": "Impressive stuff.\nDoes it beat OpenAIs Dots though?",
"createdAt": "2026-10-12T16:59:36.000Z",
"isEdited": false,
"language": null,
"author": {
"id": "63095976534",
"handle": "_randomdev001",
"url": "https://www.threads.com/@_randomdev001",
"fullName": "Peter",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/641717925_17951034903096535_856164541309490688_n.jpg?_nc_cat=108&ccb=7-5&_nc_sid=30ff31&efg=eyJ2ZW5jb2Rl…",
"isVerified": false
},
"mediaType": "text",
"media": [],
"likeCount": 0,
"replyCount": 0,
"repostCount": 0,
"quoteCount": 0,
"shareCount": null,
"countsHidden": false,
"mentions": [],
"links": [],
"topic": null,
"linkPreview": null,
"textAttachment": null,
"gif": null,
"stickers": [],
"music": null,
"podcast": null,
"podcastEpisode": null,
"instagramPost": null,
"quotedPost": null,
"isQuotedPostUnavailable": false,
"isReply": true,
"replyToAuthor": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck"
},
"rootPostAuthor": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck"
},
"isPinned": false,
"isPinnedReply": false,
"isSpoiler": false,
"replyControl": "everyone",
"aiDetectionMethod": null,
"replies": []
}
],
"commentsHasMore": true,
"hasUnavailableComments": false,
"relatedPosts": [
{
"id": "4009834125439343213",
"code": "DelyuRfDRpt",
"url": "https://www.threads.com/@mark718445/post/DelyuRfDRpt",
"text": "Introducing Muse Wonder, our new family of frontier models with state of the art performance for personal and professional agentic work.",
"createdAt": "2026-10-17T09:31:39.000Z",
"isEdited": false,
"language": null,
"author": {
"id": "75207591715",
"handle": "mark718445",
"url": "https://www.threads.com/@mark718445",
"fullName": "Mark zuck",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.2885-19/573323465_1219825463302212_7278921664109726296_n.png?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6InB…",
"isVerified": false
},
"mediaType": "image",
"media": [
{
"type": "image",
"url": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/851366836_17887809123511716_3818048308771651579_n.webp?_nc_cat=102&ig_cache_key=NDAwOTgzNDEyNTQzOTM0MzIx…",
"thumbnailUrl": null,
"width": 648,
"height": 978,
"altText": null,
"hasAudio": null
}
],
"likeCount": 1,
"replyCount": 0,
"repostCount": 0,
"quoteCount": 0,
"shareCount": null,
"countsHidden": false,
"mentions": [],
"links": [],
"topic": {
"id": "18366475570074240",
"name": "USA",
"iconUrl": null,
"url": "https://www.threads.com/search?q=usa&serp_type=tags&tag_id=18366475570074240"
},
"linkPreview": null,
"textAttachment": null,
"gif": null,
"stickers": [],
"music": null,
"podcast": null,
"podcastEpisode": null,
"instagramPost": null,
"quotedPost": null,
"isQuotedPostUnavailable": false,
"isReply": false,
"replyToAuthor": null,
"rootPostAuthor": null,
"isPinned": false,
"isPinnedReply": false,
"isSpoiler": false,
"replyControl": "everyone",
"aiDetectionMethod": null
}
],
"fetchedAt": "2026-10-19T09:39:19.287Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/threads/profile
/api-reference/openapi.json get /v1/threads/profile
Fetches a public Threads profile by username and returns it as clean JSON: user id, handle, full name, bio (with the accounts it mentions and any links in it), profile picture (standard and HD), verified and private flags, follower count, profile links (URL, title), interests (tag, label, link), the linked podcast or newsletter, whether the account shares to the fediverse, and the Instagram account behind it with its follower and following counts. Posts are not included. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/threads/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/threads/profile
Description: Fetches a public Threads profile by username and returns it as clean JSON: user id, handle, full name, bio (with the accounts it mentions and any links in it), profile picture (standard and HD), verified and private flags, follower count, profile links (URL, title), interests (tag, label, link), the linked podcast or newsletter, whether the account shares to the fediverse, and the Instagram account behind it with its follower and following counts. Posts are not included. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Threads username, e.g. `zuck` (an `@handle` or `threads.com/@...` URL also works).
- 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": {
"profile": {
"id": "63055343223",
"handle": "zuck",
"fullName": "Mark Zuckerberg",
"url": "https://www.threads.com/@zuck",
"biography": "Mostly superintelligence and MMA takes",
"bioMentions": [],
"bioUrls": [],
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"profilePicUrlHd": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s640x640_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"isVerified": true,
"isPrivate": false,
"followerCount": 5754774,
"links": [],
"interests": [
{
"id": "18399895213044171",
"name": "AI Threads",
"tag": "aithreads",
"isCommunity": false,
"iconUrl": "https://scontent.xx.fbcdn.net/v/t1.6435-9/722635384_18590137618044171_7444848202374067606_n.png?_nc_cat=1&ccb=1-7&_nc_sid=b55947&_nc_ohc=00anCp1hOrYQ7kNvwHcKQ0w…",
"url": "https://www.threads.com/search?q=aithreads&serp_type=tags&tag_id=18399895213044171"
}
],
"podcast": null,
"newsletterUrl": null,
"fediverseSharingEnabled": true,
"instagram": {
"handle": "zuck",
"url": "https://www.instagram.com/zuck/",
"followerCount": 17348027,
"followingCount": 625
}
},
"fetchedAt": "2026-10-19T09:39:14.113Z"
},
"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.
```
# Search users
Source: https://docs.scraperize.com/api-reference/threads/search-users
/api-reference/openapi.json get /v1/threads/search/users
Searches Threads accounts by username or name, like the "Profiles" results on Threads search: best match first, up to about 100 accounts in one response. Each account has its id, username, display name, bio, profile link and picture, follower count, and verified and private flags. No match returns an empty list. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/threads/search/users. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/threads/search/users
Description: Searches Threads accounts by username or name, like the "Profiles" results on Threads search: best match first, up to about 100 accounts in one response. Each account has its id, username, display name, bio, profile link and picture, follower count, and verified and private flags. No match returns an empty list. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The username or name to search for, e.g. `zuck` (a leading `@` is ignored).
- 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": {
"query": "zuck",
"users": [
{
"id": "63055343223",
"handle": "zuck",
"fullName": "Mark Zuckerberg",
"biography": "Mostly superintelligence and MMA takes",
"url": "https://www.threads.com/@zuck",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"isVerified": true,
"isPrivate": false,
"followerCount": 5754865
}
],
"count": 75,
"fetchedAt": "2026-10-19T16:35:13.590Z"
},
"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.
```
# User posts
Source: https://docs.scraperize.com/api-reference/threads/user-posts
/api-reference/openapi.json get /v1/threads/user/posts
Fetches a public Threads account's posts by username — the threads on its Threads tab, newest first (a pinned post comes first on page 1), 15 per page with a `cursor` for the next. Replies are not included (see `/v1/threads/post`). Each post has its id, link, text, date, author, like, reply, repost, quote and share counts, images, videos and carousels (with alt text), mentions and links, its topic, link preview, text attachment, GIFs and stickers, music, podcast or episode, an embedded Instagram post, the quoted post, and pinned, spoiler and AI-label flags. Also returns the account (id, name, picture, verified, private, follower count). A private account returns no posts. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/threads/user/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/threads/user/posts
Description: Fetches a public Threads account's posts by username — the threads on its Threads tab, newest first (a pinned post comes first on page 1), 15 per page with a `cursor` for the next. Replies are not included (see `/v1/threads/post`). Each post has its id, link, text, date, author, like, reply, repost, quote and share counts, images, videos and carousels (with alt text), mentions and links, its topic, link preview, text attachment, GIFs and stickers, music, podcast or episode, an embedded Instagram post, the quoted post, and pinned, spoiler and AI-label flags. Also returns the account (id, name, picture, verified, private, follower count). A private account returns no posts. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Threads username, e.g. `zuck` (an `@handle` or `threads.com/@...` URL also works).
- cursor (string): The `cursor` from the previous page, to get the next one.
- 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": "63055343223",
"handle": "zuck",
"fullName": "Mark Zuckerberg",
"url": "https://www.threads.com/@zuck",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s150x150_tt6&efg=eyJ2ZW5jb2RlX3RhZyI6I…",
"isVerified": true,
"isPrivate": false,
"followerCount": 5754774
},
"posts": [
{
"id": "4006434140014576097",
"code": "DeZtp-TkQHh",
"url": "https://www.threads.com/@zuck/post/DeZtp-TkQHh",
"text": "Introducing Muse Wonder, our new family of frontier models with state of the art performance for personal and professional agentic work.",
"createdAt": "2026-10-12T16:56:29.000Z",
"isEdited": false,
"language": null,
"author": {
"id": "63055343223",
"handle": "zuck",
"url": "https://www.threads.com/@zuck",
"fullName": "Mark Zuckerberg",
"profilePicUrl": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-19/825322135_17989325280103224_1252773933700107438_n.jpg?stp=dst-jpg_s206x206_tt6&_nc_cat=107&ccb=7-5&_nc_s…",
"isVerified": true
},
"mediaType": "image",
"media": [
{
"type": "image",
"url": "https://scontent-los4-1.cdninstagram.com/v/t51.82787-15/844965867_17991705567103224_8296143909108287920_n.webp?_nc_cat=109&ig_cache_key=NDAwNjQzNDE0MDAxNDU3NjA5…",
"thumbnailUrl": null,
"width": 2160,
"height": 3260,
"altText": null,
"hasAudio": null
}
],
"likeCount": 2075,
"replyCount": 457,
"repostCount": 163,
"quoteCount": 59,
"shareCount": 142,
"countsHidden": false,
"mentions": [],
"links": [],
"topic": null,
"linkPreview": null,
"textAttachment": null,
"gif": null,
"stickers": [],
"music": null,
"podcast": null,
"podcastEpisode": null,
"instagramPost": null,
"quotedPost": null,
"isQuotedPostUnavailable": false,
"isReply": false,
"replyToAuthor": null,
"rootPostAuthor": null,
"isPinned": false,
"isPinnedReply": false,
"isSpoiler": false,
"replyControl": "everyone",
"aiDetectionMethod": null
}
],
"count": 15,
"cursor": "AQHT4MAGHbQVkD07zuZQoX_OblA2Yn8tt43VFAZK_FW-npgofrOrHHvHCvV9Zao7uhTwkfV568eoBlo7nSQ7DkFPRw",
"hasMore": true,
"fetchedAt": "2026-10-19T09:39:17.188Z"
},
"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.
```
# Collection videos
Source: https://docs.scraperize.com/api-reference/tiktok/collection-videos
/api-reference/openapi.json get /v1/tiktok/collection/videos
Scrapes the videos in a public TikTok collection (`tiktok.com/@user/collection/-`), one page at a time (about 20 per page). Returns the collection (name, total videos, cover, owner) and every video with its description, created date, stats (views, likes, comments, shares, saves, reposts — TikTok rounds large view/like/comment/share counts; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors and flags. Pass the returned `cursor` to get the next page; it is null on the last page.
**Downloading video files:** TikTok only serves `video.playUrl`, `video.downloadUrl` and `video.formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied), so these links do not open when pasted into a browser. Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Covers, photo-post images, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok’s download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/collection/videos. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/collection/videos
Description: Scrapes the videos in a public TikTok collection (`tiktok.com/@user/collection/-`), one page at a time (about 20 per page). Returns the collection (name, total videos, cover, owner) and every video with its description, created date, stats (views, likes, comments, shares, saves, reposts — TikTok rounds large view/like/comment/share counts; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors and flags. Pass the returned `cursor` to get the next page; it is null on the last page.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The public collection URL, e.g. https://www.tiktok.com/@user/collection/Name-7552294476677466893.
- cursor (string): The `cursor` from the previous response, to get the next page. Omit for the first page.
- 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": {
"collection": {
"id": "7552294476677466893",
"name": "Poland 🤫",
"url": "https://www.tiktok.com/@polandsn1fan/collection/Poland%20%F0%9F%A4%AB-7552294476677466893",
"videoCount": 515,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/b38feb383621404a9f31b548e931ffbc_1693994147~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-sig…",
"owner": {
"id": "7498509120057623582",
"handle": "polandsn1fan",
"url": "https://www.tiktok.com/@polandsn1fan"
}
},
"videos": [
{
"id": "7275649412288843009",
"url": "https://www.tiktok.com/@riachanko/video/7275649412288843009",
"type": "video",
"description": "☆☆☆ #fyp #fyr #viral #viraltok #hetalia #axispowershetalia #hetaliaworldstars #hetaliapoland #hetalialithuania #hetalia2023 #хеталия #хеталияистраныоси #хеталия…",
"createdAt": "2023-09-06T09:55:41.000Z",
"language": "un",
"stats": {
"playCount": 21200,
"likeCount": 1687,
"commentCount": 7,
"shareCount": 82,
"collectCount": 453,
"repostCount": 0
},
"author": {
"id": "6724416613876499462",
"secUid": "MS4wLjABAAAApaxA7uEo1rUT2AHoewzGYKG_LIoaGe6rERIJRdEwSJl4Q0OrF1Xqw3pSyPj0i5Wg",
"handle": "riachanko",
"nickname": "рирячан",
"bio": "RU/ENG\n\nHELLO!! I'm Ria, 18 y.o, i love drawing, cartoons and microapple\n\nТГК: риряпостинг🍎✨️",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/93633d1feffc0ae340269a3ddaf3ea68~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=3a8d6c17…",
"verified": false,
"privateAccount": false,
"stats": {
"followerCount": 1418,
"followingCount": 620,
"likeCount": 39600,
"videoCount": 111,
"friendCount": 0,
"diggCount": 128100
}
},
"video": {
"duration": 14,
"width": 576,
"height": 576,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 1970982,
"quality": "normal",
"size": 3541363,
"coverUrl": "https://p19-common-sign.tiktokcdn.com/tos-alisg-p-0037/b38feb383621404a9f31b548e931ffbc_1693994147~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-sig…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/5f7c925db6f94e5e914b7757dcb7bc33_1693994147~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-sig…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/76a771f8fa024d7aa033d2096895af1f_1693994148~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-sig…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/okvenbNRIDagIUmQJgJAeCtwQejEAwh2XDzGYZ/?a=1988&bti=ODszNWYuMDE6&&bt=1924&ft=-Csk_mIUP…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c815-sg/oMs4Xk2kha0CAfg3QQQIZgBTSoDfBbzGEEKtRo/?a=1988&bti=ODszNWYuMDE6&&bt=1939&ft=-Csk_mIUP…",
"volume": {
"loudness": -9.2,
"peak": 1
},
"formats": [
{
"gearName": "normal_540_0",
"qualityType": 20,
"codec": "h264",
"format": "mp4",
"bitrate": 1970982,
"fps": 30,
"width": 576,
"height": 576,
"size": 3541363,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/okvenbNRIDagIUmQJgJAeCtwQejEAwh2XDzGYZ/?a=1988&bti=ODszNWYuMDE6&&bt=1924&ft=-Csk_mIUP…"
}
],
"subtitles": [
{
"language": "eng-US",
"languageCode": "en",
"format": "webvtt",
"isAutoGenerated": true,
"url": "https://v16-webapp.tiktok.com/6c98eef2c33168d96e8da606b5be06fe/6ac65add/video/tos/alisg/tos-alisg-pv-0037/6f5725234b474f5db93c4b9ab3883ea8/?a=1988&bti=ODszNWYuM…",
"expiresAt": "2026-10-07T14:44:45.000Z"
}
]
},
"photo": null,
"music": {
"id": "7275649465947261697",
"title": "оригинальный звук",
"url": "https://www.tiktok.com/music/%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9-%D0%B7%D0%B2%D1%83%D0%BA-7275649465947261697",
"authorName": "рирячан",
"album": null,
"duration": 14,
"preciseDuration": null,
"shootDuration": 14,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": true,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/93633d1feffc0ae340269a3ddaf3ea68~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=3a8d6c17…",
"playUrl": "https://v16m.tiktokcdn.com/bde97b6c64e16ef90ac595dbbb80f96c/6ac5095c/video/tos/alisg/tos-alisg-v-27dcd7/ocfZKAnkfCWyBbSAhKNCDJTBQS4NE1NAUrIgEz/?a=1180&bti=ODszN…",
"streaming": []
},
"hashtags": [
{
"id": "229207",
"name": "fyp",
"description": null
}
],
"mentions": [],
"effects": [
{
"id": "2933650",
"name": "Static Recorder"
}
],
"stickerTexts": [],
"location": null,
"contentCategory": {
"id": 100,
"name": "Anime & Comics"
},
"anchors": [],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0
}
],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 21,
"cursor": "30",
"hasMore": true,
"fetchedAt": "2026-10-05T14:44:32.110Z"
},
"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.
```
# Comment replies
Source: https://docs.scraperize.com/api-reference/tiktok/comment-replies
/api-reference/openapi.json get /v1/tiktok/video/comment/replies
Scrapes the replies to a comment on a public TikTok video. Pass the video `url` and the comment’s `commentId` (the `id` from `/v1/tiktok/video/comments`). Each reply comes with its id, text, created date, detected language, like count, author (id, secUid, username, nickname, avatar, profile link), who it answers when it’s a reply to another reply (`replyTo`: user id, username, nickname, reply id), whether the creator liked it, TikTok’s labels, photo attachments, sticker (static and animated renditions), emoji tokens, share info (a deep link to the reply) and its parent / reply-to ids — about 20 per page, TikTok’s most-liked replies first, then the newest. Pass the returned `cursor` (with the same url and commentId) to get the next page; it is null on the last page. TikTok can repeat a reply or two at a page boundary, so de-duplicate by `id` when collecting a whole thread. A comment with no replies — or an id TikTok doesn’t know — returns an empty list.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/video/comment/replies. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/video/comment/replies
Description: Scrapes the replies to a comment on a public TikTok video. Pass the video `url` and the comment’s `commentId` (the `id` from `/v1/tiktok/video/comments`). Each reply comes with its id, text, created date, detected language, like count, author (id, secUid, username, nickname, avatar, profile link), who it answers when it’s a reply to another reply (`replyTo`: user id, username, nickname, reply id), whether the creator liked it, TikTok’s labels, photo attachments, sticker (static and animated renditions), emoji tokens, share info (a deep link to the reply) and its parent / reply-to ids — about 20 per page, TikTok’s most-liked replies first, then the newest. Pass the returned `cursor` (with the same url and commentId) to get the next page; it is null on the last page. TikTok can repeat a reply or two at a page boundary, so de-duplicate by `id` when collecting a whole thread. A comment with no replies — or an id TikTok doesn’t know — returns an empty list.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The URL of the TikTok video the comment is on, e.g. https://www.tiktok.com/@user/video/7683891628230315295.
- commentId (string) [required]: The comment’s id — the `id` of a comment from `/v1/tiktok/video/comments`.
- cursor (string): The `cursor` from the previous response, to get the next page. Omit for the first page.
- 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": {
"video": {
"id": "7683891628230315295",
"url": "https://www.tiktok.com/@natgeo/video/7683891628230315295",
"handle": "natgeo"
},
"commentId": "7684049714988352276",
"replies": [
{
"id": "7684132893522559762",
"videoId": "7683891628230315295",
"parentId": "7684049714988352276",
"replyToId": null,
"text": "Australia is just the size of one African country 💀",
"createdAt": "2026-09-11T04:40:23.000Z",
"language": "en",
"likeCount": 57,
"author": {
"id": "7591198143678743608",
"secUid": "MS4wLjABAAAA3S83VV2xvaFVOQbLL5KnAhqnadk1Mrw_9EQNlmN4_BDhpX-sOAYk0MXr71W5NV78",
"handle": "hiluxman33",
"nickname": "jumpman",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/689db69225a6dd3bbb48daa4bb9c7589~tplv-tiktokx-cropcenter:100:100.jpg?dr=14579&refresh_token=06525f84&x-…",
"url": "https://www.tiktok.com/@hiluxman33"
},
"isLikedByCreator": false,
"labels": [],
"images": [],
"sticker": null,
"emojis": [],
"isTranslatable": true,
"shareInfo": {
"url": "https://m.tiktok.com/v/7683891628230315295.html?_d=f6004hkm87m931&comment_author_id=7591198143678743608&preview_pb=0&share_comment_id=7684132893522559762&share_…",
"title": "Presented by @ROLEX. Welcome to Africa 🌍 Africa Earth's Wild Home takes you deep into the heart of our wildest continent, bringing you closer to its animals, l…",
"description": "jumpman’s comment: Australia is just the size of one African country 💀",
"acl": {
"code": 0,
"addToStoryCode": 0
}
},
"replyTo": null
}
],
"count": 15,
"total": 15,
"cursor": null,
"hasMore": false,
"fetchedAt": "2026-10-05T14:45:00.860Z"
},
"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.
```
# Followers
Source: https://docs.scraperize.com/api-reference/tiktok/followers
/api-reference/openapi.json get /v1/tiktok/user/followers
Scrapes the followers of a public TikTok account by username (`handle`) or numeric user id (`userId`) — pass exactly one — 30 per page, newest followers first. Each follower comes with their user id and secUid, username, nickname, bio, profile link, avatars (three sizes), verified / private / TikTok Shop seller flags, whether their liked videos are public, and exact stats (followers, following, likes, videos, friends, videos liked). Pass the returned `cursor` (with the same handle / userId) to get the next page; it is null on the last page. Private accounts don't expose their followers (404).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/user/followers. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/user/followers
Description: Scrapes the followers of a public TikTok account by username (`handle`) or numeric user id (`userId`) — pass exactly one — 30 per page, newest followers first. Each follower comes with their user id and secUid, username, nickname, bio, profile link, avatars (three sizes), verified / private / TikTok Shop seller flags, whether their liked videos are public, and exact stats (followers, following, likes, videos, friends, videos liked). Pass the returned `cursor` (with the same handle / userId) to get the next page; it is null on the last page. Private accounts don't expose their followers (404).
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string): The TikTok username (with or without a leading @, or a tiktok.com/@username URL). Provide this or `userId`, not both.
- userId (string): The TikTok account's numeric user id. Provide this or `handle`, not both.
- cursor (string): The `cursor` from the previous response, to get the next page. Omit for the first page.
- 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": {
"profile": {
"id": "6780344874811442181",
"secUid": "MS4wLjABAAAAEf96k3JW8-3eOhgzgQswlFF6ZDnn1dzqWWorJjwDsiNZymqTtvOcFhp_RiYYST6s",
"handle": "natgeo",
"nickname": "National Geographic",
"url": "https://www.tiktok.com/@natgeo",
"followerCount": 9641543
},
"followers": [
{
"id": "6803024404806812678",
"secUid": "MS4wLjABAAAAQYqTYb8zTACz7lwdcP53WyjOQpH512lEaFq3OS7nnyMID_ZP3KaVTDxgaVYjg15v",
"handle": "mspangles",
"nickname": "Megan Leger",
"bio": null,
"url": "https://www.tiktok.com/@mspangles",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/7329673602457042949~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=8467d8d7&x-expires=1…",
"avatars": {
"large": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/7329673602457042949~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=8467d8d7&x-expires=1…",
"medium": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/7329673602457042949~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=8ca0ff48&x-expires=179…",
"thumb": "https://p19-common-sign.tiktokcdn.com/tos-maliva-avt-0068/7329673602457042949~tplv-tiktokx-cropcenter:100:100.jpeg?dr=14579&refresh_token=5ec9327d&x-expires=179…"
},
"verified": false,
"privateAccount": false,
"secret": false,
"ttSeller": false,
"openFavorite": false,
"downloadSetting": 0,
"ftc": false,
"isADVirtual": false,
"stats": {
"followerCount": 306,
"followingCount": 7064,
"likeCount": 0,
"videoCount": 0,
"friendCount": 0,
"diggCount": 198604
}
}
],
"count": 30,
"total": 9641543,
"cursor": "1791210555",
"hasMore": true,
"fetchedAt": "2026-10-05T14:45:13.108Z"
},
"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.
```
# Following
Source: https://docs.scraperize.com/api-reference/tiktok/following
/api-reference/openapi.json get /v1/tiktok/user/following
Scrapes the accounts a public TikTok user follows, by username (`handle`) or numeric user id (`userId`) — pass exactly one — 30 per page, most recently followed first. Each account comes with its user id and secUid, username, nickname, bio, profile link, avatars (three sizes), verified / private / TikTok Shop seller flags, whether its liked videos are public, and exact stats (followers, following, likes, videos, friends, videos liked). Pass the returned `cursor` (with the same handle / userId) to get the next page; it is null on the last page. Private accounts, and accounts that hide who they follow, return 404.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/user/following. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/user/following
Description: Scrapes the accounts a public TikTok user follows, by username (`handle`) or numeric user id (`userId`) — pass exactly one — 30 per page, most recently followed first. Each account comes with its user id and secUid, username, nickname, bio, profile link, avatars (three sizes), verified / private / TikTok Shop seller flags, whether its liked videos are public, and exact stats (followers, following, likes, videos, friends, videos liked). Pass the returned `cursor` (with the same handle / userId) to get the next page; it is null on the last page. Private accounts, and accounts that hide who they follow, return 404.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string): The TikTok username (with or without a leading @, or a tiktok.com/@username URL). Provide this or `userId`, not both.
- userId (string): The TikTok account's numeric user id. Provide this or `handle`, not both.
- cursor (string): The `cursor` from the previous response, to get the next page. Omit for the first page.
- 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": {
"profile": {
"id": "6780344874811442181",
"secUid": "MS4wLjABAAAAEf96k3JW8-3eOhgzgQswlFF6ZDnn1dzqWWorJjwDsiNZymqTtvOcFhp_RiYYST6s",
"handle": "natgeo",
"nickname": "National Geographic",
"url": "https://www.tiktok.com/@natgeo",
"followingCount": 62
},
"following": [
{
"id": "7666106259686999053",
"secUid": "MS4wLjABAAAA5o3uVXuYEDPS9fCjxRRvatYyP9tj_XB1ah919FFzbjQKMVEEeJljIuph4E9G1Njb",
"handle": "natgeofamily",
"nickname": "National Geographic Family",
"bio": "Inspiring wonder and curiosity for families around the world 💛",
"url": "https://www.tiktok.com/@natgeofamily",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/e72d2db948c77f1133404642a13189b4~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=677349b…",
"avatars": {
"large": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/e72d2db948c77f1133404642a13189b4~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=677349b…",
"medium": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/e72d2db948c77f1133404642a13189b4~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=dfd19433&…",
"thumb": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/e72d2db948c77f1133404642a13189b4~tplv-tiktokx-cropcenter:100:100.jpeg?dr=14579&refresh_token=92a3083c&…"
},
"verified": false,
"privateAccount": false,
"secret": false,
"ttSeller": false,
"openFavorite": false,
"downloadSetting": 0,
"ftc": false,
"isADVirtual": false,
"stats": {
"followerCount": 26124,
"followingCount": 4,
"likeCount": 751896,
"videoCount": 66,
"friendCount": 0,
"diggCount": 1
}
}
],
"count": 30,
"total": 62,
"cursor": "1659024187",
"hasMore": true,
"fetchedAt": "2026-10-05T14:45:16.975Z"
},
"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.
```
# Hashtag videos
Source: https://docs.scraperize.com/api-reference/tiktok/hashtag-videos
/api-reference/openapi.json get /v1/tiktok/search/hashtag
Returns the videos TikTok shows for a `hashtag` in a `region` (default NG), up to 30 per page. Includes the hashtag (id, name, description, exact video and view counts, cover and profile images, any pinned announcement) and every video with its description, created date, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. `servedRegion` is the region the results are for. Pass the returned `cursor` to get the next page; it is null on the last page.
**About the results:** videos come in TikTok’s ranked order, not a complete or chronological list. A video can occasionally appear on more than one page, and the list ends after a few hundred videos at most, however many use the hashtag. Some hashtags are not available in every region; then the response is a 404 and another `region` may work.
**Downloading video files:** TikTok only serves `video.playUrl`, `video.downloadUrl` and `video.formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied). Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Covers, photo-post images, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok’s download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/search/hashtag. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/search/hashtag
Description: Returns the videos TikTok shows for a `hashtag` in a `region` (default NG), up to 30 per page. Includes the hashtag (id, name, description, exact video and view counts, cover and profile images, any pinned announcement) and every video with its description, created date, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. `servedRegion` is the region the results are for. Pass the returned `cursor` to get the next page; it is null on the last page.
Required Headers:
- x-api-key: Your API key
Parameters:
- hashtag (string) [required]: The hashtag to get videos for, without the `#` (letters, numbers and underscores; up to 100 characters).
- region (select): The region (country) to get results for, as a two-letter code (ISO 3166-1). Defaults to NG (Nigeria).
- cursor (string): The `cursor` from the previous response, to get the next page. Omit for the first page.
- 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": {
"hashtag": {
"id": "75619",
"name": "lagos",
"url": "https://www.tiktok.com/tag/lagos",
"description": null,
"videoCount": 3433864,
"viewCount": 20527131299,
"isCommerce": false,
"coverUrl": null,
"profileImageUrl": null,
"announcement": null
},
"region": "NG",
"regionName": "Nigeria",
"servedRegion": "NG",
"videos": [
{
"id": "7664144953794219271",
"url": "https://www.tiktok.com/@fresh.dan.hajiya/video/7664144953794219271",
"type": "video",
"description": null,
"createdAt": "2026-07-19T07:56:49.000Z",
"language": "un",
"stats": {
"playCount": 86000,
"likeCount": 8957,
"commentCount": 222,
"shareCount": 3432,
"collectCount": 1589,
"repostCount": 0
},
"author": {
"id": "7636526947615065108",
"secUid": "MS4wLjABAAAA5wF3dHd45NnX6Rj4sr9FMXX-y736fClzWh0Tn_VNeYRK1R_VjYsqYkskZGMj6hKo",
"handle": "fresh.dan.hajiya",
"nickname": "Fresh Dan hajiya",
"bio": "Follow my page",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/178cb850f2008a7b1d0f5426eb8763ac~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=871efe03…",
"verified": false,
"privateAccount": false,
"stats": {
"followerCount": 3164,
"followingCount": 1216,
"likeCount": 19400,
"videoCount": 258,
"friendCount": 0,
"diggCount": 8874
}
},
"video": {
"duration": 35,
"width": 576,
"height": 1024,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 435728,
"quality": "lowest",
"size": 1960235,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oM6FHcFik4EtLEz1A0BIIghigfJsJpCqAB8AwH~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oU8I6LiJFS0wPcq0ChF4gpwIBfAyiABtHAH1kI~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/owg6ti0CiIZIwQLHkcfF8r4AIlhP1BqFAB50Av~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/owCBpgD4qSBF7bK5B1FEgLDxEXAReZvIQpfPUI/?a=1988&bti=ODszNWYuMDE6&&bt=425&ft=-Csk_mIUPD…",
"downloadUrl": "https://webapp-sg.tiktok.com/ca9b50800b5d9639e0752de89c30b400/6ac65b32/kmoat/mps/logo/v2/r/p/v14044g50000d9e85sfog65qq88kfdu0/42a4122620344053ab2d146b8e941605/5…",
"volume": {
"loudness": -29.5,
"peak": 0.15668
},
"formats": [
{
"gearName": "adapt_lower_720_1",
"qualityType": 14,
"codec": "h265_hvc1",
"format": "mp4",
"bitrate": 565698,
"fps": 29,
"width": 720,
"height": 1280,
"size": 2545008,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/oAmCAL4qcEAktC3hH4QFdfQ38wi60ABV1IFIbi/?a=1988&bti=ODszNWYuMDE6&&bt=552&ft=-Csk_mIUPD…"
}
],
"subtitles": []
},
"photo": null,
"music": {
"id": "7663386761804532498",
"title": "original sound",
"url": "https://www.tiktok.com/music/original-sound-7663386761804532498",
"authorName": "Dan basi",
"album": null,
"duration": 46,
"preciseDuration": null,
"shootDuration": 46,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": true,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p19-common-sign.tiktokcdn.com/tos-maliva-avt-0068/d31b934dc66421ab31ae5aa0e0aacac6~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=34a3524…",
"playUrl": "https://v45.tiktokcdn.com/faf9af5f17048e67bcc015e11563cff2/6ac509bd/video/tos/alisg/tos-alisg-v-27dcd7/osEOmEA1aLZ0jiGK2oBBawAKo9AfBUzA3EAWiO/?a=1180&bti=ODszNW…",
"streaming": []
},
"hashtags": [],
"mentions": [],
"effects": [
{
"id": "33910467",
"name": "The real black and white"
}
],
"stickerTexts": [
"Lagos"
],
"location": null,
"contentCategory": {
"id": 120,
"name": "General"
},
"anchors": [],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0,
"suggestedSearches": []
}
],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 30,
"cursor": "30",
"hasMore": true,
"fetchedAt": "2026-10-05T14:45:36.742Z"
},
"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.
```
# Keyword search
Source: https://docs.scraperize.com/api-reference/tiktok/keyword-search
/api-reference/openapi.json get /v1/tiktok/search/keyword
Returns the TikTok videos matching a keyword `query` in a `region` (default NG), about 12 per page in TikTok’s relevance order. Each video comes with its description, created date, language, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles), music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. `servedRegion` is the region the results are for. Pass the returned `cursor` (with the same query and region) to get the next page; it is null on the last page.
**About the results:** TikTok matches loosely, so even an unusual query returns a few close matches. Results can shift slightly between identical searches. Results are videos only; filtering by post date and sorting are not available. Search isn’t available in every region (e.g. the United States); then the response is a 404 and another `region` may work. The first search in a region can take up to about a minute; later ones are much faster.
**Downloading video files:** TikTok only serves `video.playUrl`, `video.downloadUrl` and `video.formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied). Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Covers, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok’s download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/search/keyword. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/search/keyword
Description: Returns the TikTok videos matching a keyword `query` in a `region` (default NG), about 12 per page in TikTok’s relevance order. Each video comes with its description, created date, language, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles), music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. `servedRegion` is the region the results are for. Pass the returned `cursor` (with the same query and region) to get the next page; it is null on the last page.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The keyword(s) to search for (1–100 characters).
- region (select): The region (country) to get results for, as a two-letter code (ISO 3166-1). Defaults to NG (Nigeria).
- cursor (string): The `cursor` from the previous response (same query and region), to get the next page. Omit for the first page.
- 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": {
"query": "lagos",
"region": "NG",
"regionName": "Nigeria",
"servedRegion": "NG",
"videos": [
{
"id": "7684727102066658578",
"url": "https://www.tiktok.com/@realokadaman/video/7684727102066658578",
"type": "video",
"description": "Our question today why Lagos state tack-force are not posting our bike when they arrested like before this is our question may be there’s something going on the…",
"createdAt": "2026-09-12T19:06:07.000Z",
"language": "en",
"stats": {
"playCount": 305600,
"likeCount": 35200,
"commentCount": 776,
"shareCount": 22500,
"collectCount": 7445,
"repostCount": 0
},
"author": {
"id": "7510720009678210104",
"secUid": "MS4wLjABAAAANShGKSKT626JzyipEKLY8jYc14LpZOze4CG1X9N5SEFmYFEXHtpyEsqEDFhd3-Bh",
"handle": "realokadaman",
"nickname": "okada man",
"bio": "Bike riders ambassador in Africa WhatsApp 09068141390",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/12908100026978c790f49747ccef657a~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=91af7ff…",
"verified": false,
"privateAccount": false,
"stats": {
"followerCount": 53200,
"followingCount": 27,
"likeCount": 336300,
"videoCount": 414,
"friendCount": 0,
"diggCount": 5006
}
},
"video": {
"duration": 91,
"width": 576,
"height": 1024,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 555440,
"quality": "lowest",
"size": 6322793,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oIoZEjFMzPc9bYNlBBDAIFphRsqgoBiEgaEefD~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"originCoverUrl": "https://p19-common-sign.tiktokcdn.com/tos-alisg-p-0037/owoLQGcRlEyasNDyBqgFxpUeQfR8q9EBPEFhLA~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/osoEpEGDgxZB8FyFfeqRBHAhQslPqpQCa9HK0c~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/oo6EeoZrIshEcEpBYlBDfBjRF9AFQBagGwPqEP/?a=1988&bti=ODszNWYuMDE6&&bt=542&ft=-Csk_mIUPD…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c815-sg/oYcBpBPAmaeDcshKQQZRv9fFEYBFloEqgIjEZv/?a=1988&bti=ODszNWYuMDE6&&bt=1475&eid=20480&ft…",
"volume": {
"loudness": -12,
"peak": 0.53703
},
"formats": [
{
"gearName": "adapt_lower_720_1",
"qualityType": 14,
"codec": "h265_hvc1",
"format": null,
"bitrate": 579733,
"fps": null,
"width": 720,
"height": 1280,
"size": 6599320,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/o4felk9ABQBESZgshYDYcqELpIGF0qRDaFjEyP/?a=1988&bti=ODszNWYuMDE6&&bt=566&ft=-Csk_mIUPD…"
}
],
"subtitles": []
},
"photo": null,
"music": {
"id": "7684727154324540181",
"title": "original sound",
"url": "https://www.tiktok.com/music/original-sound-7684727154324540181",
"authorName": "okada man",
"album": null,
"duration": 91,
"preciseDuration": null,
"shootDuration": null,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": false,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/12908100026978c790f49747ccef657a~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=91af7ff…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-v-27dcd7/ooqAQml4iBhEaCFJeBXEUqJAApUqgpfCiKoDEv/?a=1988&bti=ODszNWYuMDE6&&bt=125&ft=GNDpcInz7ThqfO…",
"streaming": []
},
"hashtags": [
{
"id": "1662313548384262",
"name": "nigeriangovernment",
"description": null
}
],
"mentions": [],
"effects": [
{
"id": "2140391842",
"name": "MOVIE"
}
],
"stickerTexts": [],
"location": null,
"contentCategory": {
"id": 120,
"name": "General"
},
"anchors": [],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0,
"suggestedSearches": []
}
],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 12,
"cursor": "12_20261005224548CC93FFEA156288A9DC30",
"hasMore": true,
"fetchedAt": "2026-10-05T14:45:50.785Z"
},
"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.
```
# LIVE stream
Source: https://docs.scraperize.com/api-reference/tiktok/live-stream
/api-reference/openapi.json get /v1/tiktok/user/live
Returns whether a TikTok account is LIVE right now and, if it is, the stream: title, start time, viewers watching now, total viewers so far, new followers during the LIVE, category and game (for gaming streams), how it is broadcast (camera, screen share, streaming software or audio), co-hosting, the current battle (PK) with both scores and the opponent, the top gifters (with their gifter level and gift score), age-restriction, subscriber-only, paid-event and shop flags, and the stream URLs — every quality TikTok offers (e.g. Original, 720p60, 720p, 540p, 360p, in H.264 and H.265, plus audio only) as FLV and HLS links with resolution, bitrate and expiry. Stream URLs play without extra headers and expire after a while. The account itself comes with its ids, nickname, bio, avatar, verified / private flags and follower counts. When the account is not LIVE, `isLive` is false, `live` is null and `lastLive` describes its most recent LIVE as TikTok reports it (title, start and end, duration, total viewers), or null if there is none.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/user/live. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/user/live
Description: Returns whether a TikTok account is LIVE right now and, if it is, the stream: title, start time, viewers watching now, total viewers so far, new followers during the LIVE, category and game (for gaming streams), how it is broadcast (camera, screen share, streaming software or audio), co-hosting, the current battle (PK) with both scores and the opponent, the top gifters (with their gifter level and gift score), age-restriction, subscriber-only, paid-event and shop flags, and the stream URLs — every quality TikTok offers (e.g. Original, 720p60, 720p, 540p, 360p, in H.264 and H.265, plus audio only) as FLV and HLS links with resolution, bitrate and expiry. Stream URLs play without extra headers and expire after a while. The account itself comes with its ids, nickname, bio, avatar, verified / private flags and follower counts. When the account is not LIVE, `isLive` is false, `live` is null and `lastLive` describes its most recent LIVE as TikTok reports it (title, start and end, duration, total viewers), or null if there is none.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The TikTok username (with or without a leading @, or a tiktok.com/@username URL).
- 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": {
"isLive": true,
"user": {
"id": "7228617106127094790",
"secUid": "MS4wLjABAAAAMGcjyEIH8K4TtQaDqwdsnBW8YViN51OijSuKZUXfzreVMAjaVR1Kjsz3PbzBs-o-",
"handle": "pepper_979",
"nickname": "PEPPER 🌶️ 🇻🇳🤪",
"bio": "Focus 🧘 and consistent 🫵no pain no gain 🦾in god I trust",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/a8fedb5d82169ba633dc52bbc6c0df04~tplv-tiktokx-cropcenter:1080:1080.webp?dr=14579&refresh_token=5b38f0b1…",
"verified": false,
"isPrivate": false,
"followerCount": 51931,
"followingCount": 1063,
"profileUrl": "https://www.tiktok.com/@pepper_979",
"liveUrl": "https://www.tiktok.com/@pepper_979/live"
},
"live": {
"roomId": "7693190947967142674",
"streamId": "7693191100006648584",
"title": null,
"shareUrl": "https://m.tiktok.com/share/live/7693190947967142674/?language=en",
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/a8fedb5d82169ba633dc52bbc6c0df04~tplv-tiktokx-cropcenter:720:720.webp?dr=14579&refresh_token=2bb0dd73&x…",
"startedAt": "2026-10-05T14:30:40.000Z",
"viewerCount": 148,
"totalViewers": 818,
"newFollowers": 1,
"category": null,
"game": null,
"broadcastType": "camera",
"isCoHosting": false,
"battle": {
"id": "7693193300111002386",
"startedAt": "2026-10-05T14:39:34.000Z",
"durationSeconds": 301,
"isFinished": true,
"opponentUserId": "6550835996421210114",
"scores": [
{
"userId": "6550835996421210114",
"score": 3096,
"isHost": false
}
]
},
"topGifters": [
{
"userId": "6731150825269953538",
"secUid": "MS4wLjABAAAAFyQ7R9hdb9C2rSyxDOztOWtOHwadTeZ6X28kjdL8HpAWKk0NIS0GIQuWD-kx_9-h",
"handle": "minhon030399",
"nickname": "Mi NhOn🇨🇳•🇻🇳",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/2439730fad7a0dbfbe0642d7ba6c2354~tplv-tiktokx-cropcenter:1080:1080.webp?dr=14579&refresh_token=1ff1d3c8…",
"followerCount": 10129,
"gifterLevel": 21,
"giftScore": 52
}
],
"ageRestricted": false,
"subscriberOnly": false,
"isPaidEvent": false,
"hasShop": false,
"shopProductCount": 0,
"chatEnabled": true,
"giftsEnabled": true,
"streams": [
{
"quality": "origin",
"name": "Original",
"codec": "h265",
"isAudioOnly": false,
"resolution": "1080x1920",
"width": 1080,
"height": 1920,
"bitrate": 3000000,
"flvUrl": "https://pull-flv-l1-sg01.tiktokcdn.com/stage/stream-7693191100006648584.flv?expire=1792421138&sign=f284dccf5dbf6416acd819bcbd7025b0",
"hlsUrl": "https://pull-hls-l1-sg01.tiktokcdn.com/stage/stream-7693191100006648584/index.m3u8?expire=1792421138&sign=e0b4ecfe2c9fdeefe9812ea28308947a",
"dashUrl": null,
"expiresAt": "2026-10-19T14:45:38.000Z"
}
]
},
"lastLive": null,
"fetchedAt": "2026-10-05T14:45:39.366Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/tiktok/profile
/api-reference/openapi.json get /v1/tiktok/profile
Fetches a public TikTok profile by username (`handle`) or numeric user id (`userId`) — pass exactly one. Returns identity (ids, username, nickname, bio, bio link, avatars, created date), badges and account type (verified, private, organization, business category, TikTok Shop seller), exact stats (followers, following, likes, videos, friends), the LIVE room id and upcoming LIVE events, visible profile tabs and interaction settings.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/profile
Description: Fetches a public TikTok profile by username (`handle`) or numeric user id (`userId`) — pass exactly one. Returns identity (ids, username, nickname, bio, bio link, avatars, created date), badges and account type (verified, private, organization, business category, TikTok Shop seller), exact stats (followers, following, likes, videos, friends), the LIVE room id and upcoming LIVE events, visible profile tabs and interaction settings.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string): The TikTok username (with or without a leading @, or a tiktok.com/@username URL). Provide this or `userId`, not both.
- userId (string): The TikTok account's numeric user id. Provide this or `handle`, not both.
- 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": {
"profile": {
"id": "127905465618821121",
"secUid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
"handle": "khaby.lame",
"url": "https://www.tiktok.com/@khaby.lame",
"nickname": "Khabane lame",
"bio": "Se vuoi ridere sei nel posto giusto😎 If u wanna laugh u r in the right place😎",
"bioLink": null,
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=b1663fd…",
"avatarUrls": {
"large": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=b1663fd…",
"medium": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=73ffa012&…",
"thumb": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:100:100.jpeg?dr=14579&refresh_token=595c67c5&…"
},
"createdAt": "2016-08-10T22:02:34.000Z",
"nicknameUpdatedAt": null,
"verified": true,
"privateAccount": false,
"secret": false,
"isOrganization": false,
"ttSeller": false,
"commerceUserInfo": {
"commerceUser": false,
"category": null,
"categoryButton": false,
"downloadLink": {
"android": null,
"ios": null
}
},
"ftc": false,
"isADVirtual": false,
"language": "en",
"liveRoomId": null,
"openFavorite": false,
"relation": 0,
"uniqueIdModifyTime": null,
"followingVisibility": 1,
"isEmbedBanned": false,
"canExpPlaylist": true,
"profileEmbedPermission": 1,
"suggestAccountBind": false,
"userStoryStatus": 0,
"recommendReason": null,
"nowInvitationCardUrl": null,
"tabs": {
"music": false,
"questions": false,
"playlists": false
},
"settings": {
"comment": 0,
"duet": 0,
"stitch": 0,
"download": 0
},
"stats": {
"followerCount": 162999391,
"followingCount": 81,
"likeCount": 2685535182,
"videoCount": 1357,
"friendCount": 77
},
"liveEvents": []
},
"fetchedAt": "2026-10-05T14:44:08.924Z"
},
"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.
```
# Profile region
Source: https://docs.scraperize.com/api-reference/tiktok/profile-region
/api-reference/openapi.json get /v1/tiktok/profile/region
Returns the country a TikTok account posts from, as an ISO 3166-1 alpha-2 code (e.g. `US`) plus its English name. TikTok records the country each video was posted from; the region is the most common one across the profile's most recent videos. Private accounts and accounts without public videos have no region (404).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/profile/region. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/profile/region
Description: Returns the country a TikTok account posts from, as an ISO 3166-1 alpha-2 code (e.g. `US`) plus its English name. TikTok records the country each video was posted from; the region is the most common one across the profile's most recent videos. Private accounts and accounts without public videos have no region (404).
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The TikTok username (with or without a leading @, or a tiktok.com/@username URL).
- 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": {
"handle": "khaby.lame",
"region": "US",
"regionName": "United States",
"fetchedAt": "2026-10-05T14:44:21.164Z"
},
"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.
```
# Profile videos
Source: https://docs.scraperize.com/api-reference/tiktok/profile-videos
/api-reference/openapi.json get /v1/tiktok/profile/videos
Scrapes a public TikTok profile's videos by username (`handle`) or numeric user id (`userId`) — pass exactly one — up to 30 per page, sorted by `latest` (default; pinned videos first), `popular` (most viewed) or `oldest`. Each video comes with its description, created date, stats (views, likes, comments, shares, saves, reposts — TikTok rounds large view/like/comment/share counts; saves are exact), author, video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors and flags. Pass the returned `cursor` — with the same `sortBy` — to get the next page; it is null on the last page.
**Downloading video files:** send the `Cookie` and `Referer` headers returned in `mediaHeaders` when requesting `video.playUrl`, `video.downloadUrl` or `video.formats[].url` (without them TikTok answers 403). Covers, photo images, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok’s download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/profile/videos. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/profile/videos
Description: Scrapes a public TikTok profile's videos by username (`handle`) or numeric user id (`userId`) — pass exactly one — up to 30 per page, sorted by `latest` (default; pinned videos first), `popular` (most viewed) or `oldest`. Each video comes with its description, created date, stats (views, likes, comments, shares, saves, reposts — TikTok rounds large view/like/comment/share counts; saves are exact), author, video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors and flags. Pass the returned `cursor` — with the same `sortBy` — to get the next page; it is null on the last page.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string): The TikTok username (with or without a leading @, or a tiktok.com/@username URL). Provide this or `userId`, not both.
- userId (string): The account's numeric user id. Provide this or `handle`, not both.
- sortBy (select): Order of the videos: `latest` (default), `popular` or `oldest`.
- cursor (string): The `cursor` from the previous response (use the same `sortBy`). Omit for the first page.
- 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": {
"profile": {
"id": "127905465618821121",
"secUid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
"handle": "khaby.lame",
"nickname": "Khabane lame",
"url": "https://www.tiktok.com/@khaby.lame",
"videoCount": 1357
},
"sortBy": "latest",
"videos": [
{
"id": "7691740195418377502",
"url": "https://www.tiktok.com/@khaby.lame/video/7691740195418377502",
"type": "video",
"description": "Just give me 5 more minutes 😭#learnfromkhaby #comedy",
"createdAt": "2026-10-01T16:40:54.000Z",
"language": "en",
"stats": {
"playCount": 3000000,
"likeCount": 322200,
"commentCount": 5736,
"shareCount": 21200,
"collectCount": 14857,
"repostCount": 0
},
"author": {
"id": "127905465618821121",
"secUid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
"handle": "khaby.lame",
"nickname": "Khabane lame",
"bio": "Se vuoi ridere sei nel posto giusto😎 If u wanna laugh u r in the right place😎",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=b1663fd…",
"verified": true,
"privateAccount": false,
"stats": {
"followerCount": 163000000,
"followingCount": 81,
"likeCount": 2700000000,
"videoCount": 1357,
"friendCount": 0,
"diggCount": 6747
}
},
"video": {
"duration": 34,
"width": 720,
"height": 1280,
"definition": "720p",
"format": "mp4",
"codec": "h264",
"bitrate": 810352,
"quality": "normal",
"size": 3511766,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast8-p-0068-tx2/o0jRDQRMAbfFAlZX8eqGQcARBqerRfAHR7gVSU~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-si…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast8-p-0068-tx2/oIegjRh1GgNRoeolAMLFUlG7tFebqrQgI0AVRf~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-si…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast8-p-0068-tx2/oIlgUgjnAAlBQ1otGLeVRqGFnif6oIRMReg7Ie~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-si…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c799-sg/oYVBvkqAFowDQa0IgGyRS9fyEWEFejEqAQ0IGi/?a=1988&bti=ODszNWYuMDE6&&bt=791&ft=-Csk_mIUPD…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c799-sg/o0joqEI0ygDGAwA9QJlEB3qe0VFSRvWEEG4afT/?a=1988&bti=ODszNWYuMDE6&&bt=735&ft=-Csk_mIUPD…",
"volume": {
"loudness": -17.3,
"peak": 0.54954
},
"formats": [
{
"gearName": "adapt_lowest_1080_1",
"qualityType": 2,
"codec": "h265_hvc1",
"format": "mp4",
"bitrate": 819957,
"fps": 29,
"width": 1080,
"height": 1920,
"size": 3553387,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c799-sg/oEfqCGR1EyDvwe4E3kFy9QxZE0GqIAB0oWgVaA/?a=1988&bti=ODszNWYuMDE6&&bt=800&ft=-Csk_mIUPD…"
}
],
"subtitles": []
},
"photo": null,
"music": {
"id": "7691740326570019615",
"title": "original sound",
"url": "https://www.tiktok.com/music/original-sound-7691740326570019615",
"authorName": "Khabane lame",
"album": null,
"duration": 34,
"preciseDuration": null,
"shootDuration": 34,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": true,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=b1663fd…",
"playUrl": "https://v58.tiktokcdn.com/video/tos/alisg/tos-alisg-v-2370c799-sg/ogcDFBGWoU0A8F0eIAAREf8XVjvDqICFsEDJAo/?a=1180&bti=ODszNWYuMDE6&&bt=125&ft=GcDrcInz7ThsnO-GXq8…",
"streaming": []
},
"hashtags": [
{
"id": "1697657584273413",
"name": "learnfromkhaby",
"description": null
}
],
"mentions": [],
"effects": [],
"stickerTexts": [],
"location": null,
"contentCategory": {
"id": 104,
"name": "Comedy"
},
"anchors": [],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0
}
],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 30,
"cursor": "1780067181000",
"hasMore": true,
"fetchedAt": "2026-10-05T14:44:27.454Z"
},
"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.
```
# Search suggestions
Source: https://docs.scraperize.com/api-reference/tiktok/search-suggestions
/api-reference/openapi.json get /v1/tiktok/search/suggestions
Returns TikTok’s autocomplete suggestions for a `query` — what the search box suggests as you type — in a `region` (default NG). Suggestions differ by region: the same query gives different suggestions in, say, the UK and the US. Each suggestion comes with its rank, the characters that match the query, its language and its tokens. Suggestions are not personalised. `servedRegion` is the region the results are for.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/search/suggestions. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/search/suggestions
Description: Returns TikTok’s autocomplete suggestions for a `query` — what the search box suggests as you type — in a `region` (default NG). Suggestions differ by region: the same query gives different suggestions in, say, the UK and the US. Each suggestion comes with its rank, the characters that match the query, its language and its tokens. Suggestions are not personalised. `servedRegion` is the region the results are for.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The text typed so far (1–100 characters).
- region (select): The region (country) to get results for, as a two-letter code (ISO 3166-1). Defaults to NG (Nigeria).
- 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": {
"query": "paul",
"region": "NG",
"regionName": "Nigeria",
"servedRegion": "NG",
"suggestions": [
{
"text": "Paul McCartney",
"position": 0,
"matches": [
{
"start": 0,
"end": 4
}
],
"language": "en",
"tokens": [
"Paul"
],
"groupId": "8725309374589977462"
}
],
"count": 8,
"fetchedAt": "2026-10-05T14:45:28.574Z"
},
"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.
```
# Search users
Source: https://docs.scraperize.com/api-reference/tiktok/search-users
/api-reference/openapi.json get /v1/tiktok/search/users
Searches TikTok accounts matching a `query`, 10 per page in TikTok’s own ranking (it matches loosely — usernames, nicknames and bios — so a query rarely returns nothing). Each account comes with its user id and secUid, username, nickname, bio, profile link, avatar, verification badge and label, follower count, total likes, and its LIVE room id when it is live. Pass the returned `cursor` (with the same query) to get the next page; it is null on the last page. Results can shift slightly between identical searches. Search results round large follower counts and don’t always carry the verification badge — for exact stats, an authoritative `verified` flag and the full profile use `/v1/tiktok/profile`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/search/users. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/search/users
Description: Searches TikTok accounts matching a `query`, 10 per page in TikTok’s own ranking (it matches loosely — usernames, nicknames and bios — so a query rarely returns nothing). Each account comes with its user id and secUid, username, nickname, bio, profile link, avatar, verification badge and label, follower count, total likes, and its LIVE room id when it is live. Pass the returned `cursor` (with the same query) to get the next page; it is null on the last page. Results can shift slightly between identical searches. Search results round large follower counts and don’t always carry the verification badge — for exact stats, an authoritative `verified` flag and the full profile use `/v1/tiktok/profile`.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The search text, e.g. a name or username (1–100 characters).
- cursor (string): The `cursor` from the previous response (same query), to get the next page. Omit for the first page.
- 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": {
"query": "paul",
"correctedQuery": null,
"users": [
{
"id": "7673203716040442900",
"secUid": "MS4wLjABAAAANF3gh472UnRU4aAOCACvxj8PU1tHHL0FxG12kre-98mqiaB9ZbZmCG0sEMTr-8OX",
"handle": "paul430830",
"nickname": "Paul",
"bio": null,
"url": "https://www.tiktok.com/@paul430830",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/9680d75d3265b4ad61928d456600ab5c~tplv-tiktokx-cropcenter:100:100.webp?biz_tag=tiktok_user.user_cover&dr…",
"avatar": {
"uri": "tos-alisg-avt-0068/9680d75d3265b4ad61928d456600ab5c",
"urls": [
"https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/9680d75d3265b4ad61928d456600ab5c~tplv-tiktokx-cropcenter:100:100.webp?biz_tag=tiktok_user.user_cover&dr…"
],
"width": 720,
"height": 720
},
"verified": false,
"verificationLabel": null,
"enterpriseVerifyReason": null,
"followerCount": 2822,
"likeCount": 1432,
"liveRoomId": null,
"isLive": false
}
],
"count": 10,
"cursor": "10_20261005224524E46DA90E886C6A7D7452",
"hasMore": true,
"fetchedAt": "2026-10-05T14:45:25.529Z"
},
"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.
```
# Song
Source: https://docs.scraperize.com/api-reference/tiktok/song
/api-reference/openapi.json get /v1/tiktok/song
Returns the details of a TikTok sound from its page link (`musicUrl`, e.g. `https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506`): the title, artist name, album, duration and the longest clip a creator can record with it (`shootDuration`), whether it is an "original sound" uploaded by a creator or a released song, copyright / commercial-use / private flags, cover images (three sizes), the audio file (`playUrl`), its links on Apple Music and Spotify when TikTok matches it to a song, how many videos use it (`videoCount`, rounded by TikTok), the artist account(s) for a released song (`artists`) or the creator of an original sound (`author`) — with handle, name, bio and avatars — and TikTok's share text. `url` is the sound's canonical page.
The title part of the link doesn't matter: the sound is found by the number at the end. Some sounds aren't available in every country (copyright); then the response is a 404. The audio and cover URLs need no extra headers and expire after a while.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/song. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/song
Description: Returns the details of a TikTok sound from its page link (`musicUrl`, e.g. `https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506`): the title, artist name, album, duration and the longest clip a creator can record with it (`shootDuration`), whether it is an "original sound" uploaded by a creator or a released song, copyright / commercial-use / private flags, cover images (three sizes), the audio file (`playUrl`), its links on Apple Music and Spotify when TikTok matches it to a song, how many videos use it (`videoCount`, rounded by TikTok), the artist account(s) for a released song (`artists`) or the creator of an original sound (`author`) — with handle, name, bio and avatars — and TikTok's share text. `url` is the sound's canonical page.
Required Headers:
- x-api-key: Your API key
Parameters:
- musicUrl (string) [required]: The sound's TikTok page link: `https://www.tiktok.com/music/-` (as in a post's `music.url`).
- 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": {
"id": "7370375686554782506",
"title": "That's Who I Praise",
"url": "https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506",
"authorName": "Brandon Lake",
"album": "That's Who I Praise",
"duration": 64,
"preciseDuration": null,
"shootDuration": 60,
"original": false,
"isCopyrighted": true,
"isCommerceMusic": false,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/ogifeGpqwKAjM2f1xG8IZDI09glmABLwaTFrAe",
"streaming": [
{
"service": "apple_music",
"serviceCode": 1,
"songId": "1757500327",
"url": "https://music.apple.com/song/1757500327"
}
],
"covers": {
"thumb": "https://p16-sg.tiktokcdn.com/aweme/100x100/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"medium": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"large": "https://p16-sg.tiktokcdn.com/aweme/720x720/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg"
},
"videoCount": 27600,
"artists": [
{
"id": "6780744002670396422",
"secUid": "MS4wLjABAAAAzWDzMQFatDdIcWj_JHHuDZTbsFMeWLpVEzycWCFf6kCf_KL_mff7sVQovdlrWtEr",
"handle": "brandonlakemusic",
"nickname": "Brandon Lake",
"bio": "“Changing” | OCT 16\nPre-Save / Pre-Add now",
"url": "https://www.tiktok.com/@brandonlakemusic",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=aba71a7…",
"avatars": {
"thumb": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:100:100.jpeg?dr=14579&refresh_token=3144ab02&…",
"medium": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=04d5afb2&…",
"large": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=aba71a7…"
},
"privateAccount": false
}
],
"author": null,
"share": {
"title": "Brandon Lake | ♬ That's Who I Praise | on TikTok",
"description": "27.6k videos - Watch awesome short videos created with ♬ That's Who I Praise"
},
"fetchedAt": "2026-10-05T14:46:05.099Z"
},
"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.
```
# Song videos
Source: https://docs.scraperize.com/api-reference/tiktok/song-videos
/api-reference/openapi.json get /v1/tiktok/song/videos
Returns the TikToks made with a sound, from the sound's page link (`musicUrl`, e.g. `https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506`), about 30 per page in TikTok's order — both videos and photo carousels. Each post has a `type` (`video` or `photo`) and comes with its description, created date, language, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or every carousel image, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. `song` is the sound itself (the same object as `/v1/tiktok/song`). Pass the returned `cursor` (with the same `musicUrl`) to get the next page; it is null on the last page.
TikTok skips a few posts on some pages, so a page can hold fewer than 30. Some sounds aren't available in every country (copyright); then the response is a 404.
**Downloading video files:** TikTok only serves `video.playUrl`, `video.downloadUrl` and `video.formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied). Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Photo images, covers, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok's download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/song/videos. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/song/videos
Description: Returns the TikToks made with a sound, from the sound's page link (`musicUrl`, e.g. `https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506`), about 30 per page in TikTok's order — both videos and photo carousels. Each post has a `type` (`video` or `photo`) and comes with its description, created date, language, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or every carousel image, music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. `song` is the sound itself (the same object as `/v1/tiktok/song`). Pass the returned `cursor` (with the same `musicUrl`) to get the next page; it is null on the last page.
Required Headers:
- x-api-key: Your API key
Parameters:
- musicUrl (string) [required]: The sound's TikTok page link: `https://www.tiktok.com/music/-` (as in a post's `music.url`).
- cursor (string): The `cursor` from the previous response (same musicUrl), to get the next page. Omit for the first page.
- 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": {
"song": {
"id": "7370375686554782506",
"title": "That's Who I Praise",
"url": "https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506",
"authorName": "Brandon Lake",
"album": "That's Who I Praise",
"duration": 64,
"preciseDuration": null,
"shootDuration": 60,
"original": false,
"isCopyrighted": true,
"isCommerceMusic": false,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/ogifeGpqwKAjM2f1xG8IZDI09glmABLwaTFrAe",
"streaming": [
{
"service": "apple_music",
"serviceCode": 1,
"songId": "1757500327",
"url": "https://music.apple.com/song/1757500327"
}
],
"covers": {
"thumb": "https://p16-sg.tiktokcdn.com/aweme/100x100/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"medium": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"large": "https://p16-sg.tiktokcdn.com/aweme/720x720/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg"
},
"videoCount": 27600,
"artists": [
{
"id": "6780744002670396422",
"secUid": "MS4wLjABAAAAzWDzMQFatDdIcWj_JHHuDZTbsFMeWLpVEzycWCFf6kCf_KL_mff7sVQovdlrWtEr",
"handle": "brandonlakemusic",
"nickname": "Brandon Lake",
"bio": "“Changing” | OCT 16\nPre-Save / Pre-Add now",
"url": "https://www.tiktok.com/@brandonlakemusic",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=aba71a7…",
"avatars": {
"thumb": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:100:100.jpeg?dr=14579&refresh_token=3144ab02&…",
"medium": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=04d5afb2&…",
"large": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=aba71a7…"
},
"privateAccount": false
}
],
"author": null,
"share": {
"title": "Brandon Lake | ♬ That's Who I Praise | on TikTok",
"description": "27.6k videos - Watch awesome short videos created with ♬ That's Who I Praise"
}
},
"videos": [
{
"id": "7390863141367811371",
"url": "https://www.tiktok.com/@brandonlakemusic/video/7390863141367811371",
"type": "video",
"description": "THAT’S WHO I PRAISE DROPS 7/29!! Pre-save in bio link!! ❤️🤠",
"createdAt": "2024-07-12T21:23:50.000Z",
"language": "en",
"stats": {
"playCount": 6700000,
"likeCount": 970300,
"commentCount": 5096,
"shareCount": 53900,
"collectCount": 117065,
"repostCount": 0
},
"author": {
"id": "6780744002670396422",
"secUid": "MS4wLjABAAAAzWDzMQFatDdIcWj_JHHuDZTbsFMeWLpVEzycWCFf6kCf_KL_mff7sVQovdlrWtEr",
"handle": "brandonlakemusic",
"nickname": "Brandon Lake",
"bio": "“Changing” | OCT 16\nPre-Save / Pre-Add now",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/1d1a7ad3bdc48667aa16c1bed12764bf~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=aba71a7…",
"verified": true,
"privateAccount": false,
"stats": {
"followerCount": 2800000,
"followingCount": 0,
"likeCount": 61600000,
"videoCount": 2354,
"friendCount": 0,
"diggCount": 186
}
},
"video": {
"duration": 36,
"width": 576,
"height": 1024,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 563968,
"quality": "normal",
"size": 2597709,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast5-p-0068-tx/oAjCpLHXBZjeqCIsuNdpA2kRDXIIQeftGznkIA~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-sig…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast5-p-0068-tx/4f326a528f0041219e0ac446b4c98a06_1720819432~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast5-p-0068-tx/05deeba957384eaa8df6aa4f5867df8f_1720819432~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c799-sg/ocAeHIvNkIjgEjpIp2ReCLnIiGohszQCkoftZA/?a=1988&bti=ODszNWYuMDE6&&bt=550&ft=-Csk_mIUPD…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c799-sg/oQW0ISED0WfDfhOQnmZREybEvCFkMRAk2xBlkg/?a=1988&bti=ODszNWYuMDE6&&bt=626&ft=-Csk_mIUPD…",
"volume": {
"loudness": -22.3,
"peak": 0.52481
},
"formats": [
{
"gearName": "normal_540_0",
"qualityType": 20,
"codec": "h264",
"format": "mp4",
"bitrate": 563968,
"fps": 23,
"width": 576,
"height": 1024,
"size": 2597709,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-37c799-sg/ocAeHIvNkIjgEjpIp2ReCLnIiGohszQCkoftZA/?a=1988&bti=ODszNWYuMDE6&&bt=550&ft=-Csk_mIUPD…"
}
],
"subtitles": []
},
"photo": null,
"music": {
"id": "7370375686554782506",
"title": "That's Who I Praise",
"url": "https://www.tiktok.com/music/That's-Who-I-Praise-7370375686554782506",
"authorName": "Brandon Lake",
"album": "That's Who I Praise",
"duration": 64,
"preciseDuration": null,
"shootDuration": 60,
"original": false,
"isCopyrighted": true,
"isCommerceMusic": false,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-sg.tiktokcdn.com/aweme/720x720/tos-alisg-v-2774/ocFryYgIESDClQQFafBpEmTdkAJBZtAAIHqFfR.jpeg",
"playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tos-alisg-ve-2774/ogifeGpqwKAjM2f1xG8IZDI09glmABLwaTFrAe",
"streaming": [
{
"service": "apple_music",
"serviceCode": 1,
"songId": "1757500327",
"url": "https://music.apple.com/song/1757500327"
}
]
},
"hashtags": [],
"mentions": [],
"effects": [
{
"id": "1359368",
"name": "Hazel Eyes"
}
],
"stickerTexts": [],
"location": null,
"contentCategory": {
"id": 101,
"name": "Entertainment & Culture"
},
"anchors": [],
"warnings": [],
"playlistId": "7398588014244793119",
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0,
"suggestedSearches": [
"brandon lake demonic concert"
]
}
],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 29,
"cursor": "30",
"hasMore": true,
"fetchedAt": "2026-10-05T14:46:13.128Z"
},
"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.
```
# Top search
Source: https://docs.scraperize.com/api-reference/tiktok/top-search
/api-reference/openapi.json get /v1/tiktok/search
TikTok’s **Top** search: returns the posts matching a keyword `query` in a `region` (default NG) — both videos and photo carousels, mixed in TikTok’s own order, about 12 per page. Each post has a `type` (`video` or `photo`) and comes with its description, created date, language, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. Videos include video details (duration, size, covers, play/download URLs, every rendition, subtitles); photo carousels include `photo` (title, cover and every image with its size). When TikTok shows accounts among the Top results, they are in `users` (handle, name, bio, avatar, verification, followers, total likes, LIVE status). `correctedQuery` is set when TikTok corrected the search text, and `servedRegion` is the region the results are for. Pass the returned `cursor` (with the same query and region) to get the next page; it is null on the last page.
**About the results:** TikTok matches loosely, so even an unusual query returns a few close matches. Results can shift slightly between identical searches. Filtering by post date and sorting are not available. Search isn’t available in every region (e.g. the United States); then the response is a 404 and another `region` may work. The first search in a region can take up to about a minute; later ones are much faster.
**Downloading video files:** TikTok only serves `video.playUrl`, `video.downloadUrl` and `video.formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied). Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Photo images, covers, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok’s download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/search. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/search
Description: TikTok’s **Top** search: returns the posts matching a keyword `query` in a `region` (default NG) — both videos and photo carousels, mixed in TikTok’s own order, about 12 per page. Each post has a `type` (`video` or `photo`) and comes with its description, created date, language, stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels, flags and related searches. Videos include video details (duration, size, covers, play/download URLs, every rendition, subtitles); photo carousels include `photo` (title, cover and every image with its size). When TikTok shows accounts among the Top results, they are in `users` (handle, name, bio, avatar, verification, followers, total likes, LIVE status). `correctedQuery` is set when TikTok corrected the search text, and `servedRegion` is the region the results are for. Pass the returned `cursor` (with the same query and region) to get the next page; it is null on the last page.
Required Headers:
- x-api-key: Your API key
Parameters:
- query (string) [required]: The keyword(s) to search for (1–100 characters).
- region (select): The region (country) to get results for, as a two-letter code (ISO 3166-1). Defaults to NG (Nigeria).
- cursor (string): The `cursor` from the previous response (same query and region), to get the next page. Omit for the first page.
- 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": {
"query": "outfit ideas",
"correctedQuery": null,
"region": "NG",
"regionName": "Nigeria",
"servedRegion": "NG",
"posts": [
{
"id": "7688982317183880469",
"url": "https://www.tiktok.com/@faithsphotography1/video/7688982317183880469",
"type": "video",
"description": "Book a session with me ✍️📸#prettygirlsoutfits #outfitinspo #creatorsearchinsights #fypシ゚viral #blowthisuptiktok @Faith @𝔸𝕄𝔼𝔼𝕊ℍ 𝔽𝕀ℝ𝕊𝕋 𝕊𝕆ℕ🧃 @ROCKET…",
"createdAt": "2026-09-24T06:18:30.000Z",
"language": "en",
"stats": {
"playCount": 11700,
"likeCount": 553,
"commentCount": 10,
"shareCount": 9,
"collectCount": 64,
"repostCount": 0
},
"author": {
"id": "6961148364013683717",
"secUid": "MS4wLjABAAAAnvEaD4BX7Q0lb-NhgZTHL-QoZ0W4-kX7gipXNzXX5welpmsffbQ2KBxtiqJ4SXcS",
"handle": "faithsphotography1",
"nickname": "Faith’s Photography 📸✍️",
"bio": "Dm for snapping & editing✍️\nDon’t spam pls 🥺🙏🏻\nJust like,follow and comment",
"avatarUrl": "https://p19-common-sign.tiktokcdn.com/tos-alisg-avt-0068/91764930d2dafecfb9036595c09e1ae8~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=13b0aac5…",
"verified": false,
"privateAccount": false,
"stats": {
"followerCount": 19100,
"followingCount": 1031,
"likeCount": 565600,
"videoCount": 1409,
"friendCount": 0,
"diggCount": 53500
}
},
"video": {
"duration": 12,
"width": 576,
"height": 1024,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 599893,
"quality": "lowest",
"size": 972352,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/okIt0vBEYThI2zlnXAbiSi1LINBaArA1BPASw~tplv-tiktokx-dmt-logom:tos-alisg-i-0068/owFIEAeCEFALFtAgQRKDcwk6Msg…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oEiptdEILvjVBgegKCLVAgdGA04meDMWeYaIIO~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/okCHifIggDAVtyaevAL4TeLI0tEVpIAdGCYjDO~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/ooQtfRBqmtpgCFkynaFDXgdEcRBfAWOIqIr3EM/?a=1988&bti=ODszNWYuMDE6&&bt=585&ft=I~da4onxD1…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/ogeqIacRkEtMO9DkBEgFRtYyQfgqqWEB3gCnpA/?a=1988&bti=ODszNWYuMDE6&&bt=1445&eid=20480&ft…",
"volume": {
"loudness": -18.7,
"peak": 0.5188
},
"formats": [
{
"gearName": "lowest_540_0",
"qualityType": 25,
"codec": "h264",
"format": null,
"bitrate": 599893,
"fps": null,
"width": 576,
"height": 1024,
"size": 972352,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/ooQtfRBqmtpgCFkynaFDXgdEcRBfAWOIqIr3EM/?a=1988&bti=ODszNWYuMDE6&&bt=585&ft=I~da4onxD1…"
}
],
"subtitles": []
},
"photo": null,
"music": {
"id": "7684687153628859156",
"title": "original sound",
"url": "https://www.tiktok.com/music/original-sound-7684687153628859156",
"authorName": "𝔸𝕄𝔼𝔼𝕊ℍ 𝔽𝕀ℝ𝕊𝕋 𝕊𝕆ℕ🧃",
"album": null,
"duration": 60,
"preciseDuration": null,
"shootDuration": null,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": false,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/a29fa4f88c32255a850390e2ca65d9dc~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=adfc8cf4…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-v-27dcd7/ooLyIAeVSEUjD4BAIJXvKTfCgDVeQuRAoa8AQG/?a=1988&bti=ODszNWYuMDE6&&bt=125&ft=GNDpcInz7ThUfO…",
"streaming": []
},
"hashtags": [
{
"id": "7236417005916848130",
"name": "prettygirlsoutfits",
"description": null
}
],
"mentions": [
{
"userId": "7433507813878219781",
"handle": "faith.famous36",
"secUid": "MS4wLjABAAAAmDIu68a8kPyBYaX1W8LhGw3FqNc4bVo8X6SUlp0N46WAswzj3lYERl733Dm0kpEQ"
}
],
"effects": [
{
"id": "564661779",
"name": "Nice Skin Tone 2.0"
}
],
"stickerTexts": [
"Pretty girls outfit \nBook a session with me\nOutfit inspo"
],
"location": null,
"contentCategory": {
"id": 109,
"name": "Outfits"
},
"anchors": [
{
"id": "0",
"type": 54,
"keyword": "CapCut · Try this template",
"description": "CapCut · Video Editor",
"url": "https://www.capcut.com/template-detail/7479190102518893877?channel=capcutpc_ttweb_anchor_template1¤t_page=capcutpc_ttweb_anchor_template1&download_channel…",
"iconUrl": "https://p16-common-sign.tiktokcdn.com/tiktok-obj/capcut_logo_64px_bk.png~tplv-tiktokx-origin.image?dr=14566&x-expires=1791230400&x-signature=CWfYyIFO1N%2FLSGJtr…"
}
],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0,
"suggestedSearches": []
}
],
"users": [],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 12,
"videoCount": 12,
"photoCount": 0,
"cursor": "12_20261005224555721E792591617ECA0D7A",
"hasMore": true,
"fetchedAt": "2026-10-05T14:45:58.852Z"
},
"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.
```
# Trending feed
Source: https://docs.scraperize.com/api-reference/tiktok/trending-feed
/api-reference/openapi.json get /v1/tiktok/get-trending-feed
Returns TikTok's trending feed (the Explore page) for a `region`: about 30 posts trending there right now, in TikTok's order. Each post comes with its description, created date, language, content category (`contentCategory`, e.g. Comedy, Food & Drink, Singing & Dancing), stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles), music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels and flags. `servedRegion` is the region the feed is for.
**About the feed:** each call returns a fresh batch of trending posts, so there is no cursor — call again for more. TikTok skips a few posts in some batches, so a batch can hold slightly fewer than 30. The first request for a region can take longer.
**Downloading video files:** TikTok only serves `video.playUrl`, `video.downloadUrl` and `video.formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied). Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Covers, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok's download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/get-trending-feed. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/get-trending-feed
Description: Returns TikTok's trending feed (the Explore page) for a `region`: about 30 posts trending there right now, in TikTok's order. Each post comes with its description, created date, language, content category (`contentCategory`, e.g. Comedy, Food & Drink, Singing & Dancing), stats (views, likes, comments, shares, saves, reposts — large view/like/comment/share counts are rounded; saves are exact), author (with stats, also rounded), video details (duration, size, covers, play/download URLs, every rendition, subtitles), music (with its TikTok sound page and Apple Music / Spotify links), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels and flags. `servedRegion` is the region the feed is for.
Required Headers:
- x-api-key: Your API key
Parameters:
- region (select) [required]: The region (country) to get results for, as a two-letter code (ISO 3166-1).
- 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": {
"region": "NG",
"regionName": "Nigeria",
"servedRegion": "NG",
"videos": [
{
"id": "7690672413872344340",
"url": "https://www.tiktok.com/@okotorigba_/video/7690672413872344340",
"type": "video",
"description": "my fans, make una use this one hold body. Son of God never chop since morning. #nigeriantiktok🇳🇬 #voiceover #okotorigba #animation #funny",
"createdAt": "2026-09-28T19:37:00.000Z",
"language": "en",
"stats": {
"playCount": 781200,
"likeCount": 144000,
"commentCount": 4698,
"shareCount": 58700,
"collectCount": 8827,
"repostCount": 0
},
"author": {
"id": "7259144692062209030",
"secUid": "MS4wLjABAAAAIHoPiDpIW_Hd51g5IQIrkvpo26eBGva_LB64M1xtmb8vL7hjos7I9kKtOQc_3eG2",
"handle": "okotorigba_",
"nickname": "okotorigba!!",
"bio": "🎭 We turn Nigerian stories into funny unfiltered animation.\nFACE REVEAL AT 100K!!!\n📧 bookings: okotorigba1@gmail.com\n2nd @Okotorigba&3rd @okotorigba!!!",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/e9edb9362072111a65059f9db3f745d6~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=6adcdea3…",
"verified": false,
"privateAccount": false,
"stats": {
"followerCount": 81300,
"followingCount": 11,
"likeCount": 5200000,
"videoCount": 228,
"friendCount": 0,
"diggCount": 28200
}
},
"video": {
"duration": 40,
"width": 576,
"height": 1024,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 292448,
"quality": "lowest",
"size": 1476976,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/ocBi4EJBi6A4at2EgFvtTBBAbYEIrrmw5VMdo~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signature…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oQQE1FqysB6nBRDDQf1JbUBgEygJauxCMtGARe~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oA5oYaViav8EaBEmjgBdAAIT64rBIArqBwit7~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signature…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/oUfq6MRVEJDuR1KEggFGCQ0eBaCJIgBxsngUyA/?a=1988&bti=ODszNWYuMDE6&&bt=285&ft=-Csk_mIUPD…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/oorDBVqLIiA6m2EtAwBihAgEEQawYHTBvo5r4/?a=1988&bti=ODszNWYuMDE6&&bt=633&eid=20480&ft=-…",
"volume": {
"loudness": -21,
"peak": 0.50119
},
"formats": [
{
"gearName": "adapt_lower_720_1",
"qualityType": 14,
"codec": "h265_hvc1",
"format": "mp4",
"bitrate": 370843,
"fps": 30,
"width": 720,
"height": 1280,
"size": 1872901,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/osykoQErYmAUBEArBW6VIEKtBNv1TgiY54Bia/?a=1988&bti=ODszNWYuMDE6&&bt=362&ft=-Csk_mIUPD1…"
}
],
"subtitles": []
},
"photo": null,
"music": {
"id": "7690672464753412885",
"title": "original sound",
"url": "https://www.tiktok.com/music/original-sound-7690672464753412885",
"authorName": "okotorigba!!",
"album": null,
"duration": 40,
"preciseDuration": null,
"shootDuration": 40,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": true,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/e9edb9362072111a65059f9db3f745d6~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=6adcdea3…",
"playUrl": "https://v16m.tiktokcdn.com/3b6b0cf381b145897fc39facac005d5a/6ac509e9/video/tos/alisg/tos-alisg-v-27dcd7/o8xprvBh6sGAi6CABEAAaldCUsAEY35BiwK8r/?a=1180&bti=ODszNW…",
"streaming": []
},
"hashtags": [
{
"id": "1668565400911878",
"name": "nigeriantiktok🇳🇬",
"description": null
}
],
"mentions": [],
"effects": [
{
"id": "2559285780",
"name": "smootnes"
}
],
"stickerTexts": [],
"location": null,
"contentCategory": {
"id": 100,
"name": "Anime & Comics"
},
"anchors": [],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0,
"suggestedSearches": []
}
],
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"count": 26,
"fetchedAt": "2026-10-05T14:46:27.327Z"
},
"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.
```
# Video
Source: https://docs.scraperize.com/api-reference/tiktok/video
/api-reference/openapi.json get /v1/tiktok/video
Scrapes a single public TikTok video (or photo post) by URL (`tiktok.com/@user/video/`). Returns the description, created date, language, the country it was posted from, TikTok’s content categories and related searches, stats (views, likes, comments, shares, saves, reposts — TikTok rounds large view/like/comment/share counts; saves are exact), the author (bio, avatar, created date, verified/private/seller flags, stats, interaction settings), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links when TikTok matches the sound to a song), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels and flags.
**Downloading the video file:** TikTok only serves `video.video.playUrl`, `downloadUrl` and `formats[].url` to requests that send the `Cookie` and `Referer` headers returned in `mediaHeaders` (without them: 403 Access Denied), so these links do not open when pasted into a browser. Send both headers from your code, e.g. `curl -H "Cookie: " -H "Referer: " "" -o video.mp4`. Covers, photo-post images, music and subtitles need no headers. Media URLs expire within hours.
**Watermarks:** `playUrl` and every `formats[].url` are watermark-free; `downloadUrl` is TikTok’s download copy with the TikTok logo and @username burned in.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/video. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/video
Description: Scrapes a single public TikTok video (or photo post) by URL (`tiktok.com/@user/video/`). Returns the description, created date, language, the country it was posted from, TikTok’s content categories and related searches, stats (views, likes, comments, shares, saves, reposts — TikTok rounds large view/like/comment/share counts; saves are exact), the author (bio, avatar, created date, verified/private/seller flags, stats, interaction settings), video details (duration, size, covers, play/download URLs, every rendition, subtitles) or photo-post images, music (with its TikTok sound page and Apple Music / Spotify links when TikTok matches the sound to a song), hashtags, mentions, tagged place, effects, stickers, link anchors, AI-generated labels and flags.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The TikTok video URL, e.g. https://www.tiktok.com/@user/video/7689399654345182471 (a photo post’s /photo/ link works too).
- 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": {
"video": {
"id": "7689399654345182471",
"url": "https://www.tiktok.com/@brainjotter/video/7689399654345182471",
"type": "video",
"description": "Tag that friend woth 1% social battery",
"createdAt": "2026-09-25T09:18:00.000Z",
"language": "en",
"stats": {
"playCount": 350300,
"likeCount": 75100,
"commentCount": 821,
"shareCount": 1474,
"collectCount": 3609,
"repostCount": 0
},
"author": {
"id": "6810285179828945926",
"secUid": "MS4wLjABAAAA1E4wyGvJvdI8bl-5URa446ywZys3NQzvXvLB64kmRgwSjkn9E-wd2LGuKReZXXxm",
"handle": "brainjotter",
"nickname": "SUPREME GREEN👑",
"bio": "Promocode : JOTTERS TO GET 300% b0nus",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/dbac796bf5becb428bf361070bddc211~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=84aabd4…",
"verified": true,
"privateAccount": false,
"stats": {
"followerCount": 12100000,
"followingCount": 5144,
"likeCount": 159200000,
"videoCount": 611,
"friendCount": 0,
"diggCount": 905
},
"createdAt": "2020-04-03T03:39:51.000Z",
"liveRoomId": null,
"ttSeller": false,
"settings": {
"comment": 0,
"duet": 0,
"stitch": 0,
"download": 0
}
},
"video": {
"duration": 109,
"width": 576,
"height": 1024,
"definition": "540p",
"format": "mp4",
"codec": "h264",
"bitrate": 305033,
"quality": "lowest",
"size": 4170004,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oA78PbVNBPIiai2EYIYAuoIG2IWBTzCArsBFP~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signature…",
"originCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/ogbjMQA2BdVDwfIKACYeRoX6AbB9eD8HbKAbhB~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signatur…",
"dynamicCoverUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oIANAIPjAiIF6Tb2IaBoYVP8XE7rAY2yBiCIG~tplv-tiktokx-origin.image?dr=14575&x-expires=1791381600&x-signature…",
"playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/oQQ8Rgoj6ItHuLGYDPALIbMfgeebVBICgAhtYA/?a=1988&bti=ODszNWYuMDE6&&bt=297&ft=I~da4onxD1…",
"downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/ogVwoeYuBCIgHALjtDYRgVTAkbIbA0ebTheGIg/?a=1988&bti=ODszNWYuMDE6&&bt=688&eid=20480&ft=…",
"volume": {
"loudness": -18,
"peak": 0.54954
},
"formats": [
{
"gearName": "adapt_lowest_1080_1",
"qualityType": 2,
"codec": "h265_hvc1",
"format": "mp4",
"bitrate": 607083,
"fps": 25,
"width": 1080,
"height": 1920,
"size": 8299285,
"url": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-pve-0037c001/oIwHCEri98BIIo7ibaQ6Ap2GPwA2iEVYaIYPB/?a=1988&bti=ODszNWYuMDE6&&bt=592&ft=I~da4onxD12…"
}
],
"subtitles": [
{
"language": "eng-US",
"languageCode": "en",
"format": "webvtt",
"isAutoGenerated": true,
"url": "https://v16-webapp.tiktok.com/f1f2f9e68ce9cf013eb1f16124fc05af/6ac65b3e/video/tos/alisg/tos-alisg-pv-0037/3d1330d4d4df4b9ebb2b39fc95f07bce/?a=1988&bti=ODszNWYuM…",
"expiresAt": "2026-10-07T14:46:22.000Z"
}
]
},
"photo": null,
"music": {
"id": "7689399747121515272",
"title": "original sound",
"url": "https://www.tiktok.com/music/original-sound-7689399747121515272",
"authorName": "SUPREME GREEN👑",
"album": null,
"duration": 109,
"preciseDuration": 109.40081,
"shootDuration": 109,
"original": true,
"isCopyrighted": false,
"isCommerceMusic": true,
"isUnlimitedMusic": false,
"isPrivate": false,
"coverUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/dbac796bf5becb428bf361070bddc211~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=14579&refresh_token=84aabd4…",
"playUrl": "https://v16m.tiktokcdn.com/7a06db407e731d8dcdaf14d229edc99a/6ac509be/video/tos/alisg/tos-alisg-v-27dcd7/okC2IYQiABFUbAaEAAVSqE78vPilC6lVAbrZY/?a=1233&bti=ODszNW…",
"streaming": []
},
"hashtags": [],
"mentions": [],
"effects": [],
"stickerTexts": [],
"location": null,
"contentCategory": {
"id": 104,
"name": "Comedy"
},
"anchors": [],
"warnings": [],
"playlistId": null,
"isAd": false,
"isPinned": false,
"isPrivate": false,
"isCommerce": false,
"aigcDescription": null,
"aigcLabelType": null,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"canRepost": true,
"commentStatus": 0,
"region": "BR",
"regionName": "Brazil",
"categories": [
"Scripted Comedy"
],
"suggestedSearches": [
"brainjotter"
],
"isAigc": false
},
"mediaHeaders": {
"Cookie": "tt_chain_token=",
"Referer": "https://www.tiktok.com/"
},
"fetchedAt": "2026-10-05T14:44:34.839Z"
},
"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.
```
# Video comments
Source: https://docs.scraperize.com/api-reference/tiktok/video-comments
/api-reference/openapi.json get /v1/tiktok/video/comments
Scrapes the top-level comments on a public TikTok video (or photo post) by URL (`tiktok.com/@user/video/`), about 40 per page in TikTok’s own (relevance) order. Each comment comes with its id, text, created date, detected language, like count, reply count, author (id, secUid, username, nickname, avatar, profile link), whether the creator liked or pinned it, TikTok’s labels (e.g. “Liked by creator”), photo attachments (original + crop, every mirror URL), the sticker (static and animated, at high / mid / low resolution), emoji tokens, the share info (a deep link to the comment, title, description, share permissions), translatable / photo-download flags, its parent and reply-to ids, and the top reply TikTok previews under it. Pass the returned `cursor` to get the next page; it is null on the last page. TikTok re-ranks comments between requests, so a comment can occasionally move across a page boundary. @mentions inside comments appear as plain text.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/video/comments. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/video/comments
Description: Scrapes the top-level comments on a public TikTok video (or photo post) by URL (`tiktok.com/@user/video/`), about 40 per page in TikTok’s own (relevance) order. Each comment comes with its id, text, created date, detected language, like count, reply count, author (id, secUid, username, nickname, avatar, profile link), whether the creator liked or pinned it, TikTok’s labels (e.g. “Liked by creator”), photo attachments (original + crop, every mirror URL), the sticker (static and animated, at high / mid / low resolution), emoji tokens, the share info (a deep link to the comment, title, description, share permissions), translatable / photo-download flags, its parent and reply-to ids, and the top reply TikTok previews under it. Pass the returned `cursor` to get the next page; it is null on the last page. TikTok re-ranks comments between requests, so a comment can occasionally move across a page boundary. @mentions inside comments appear as plain text.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The TikTok video URL, e.g. https://www.tiktok.com/@user/video/7683891628230315295.
- cursor (string): The `cursor` from the previous response, to get the next page. Omit for the first page.
- 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": {
"video": {
"id": "7683891628230315295",
"url": "https://www.tiktok.com/@natgeo/video/7683891628230315295",
"handle": "natgeo"
},
"comments": [
{
"id": "7693157583478637364",
"videoId": "7683891628230315295",
"parentId": null,
"replyToId": null,
"text": "Mam Africa",
"createdAt": "2026-10-05T12:20:45.000Z",
"language": "en",
"likeCount": 0,
"author": {
"id": "7334262547589268485",
"secUid": "MS4wLjABAAAAiUlmgtBZ_qAXYaaYFnpo-nJSA63KoabLC2SU3PHumW4hdy8pEG0GOVVLyiQ5nfrH",
"handle": "948135lntd",
"nickname": "👑Elle🫶🏻 lily👑",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/32f51a036d96fc1ee5ac94dd0f6e81ca~tplv-tiktokx-cropcenter:100:100.jpg?dr=14579&refresh_token=a74c53af&x-…",
"url": "https://www.tiktok.com/@948135lntd"
},
"isLikedByCreator": false,
"labels": [],
"images": [],
"sticker": null,
"emojis": [],
"isTranslatable": true,
"shareInfo": {
"url": "https://m.tiktok.com/v/7683891628230315295.html?_d=f6004hkm87m931&comment_author_id=7334262547589268485&preview_pb=0&share_comment_id=7693157583478637364&share_…",
"title": "Presented by @ROLEX. Welcome to Africa 🌍 Africa Earth's Wild Home takes you deep into the heart of our wildest continent, bringing you closer to its animals, l…",
"description": "👑Elle🫶🏻 lily👑’s comment: Mam Africa",
"acl": {
"code": 0,
"addToStoryCode": 0
}
},
"replyCount": 0,
"isPinnedByCreator": false,
"allowsPhotoDownload": true,
"topReply": null
}
],
"count": 42,
"total": 314,
"cursor": "50",
"hasMore": true,
"fetchedAt": "2026-10-05T14:44:51.004Z"
},
"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.
```
# Video transcript
Source: https://docs.scraperize.com/api-reference/tiktok/video-transcript
/api-reference/openapi.json get /v1/tiktok/video/transcript
Scrapes the transcripts of a public TikTok video by URL (`tiktok.com/@user/video/`) — every caption track TikTok lists for it: the original spoken language plus any machine translations (e.g. a Spanish video with an English translation). Each transcript comes as plain text, timed segments (start/end seconds) and the raw caption file exactly as TikTok serves it (WebVTT), with its language and whether it is the original, auto-generated (speech recognition) or a machine translation. The original-language transcript is also returned at the top level (`transcript`, `language`). `transcript` is null and `transcripts` empty when the video has no captions (e.g. no speech, captions turned off, or a photo post). For the rest of the video’s data use `/v1/tiktok/video`.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/tiktok/video/transcript. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/tiktok/video/transcript
Description: Scrapes the transcripts of a public TikTok video by URL (`tiktok.com/@user/video/`) — every caption track TikTok lists for it: the original spoken language plus any machine translations (e.g. a Spanish video with an English translation). Each transcript comes as plain text, timed segments (start/end seconds) and the raw caption file exactly as TikTok serves it (WebVTT), with its language and whether it is the original, auto-generated (speech recognition) or a machine translation. The original-language transcript is also returned at the top level (`transcript`, `language`). `transcript` is null and `transcripts` empty when the video has no captions (e.g. no speech, captions turned off, or a photo post). For the rest of the video’s data use `/v1/tiktok/video`.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The TikTok video URL, e.g. https://www.tiktok.com/@user/video/7683891628230315295.
- 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": {
"video": {
"id": "7683891628230315295",
"url": "https://www.tiktok.com/@natgeo/video/7683891628230315295",
"handle": "natgeo"
},
"transcript": "Welcome to Africa. Welcome to Earth's wild home. See a new side to animals you know and meet some you've never seen before. This is the definitive look at the w…",
"language": "eng-US",
"languageCode": "en",
"transcripts": [
{
"language": "eng-US",
"languageCode": "en",
"isOriginal": true,
"isAutoGenerated": true,
"isMachineTranslation": false,
"text": "Welcome to Africa. Welcome to Earth's wild home. See a new side to animals you know and meet some you've never seen before. This is the definitive look at the w…",
"segments": [
{
"start": 3.22,
"end": 4.32,
"text": "Welcome"
}
],
"format": "webvtt",
"raw": "WEBVTT\n\n\n00:00:03.220 --> 00:00:04.320\nWelcome\n\n00:00:06.060 --> 00:00:07.600\nto Africa.\n\n00:00:08.300 --> 00:00:09.400\nWelcome\n\n00:00:12.700 --> 00:00:15.480\nt…"
}
],
"fetchedAt": "2026-10-05T14:44:42.569Z"
},
"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.
```
# Post
Source: https://docs.scraperize.com/api-reference/truth-social/post
/api-reference/openapi.json get /v1/truthsocial/post
Fetches a public Truth Social post ("Truth") by its URL: id, link, text, date, edit date, language, author (with follower count), reply, ReTruth and like counts, images, videos and GIFs (file, preview, size, duration, alt text), the link preview card, poll, mentions, hashtags and links, the quoted post, and sensitive / spoiler / sponsored flags — plus, when it is a reply, the post it replies to (`replyTo`). A ReTruth link returns the original post with `repostedBy`. Comments are not available without an account. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/truthsocial/post. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/truthsocial/post
Description: Fetches a public Truth Social post ("Truth") by its URL: id, link, text, date, edit date, language, author (with follower count), reply, ReTruth and like counts, images, videos and GIFs (file, preview, size, duration, alt text), the link preview card, poll, mentions, hashtags and links, the quoted post, and sensitive / spoiler / sponsored flags — plus, when it is a reply, the post it replies to (`replyTo`). A ReTruth link returns the original post with `repostedBy`. Comments are not available without an account. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The post URL, e.g. `https://truthsocial.com/@realDonaldTrump/posts/117471498052081961` (the `truthsocial.com/@user/` form also works).
- 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": {
"post": {
"id": "117471498052081961",
"url": "https://truthsocial.com/@realDonaldTrump/posts/117471498052081961",
"text": null,
"createdAt": "2026-10-20T05:06:49.635Z",
"editedAt": null,
"language": null,
"author": {
"id": "107780257626128497",
"handle": "realDonaldTrump",
"displayName": "Donald J. Trump",
"url": "https://truthsocial.com/@realDonaldTrump",
"avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg",
"isVerified": true,
"isPremium": true,
"followerCount": 13124452
},
"replyCount": 306,
"repostCount": 670,
"likeCount": 2287,
"media": [
{
"id": "117471495349125026",
"type": "image",
"url": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/495/349/125/026/original/ae6e35d7a56228d3.jpg",
"previewUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/495/349/125/026/small/ae6e35d7a56228d3.jpg",
"width": 1241,
"height": 828,
"durationSeconds": null,
"altText": null
}
],
"card": null,
"poll": null,
"mentions": [
{
"id": "107780257626128497",
"handle": "realDonaldTrump",
"url": "https://truthsocial.com/@realDonaldTrump"
}
],
"hashtags": [],
"links": [],
"quotedPost": {
"id": "117471474650381574",
"url": "https://truthsocial.com/@realDonaldTrump/posts/117471474650381574",
"text": "Here are pictures of Trash Island for the Judge to study. This is just a small area, and better than some! President DONALD J. TRUMP",
"createdAt": "2026-10-20T05:00:52.553Z",
"editedAt": null,
"language": "en",
"author": {
"id": "107780257626128497",
"handle": "realDonaldTrump",
"displayName": "Donald J. Trump",
"url": "https://truthsocial.com/@realDonaldTrump",
"avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg",
"isVerified": true,
"isPremium": true,
"followerCount": 13124452
},
"replyCount": 105,
"repostCount": 579,
"likeCount": 2040,
"media": [
{
"id": "117471473460790499",
"type": "image",
"url": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/473/460/790/499/original/7f682840d161a8c8.jpg",
"previewUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/473/460/790/499/small/7f682840d161a8c8.jpg",
"width": 1009,
"height": 728,
"durationSeconds": null,
"altText": null
}
],
"card": null,
"poll": null,
"mentions": [
{
"id": "107780257626128497",
"handle": "realDonaldTrump",
"url": "https://truthsocial.com/@realDonaldTrump"
}
],
"hashtags": [],
"links": [],
"quotedPost": null,
"isReply": false,
"inReplyToPostId": null,
"inReplyToAccountId": null,
"isPinned": false,
"isSensitive": false,
"spoilerText": null,
"visibility": "public",
"isSponsored": false,
"repostedBy": null,
"repostedAt": null
},
"isReply": false,
"inReplyToPostId": null,
"inReplyToAccountId": null,
"isPinned": false,
"isSensitive": false,
"spoilerText": null,
"visibility": "public",
"isSponsored": false,
"repostedBy": null,
"repostedAt": null
},
"replyTo": null,
"fetchedAt": "2026-10-20T10:07:27.151Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/truth-social/profile
/api-reference/openapi.json get /v1/truthsocial/profile
Fetches a public Truth Social profile by username: id, display name, bio (as text, with the accounts it mentions and its links), profile picture and header image, website, location, follower, following and post counts, join date, last post date, and verified, premium, private, bot, group and messages flags. Posts are not included. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/truthsocial/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/truthsocial/profile
Description: Fetches a public Truth Social profile by username: id, display name, bio (as text, with the accounts it mentions and its links), profile picture and header image, website, location, follower, following and post counts, join date, last post date, and verified, premium, private, bot, group and messages flags. Posts are not included. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Truth Social username, e.g. `realDonaldTrump` (an `@handle` or `truthsocial.com/@...` URL also works).
- 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": {
"profile": {
"id": "107780257626128497",
"handle": "realDonaldTrump",
"displayName": "Donald J. Trump",
"url": "https://truthsocial.com/@realDonaldTrump",
"bio": null,
"bioMentions": [],
"bioLinks": [],
"avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg",
"headerUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/headers/107/780/257/626/128/497/original/ba3b910ba387bf4e.jpeg",
"website": "www.DonaldJTrump.com",
"websiteUrl": "https://www.DonaldJTrump.com",
"location": null,
"isVerified": true,
"isPremium": true,
"isPrivate": false,
"isBot": false,
"isGroup": false,
"isTvAccount": false,
"isDiscoverable": null,
"acceptsMessages": false,
"followerCount": 13124452,
"followingCount": 69,
"postCount": 37354,
"createdAt": "2022-02-11T16:16:57.705Z",
"lastPostDate": "2026-10-20",
"emojis": []
},
"fetchedAt": "2026-10-20T10:07:25.105Z"
},
"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.
```
# User posts
Source: https://docs.scraperize.com/api-reference/truth-social/user-posts
/api-reference/openapi.json get /v1/truthsocial/user/posts
Fetches a public Truth Social account's posts ("Truths") by username or user id — newest first, 20 per page with a `cursor` for the next: its own posts, quotes and ReTruths (returned as the original post with `repostedBy`). Each post has its id, link, text, date, edit date, language, author, reply, ReTruth and like counts, images, videos and GIFs (file, preview, size, duration, alt text), the link preview card, poll, mentions, hashtags and links, the quoted post, reply info, and sensitive / spoiler / sponsored flags. Also returns the account. Replies are not included. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/truthsocial/user/posts. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/truthsocial/user/posts
Description: Fetches a public Truth Social account's posts ("Truths") by username or user id — newest first, 20 per page with a `cursor` for the next: its own posts, quotes and ReTruths (returned as the original post with `repostedBy`). Each post has its id, link, text, date, edit date, language, author, reply, ReTruth and like counts, images, videos and GIFs (file, preview, size, duration, alt text), the link preview card, poll, mentions, hashtags and links, the quoted post, reply info, and sensitive / spoiler / sponsored flags. Also returns the account. Replies are not included. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string): The Truth Social username, e.g. `realDonaldTrump` (an `@handle` or `truthsocial.com/@...` URL also works). Required unless `userId` is given.
- userId (string): The account's numeric id (the profile's `id`), e.g. `107780257626128497`. Required unless `handle` is given; used when both are.
- cursor (string): The `cursor` from the previous page, to get the next one.
- 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": "107780257626128497",
"handle": "realDonaldTrump",
"displayName": "Donald J. Trump",
"url": "https://truthsocial.com/@realDonaldTrump",
"bio": null,
"bioMentions": [],
"bioLinks": [],
"avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg",
"headerUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/headers/107/780/257/626/128/497/original/ba3b910ba387bf4e.jpeg",
"website": "www.DonaldJTrump.com",
"websiteUrl": "https://www.DonaldJTrump.com",
"location": null,
"isVerified": true,
"isPremium": true,
"isPrivate": false,
"isBot": false,
"isGroup": false,
"isTvAccount": false,
"isDiscoverable": null,
"acceptsMessages": false,
"followerCount": 13124452,
"followingCount": 69,
"postCount": 37354,
"createdAt": "2022-02-11T16:16:57.705Z",
"lastPostDate": "2026-10-20",
"emojis": []
},
"posts": [
{
"id": "117471498052081961",
"url": "https://truthsocial.com/@realDonaldTrump/posts/117471498052081961",
"text": null,
"createdAt": "2026-10-20T05:06:49.635Z",
"editedAt": null,
"language": null,
"author": {
"id": "107780257626128497",
"handle": "realDonaldTrump",
"displayName": "Donald J. Trump",
"url": "https://truthsocial.com/@realDonaldTrump",
"avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg",
"isVerified": true,
"isPremium": true,
"followerCount": 13124452
},
"replyCount": 306,
"repostCount": 670,
"likeCount": 2287,
"media": [
{
"id": "117471495349125026",
"type": "image",
"url": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/495/349/125/026/original/ae6e35d7a56228d3.jpg",
"previewUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/495/349/125/026/small/ae6e35d7a56228d3.jpg",
"width": 1241,
"height": 828,
"durationSeconds": null,
"altText": null
}
],
"card": null,
"poll": null,
"mentions": [
{
"id": "107780257626128497",
"handle": "realDonaldTrump",
"url": "https://truthsocial.com/@realDonaldTrump"
}
],
"hashtags": [],
"links": [],
"quotedPost": {
"id": "117471474650381574",
"url": "https://truthsocial.com/@realDonaldTrump/posts/117471474650381574",
"text": "Here are pictures of Trash Island for the Judge to study. This is just a small area, and better than some! President DONALD J. TRUMP",
"createdAt": "2026-10-20T05:00:52.553Z",
"editedAt": null,
"language": "en",
"author": {
"id": "107780257626128497",
"handle": "realDonaldTrump",
"displayName": "Donald J. Trump",
"url": "https://truthsocial.com/@realDonaldTrump",
"avatarUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/accounts/avatars/107/780/257/626/128/497/original/454286ac07a6f6e6.jpeg",
"isVerified": true,
"isPremium": true,
"followerCount": 13124452
},
"replyCount": 105,
"repostCount": 579,
"likeCount": 2040,
"media": [
{
"id": "117471473460790499",
"type": "image",
"url": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/473/460/790/499/original/7f682840d161a8c8.jpg",
"previewUrl": "https://static-assets-1.truthsocial.com/tmtg:prime-ts-assets/media_attachments/files/117/471/473/460/790/499/small/7f682840d161a8c8.jpg",
"width": 1009,
"height": 728,
"durationSeconds": null,
"altText": null
}
],
"card": null,
"poll": null,
"mentions": [
{
"id": "107780257626128497",
"handle": "realDonaldTrump",
"url": "https://truthsocial.com/@realDonaldTrump"
}
],
"hashtags": [],
"links": [],
"quotedPost": null,
"isReply": false,
"inReplyToPostId": null,
"inReplyToAccountId": null,
"isPinned": false,
"isSensitive": false,
"spoilerText": null,
"visibility": "public",
"isSponsored": false,
"repostedBy": null,
"repostedAt": null
},
"isReply": false,
"inReplyToPostId": null,
"inReplyToAccountId": null,
"isPinned": false,
"isSensitive": false,
"spoilerText": null,
"visibility": "public",
"isSponsored": false,
"repostedBy": null,
"repostedAt": null
}
],
"count": 20,
"cursor": "117471361607280244",
"hasMore": true,
"fetchedAt": "2026-10-20T10:07:26.203Z"
},
"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.
```
# Channel videos
Source: https://docs.scraperize.com/api-reference/twitch/channel-videos
/api-reference/openapi.json get /v1/twitch/user/videos
Fetches a Twitch channel's public videos by username and returns them as clean JSON — each video with its id, url, title, type, duration, view count, published date, game, and thumbnail (still + animated). Optionally filter by video type and sort by newest or most-viewed. Returns up to 100 videos in one call; `hasMore` tells you when the channel has still more. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitch/user/videos. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitch/user/videos
Description: Fetches a Twitch channel's public videos by username and returns them as clean JSON — each video with its id, url, title, type, duration, view count, published date, game, and thumbnail (still + animated). Optionally filter by video type and sort by newest or most-viewed. Returns up to 100 videos in one call; `hasMore` tells you when the channel has still more. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Twitch username (channel handle), e.g. `ishowspeed`.
- filterBy (select): Restrict to a video type: `ARCHIVE` (past broadcasts), `HIGHLIGHT`, or `UPLOAD`. Omit for all types.
- sortBy (select): Sort order: `TIME` (newest first, default) or `VIEWS` (most viewed).
- 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": {
"channel": {
"handle": "ishowspeed",
"url": "https://www.twitch.tv/ishowspeed"
},
"videos": [
{
"id": "2891015835",
"url": "https://www.twitch.tv/videos/2891015835",
"title": "Highlight: RONALDO RETIRED??? + SPEED VS EKITIKE 🇫🇷⚽️",
"type": "HIGHLIGHT",
"durationSeconds": 4267,
"viewCount": 2064,
"publishedAt": "2026-10-03T19:16:15Z",
"game": {
"id": "509658",
"name": "Just Chatting",
"slug": "just-chatting",
"boxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/509658-144x192.jpg"
},
"thumbnailUrl": "https://static-cdn.jtvnw.net/cf_vods/d2vi6trrdongqn/e3eb4c976dfe1c972c78_ishowspeed_52655563137_4873771784//thumb/thumb2891015835-320x180.jpg",
"animatedThumbnailUrl": "https://d2vi6trrdongqn.cloudfront.net/e3eb4c976dfe1c972c78_ishowspeed_52655563137_4873771784/storyboards/2891015835-strip-0.jpg"
}
],
"count": 49,
"hasMore": false,
"fetchedAt": "2026-10-05T14:46:46.285Z"
},
"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.
```
# Clip
Source: https://docs.scraperize.com/api-reference/twitch/clip
/api-reference/openapi.json get /v1/twitch/clip
Fetches a public Twitch clip by its URL and returns everything about it as clean JSON: title, view count, language, created date, duration, and where in the broadcast it was taken from; the broadcaster (with follower count) and the curator who clipped it; the game/category with box art; the source broadcast and VOD; and every video rendition (quality, frame rate, codec, bitrate, dimensions) with a ready-to-use, time-limited download URL (see `downloadExpiresAt`). Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitch/clip. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitch/clip
Description: Fetches a public Twitch clip by its URL and returns everything about it as clean JSON: title, view count, language, created date, duration, and where in the broadcast it was taken from; the broadcaster (with follower count) and the curator who clipped it; the game/category with box art; the source broadcast and VOD; and every video rendition (quality, frame rate, codec, bitrate, dimensions) with a ready-to-use, time-limited download URL (see `downloadExpiresAt`). Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: The Twitch clip URL, e.g. `https://www.twitch.tv/ishowspeed/clip/SavageCrazyBunnyPunchTrees-zmhBSGkmHAFb_nWi`. Also accepts a `clips.twitch.tv` link or a bare clip slug.
- 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": {
"clip": {
"id": "3428043031",
"slug": "SavageCrazyBunnyPunchTrees-zmhBSGkmHAFb_nWi",
"url": "https://www.twitch.tv/ishowspeed/clip/SavageCrazyBunnyPunchTrees-zmhBSGkmHAFb_nWi",
"embedUrl": "https://clips.twitch.tv/embed?clip=SavageCrazyBunnyPunchTrees-zmhBSGkmHAFb_nWi",
"title": "nick eh 30",
"viewCount": 14271,
"language": "EN",
"createdAt": "2026-09-21T21:40:51Z",
"durationSeconds": 30,
"videoOffsetSeconds": null,
"isFeatured": false,
"isPublished": true,
"hasCaptions": true,
"isCommentsEnabled": true,
"commentCount": 5,
"thumbnailUrl": "https://static-cdn.jtvnw.net/twitch-video-assets/twitch-vap-video-assets-prod-us-west-2/ed02fecf-0fc5-427b-ba49-43fcd7410dfa/landscape/thumb/thumb-0000000000-19…",
"broadcaster": {
"id": "220476955",
"login": "ishowspeed",
"displayName": "IShowSpeed",
"url": "https://www.twitch.tv/ishowspeed",
"profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/46a38d3a-a39c-4c43-ac12-c331b1c469c2-profile_image-150x150.png",
"primaryColorHex": "FF4747",
"isPartner": true,
"followerCount": 6223177
},
"curator": {
"id": "559630290",
"login": "iferdx21",
"displayName": "iferdx21",
"url": "https://www.twitch.tv/iferdx21",
"profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/1761f18d-598a-40d8-ae86-ce01ad507409-profile_image-150x150.png"
},
"game": {
"id": "33214",
"name": "Fortnite",
"slug": "fortnite",
"boxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/33214-144x192.jpg"
},
"broadcast": {
"id": "320423010140",
"title": null
},
"sourceVideo": null,
"videoQualities": [
{
"quality": "1080",
"frameRate": 60,
"bitrate": null,
"codecs": null,
"videoCodec": null,
"width": null,
"height": null,
"sourceUrl": "https://d1ndex63qxojbr.cloudfront.net/nauth/ed02fecf-0fc5-427b-ba49-43fcd7410dfa/landscape/h264/1080/index.mp4",
"downloadUrl": "https://d1ndex63qxojbr.cloudfront.net/nauth/ed02fecf-0fc5-427b-ba49-43fcd7410dfa/landscape/h264/1080/index.mp4?sig=8808ae981d7a1925695b9170aab1f3061f74a511&toke…"
}
],
"assets": [
{
"id": "ed02fecf-0fc5-427b-ba49-43fcd7410dfa/LANDSCAPE",
"aspectRatio": 1.7777777777777777,
"createdAt": "2026-09-21T21:40:51.479066948Z",
"thumbnailUrl": "https://static-cdn.jtvnw.net/twitch-video-assets/twitch-vap-video-assets-prod-us-west-2/ed02fecf-0fc5-427b-ba49-43fcd7410dfa/landscape/thumb/thumb-0000000000-19…",
"videoQualities": [
{
"quality": "1080",
"frameRate": 60,
"bitrate": 2229058,
"codecs": "hvc1.1.6.L123.90",
"videoCodec": "HEVC",
"width": 1920,
"height": 1080,
"sourceUrl": "https://d1ndex63qxojbr.cloudfront.net/nauth/ed02fecf-0fc5-427b-ba49-43fcd7410dfa/landscape/hevc/source/index.mp4",
"downloadUrl": "https://d1ndex63qxojbr.cloudfront.net/nauth/ed02fecf-0fc5-427b-ba49-43fcd7410dfa/landscape/hevc/source/index.mp4?sig=8808ae981d7a1925695b9170aab1f3061f74a511&to…"
}
]
}
],
"downloadExpiresAt": "2026-10-06T10:46:48.000Z"
},
"fetchedAt": "2026-10-05T14:46:48.242Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/twitch/profile
/api-reference/openapi.json get /v1/twitch/profile
Fetches a public Twitch channel by username and returns it as clean JSON: id, handle, display name, description, created date, avatar and banner images, accent colour, partner/affiliate/staff flags, follower count, linked social media, whether the channel is live now (with the current stream — title, viewers, game, preview, tags — when it is), the most recent broadcast, and the first page of the channel's videos (newest first — id, title, type, duration, views, game, thumbnail). Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitch/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitch/profile
Description: Fetches a public Twitch channel by username and returns it as clean JSON: id, handle, display name, description, created date, avatar and banner images, accent colour, partner/affiliate/staff flags, follower count, linked social media, whether the channel is live now (with the current stream — title, viewers, game, preview, tags — when it is), the most recent broadcast, and the first page of the channel's videos (newest first — id, title, type, duration, views, game, thumbnail). Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Twitch username (channel handle), e.g. `ishowspeed`.
- 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": {
"profile": {
"id": "220476955",
"handle": "ishowspeed",
"displayName": "IShowSpeed",
"url": "https://www.twitch.tv/ishowspeed",
"description": "YouTube:IShowSpeed Instagram:IShowSpeed: Snapchat:wishowspeed Twitter: ishowspeedsui I luv y’all🐐💕",
"createdAt": "2018-05-10T04:36:13.160074Z",
"profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/46a38d3a-a39c-4c43-ac12-c331b1c469c2-profile_image-300x300.png",
"bannerImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/983dc814-a78c-4e5a-9d22-e6e7595c76e1-profile_banner-480.png",
"primaryColorHex": "FF4747",
"isPartner": true,
"isAffiliate": false,
"isStaff": null,
"isGlobalMod": null,
"followerCount": 6223177,
"socialLinks": [],
"isLive": false,
"stream": null,
"lastBroadcast": {
"id": "320496447582",
"title": "RONALDO RETIRED??? + SPEED VS EKITIKE 🇫🇷⚽️",
"startedAt": "2026-10-03T20:17:20.814804Z",
"game": {
"id": "509658",
"name": "Just Chatting",
"slug": "just-chatting",
"boxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/509658-144x192.jpg"
}
},
"videos": [
{
"id": "2891015835",
"url": "https://www.twitch.tv/videos/2891015835",
"title": "Highlight: RONALDO RETIRED??? + SPEED VS EKITIKE 🇫🇷⚽️",
"type": "HIGHLIGHT",
"durationSeconds": 4267,
"viewCount": 2064,
"publishedAt": "2026-10-03T19:16:15Z",
"game": {
"id": "509658",
"name": "Just Chatting",
"slug": "just-chatting",
"boxArtUrl": "https://static-cdn.jtvnw.net/ttv-boxart/509658-144x192.jpg"
},
"thumbnailUrl": "https://static-cdn.jtvnw.net/cf_vods/d2vi6trrdongqn/e3eb4c976dfe1c972c78_ishowspeed_52655563137_4873771784//thumb/thumb2891015835-320x180.jpg",
"animatedThumbnailUrl": "https://d2vi6trrdongqn.cloudfront.net/e3eb4c976dfe1c972c78_ishowspeed_52655563137_4873771784/storyboards/2891015835-strip-0.jpg"
}
]
},
"fetchedAt": "2026-10-05T14:46:45.256Z"
},
"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.
```
# Stream schedule
Source: https://docs.scraperize.com/api-reference/twitch/stream-schedule
/api-reference/openapi.json get /v1/twitch/user/schedule
Fetches a Twitch channel's public stream schedule by username and returns it as clean JSON: the next upcoming segment, any active vacation/break window, and every scheduled segment for the week — each with its title, start/end time, category (with box art), recurrence, and cancellation status. A channel with no schedule returns `hasSchedule: false`. Only publicly available data is returned.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitch/user/schedule. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitch/user/schedule
Description: Fetches a Twitch channel's public stream schedule by username and returns it as clean JSON: the next upcoming segment, any active vacation/break window, and every scheduled segment for the week — each with its title, start/end time, category (with box art), recurrence, and cancellation status. A channel with no schedule returns `hasSchedule: false`. Only publicly available data is returned.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: The Twitch username (channel handle), e.g. `ishowspeed`.
- 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": {
"channel": {
"handle": "ishowspeed",
"url": "https://www.twitch.tv/ishowspeed"
},
"schedule": null,
"hasSchedule": false,
"segmentCount": 0,
"fetchedAt": "2026-10-05T14:46:47.305Z"
},
"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.
```
# Community
Source: https://docs.scraperize.com/api-reference/twitter/community
/api-reference/openapi.json get /v1/twitter/community
Fetches a public X Community (`x.com/i/communities/`) and returns its info, stats, rules, topic, creator, and a member facepile — NOT the community tweets (a separate endpoint).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitter/community. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitter/community
Description: Fetches a public X Community (`x.com/i/communities/`) and returns its info, stats, rules, topic, creator, and a member facepile — NOT the community tweets (a separate endpoint).
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Community URL, e.g. https://x.com/i/communities/1433869915434278912
- 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": {
"community": {
"id": "1433869915434278912",
"url": "https://x.com/i/communities/1433869915434278912",
"name": "X Communities Feedback",
"description": "A place to discuss all things related to 𝕏 Communities! The team will share updates, request feedback, and answer any questions you may have.",
"memberCount": 547779,
"createdAtMs": 1630696202524,
"createdAt": "2021-09-03T19:10:02.524Z",
"isNsfw": false,
"joinPolicy": "Open",
"topic": "X Official",
"banner": {
"url": "https://pbs.twimg.com/community_banner_img/1846987838937878529/9NWOzlgp?format=jpg&name=orig",
"width": 1198,
"height": 479
},
"creator": {
"id": "1433894099178774532",
"name": "Communities",
"screenName": "HiCommunities",
"url": "https://x.com/HiCommunities",
"bio": null,
"avatarUrl": null,
"avatarUrlHd": null,
"followers": null,
"following": null,
"tweetCount": null,
"verified": true,
"verifiedType": null,
"protected": null,
"profileImageShape": null,
"professionalCategory": null
},
"rules": [
{
"id": "1788316047352717315",
"name": "Stay on topic.",
"description": "This is a community for, well, Communities, so keep feedback, questions, and thoughts about that. For anything else, visit our Help Center or @Support ."
}
],
"membersFacepile": [
{
"id": "1433894099178774532",
"name": null,
"screenName": "HiCommunities",
"url": "https://x.com/HiCommunities",
"bio": null,
"avatarUrl": "https://pbs.twimg.com/profile_images/1683508943228731394/Wyjsoi11_normal.jpg",
"avatarUrlHd": "https://pbs.twimg.com/profile_images/1683508943228731394/Wyjsoi11_400x400.jpg",
"followers": null,
"following": null,
"tweetCount": null,
"verified": null,
"verifiedType": null,
"protected": null,
"profileImageShape": "Square",
"professionalCategory": null
}
]
},
"fetchedAt": "2026-10-05T14:42:32.939Z"
},
"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.
```
# Community tweets
Source: https://docs.scraperize.com/api-reference/twitter/community-tweets
/api-reference/openapi.json get /v1/twitter/community/tweets
Fetches the tweet timeline of a public X Community (`x.com/i/communities/`). Each tweet is fully shaped WITH its author (community tweets come from many members). Returns the most recent tweets (one page, no pagination).
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitter/community/tweets. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitter/community/tweets
Description: Fetches the tweet timeline of a public X Community (`x.com/i/communities/`). Each tweet is fully shaped WITH its author (community tweets come from many members). Returns the most recent tweets (one page, no pagination).
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Community URL, e.g. https://x.com/i/communities/1433869915434278912
- 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": {
"communityId": "1433869915434278912",
"tweets": [
{
"id": "2096516206916431943",
"url": "https://x.com/Xbdguangfang/status/2096516206916431943",
"text": "有人能告诉我现在还能修改社群信息或者创建社群吗,感谢🙏",
"isLongForm": false,
"lang": "zh",
"createdAtMs": 1788683389000,
"createdAt": "2026-09-06T08:29:49.000Z",
"counts": {
"likes": 25,
"retweets": 3,
"replies": 2,
"quotes": 0,
"bookmarks": 1
},
"views": "14005",
"author": {
"id": "1965139342780993536",
"name": "Xbd官方",
"screenName": "Xbdguangfang",
"url": "https://x.com/Xbdguangfang",
"bio": null,
"avatarUrl": "https://pbs.twimg.com/profile_images/2101661962543443968/i0NzjJ5i_normal.jpg",
"avatarUrlHd": "https://pbs.twimg.com/profile_images/2101661962543443968/i0NzjJ5i_400x400.jpg",
"followers": 32,
"following": 68,
"tweetCount": 4,
"verified": false,
"protected": false,
"profileImageShape": "Circle",
"professionalCategory": null
},
"media": [],
"mentions": [],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2096516206916431943"
],
"place": null
}
],
"tweetCount": 12,
"fetchedAt": "2026-10-05T14:42:34.905Z"
},
"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.
```
# Profile
Source: https://docs.scraperize.com/api-reference/twitter/profile
/api-reference/openapi.json get /v1/twitter/profile
Fetches a public profile (`https://x.com/`) and returns profile information, stats, and metadata only — NO tweets.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitter/profile. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitter/profile
Description: Fetches a public profile (`https://x.com/`) and returns profile information, stats, and metadata only — NO tweets.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: User handle WITHOUT the @ symbol, e.g. `thedankoe`.
- 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": {
"profile": {
"id": "256523056",
"name": "DAN KOE",
"screenName": "thedankoe",
"url": "https://x.com/thedankoe",
"bio": "a better place to build a creator business: @edendotso",
"location": "the goods:",
"website": {
"url": "https://t.co/t9rHIYvRYk",
"displayUrl": "thedankoe.eden.so",
"expandedUrl": "https://thedankoe.eden.so"
},
"avatarUrl": "https://pbs.twimg.com/profile_images/1845856303174037504/Q7ZZqVFa_normal.jpg",
"avatarUrlHd": "https://pbs.twimg.com/profile_images/1845856303174037504/Q7ZZqVFa_400x400.jpg",
"bannerUrl": "https://pbs.twimg.com/profile_banners/256523056/1711767394",
"stats": {
"followers": 1034743,
"following": 959,
"tweets": 30350
},
"verified": true,
"verifiedType": null,
"protected": false,
"professional": false,
"professionalCategory": null,
"profileImageShape": "Circle",
"joined": "February 2011"
},
"fetchedAt": "2026-10-05T14:42:30.937Z"
},
"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.
```
# Tweet
Source: https://docs.scraperize.com/api-reference/twitter/tweet
/api-reference/openapi.json get /v1/twitter/tweet
Fetches a public tweet by its permalink and returns the focal tweet plus its reply thread. Set `trim=true` for a lightweight response.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitter/tweet. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitter/tweet
Description: Fetches a public tweet by its permalink and returns the focal tweet plus its reply thread. Set `trim=true` for a lightweight response.
Required Headers:
- x-api-key: Your API key
Parameters:
- url (string) [required]: Public tweet permalink, e.g. https://x.com/user/status/1234567890
- trim (select): Return a trimmed-down response: only the focal tweet with essential fields, and no reply thread (`replies`/`replyCount` are omitted).
- 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": {
"focalTweet": {
"id": "2092616549722968274",
"url": "https://x.com/honour_can_code/status/2092616549722968274",
"text": "Global talent meets Global market \nand realized they cannot compete\n\nnow they’re back to local market",
"isLongForm": false,
"lang": "en",
"createdAtMs": 1787753639000,
"createdAt": "2026-08-26T14:13:59.000Z",
"counts": {
"likes": 1888,
"retweets": 361,
"replies": 83,
"quotes": 55,
"bookmarks": 81
},
"views": "111232",
"author": {
"id": "1551091092468162560",
"name": "Robinson Honour",
"screenName": "honour_can_code",
"url": "https://x.com/honour_can_code",
"bio": "building @pxxl_space",
"avatarUrl": "https://pbs.twimg.com/profile_images/1930817536863375361/OWkQS_oM_normal.jpg",
"avatarUrlHd": "https://pbs.twimg.com/profile_images/1930817536863375361/OWkQS_oM_400x400.jpg",
"followers": 13121,
"following": 1930,
"tweetCount": 16262,
"verified": true,
"protected": false,
"profileImageShape": "Circle",
"professionalCategory": null
},
"media": [],
"mentions": [],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2092616549722968274"
],
"place": null
},
"replies": [
{
"id": "2092648660848783643",
"url": "https://x.com/jayhemz/status/2092648660848783643",
"text": "@honour_can_code I go lie for you?",
"isLongForm": false,
"lang": "en",
"createdAtMs": 1787761294000,
"createdAt": "2026-08-26T16:21:34.000Z",
"counts": {
"likes": 85,
"retweets": 2,
"replies": 6,
"quotes": 0,
"bookmarks": 1
},
"views": "6566",
"author": {
"id": "1625981691058704384",
"name": "Johnmark Obiefuna",
"screenName": "jayhemz",
"url": "https://x.com/jayhemz",
"bio": null,
"avatarUrl": "https://pbs.twimg.com/profile_images/2062452288128442368/mEjipPZ9_normal.jpg",
"avatarUrlHd": "https://pbs.twimg.com/profile_images/2062452288128442368/mEjipPZ9_400x400.jpg",
"followers": 11876,
"following": 2746,
"tweetCount": 17000,
"verified": true,
"protected": false,
"profileImageShape": "Circle",
"professionalCategory": null
},
"media": [],
"mentions": [
{
"screenName": "honour_can_code",
"id": "1551091092468162560",
"indices": [
0
]
}
],
"urls": [],
"hashtags": [],
"cashtags": [],
"card": null,
"communityNote": null,
"article": null,
"isReply": true,
"replyToTweetId": "2092616549722968274",
"replyToUserId": "1551091092468162560",
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"conversationControl": null,
"editTweetIds": [
"2092648660848783643"
],
"place": null
}
],
"replyCount": 3,
"fetchedAt": "2026-10-05T14:42:24.932Z"
},
"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.
```
# User tweets
Source: https://docs.scraperize.com/api-reference/twitter/user-tweets
/api-reference/openapi.json get /v1/twitter/user-tweets
Fetches a public profile (`https://x.com/`) and returns the user's tweets in display order (pinned first, then newest → oldest). Strictly tweet details — no user/author objects. Returns the most recent tweets (one page, no pagination). Set `trim=true` for a lightweight response.
**Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).
```text Prompt
I want to make an API call to /v1/twitter/user-tweets. Here are the details:
Endpoint: GET https://api.scraperize.com/v1/twitter/user-tweets
Description: Fetches a public profile (`https://x.com/`) and returns the user's tweets in display order (pinned first, then newest → oldest). Strictly tweet details — no user/author objects. Returns the most recent tweets (one page, no pagination). Set `trim=true` for a lightweight response.
Required Headers:
- x-api-key: Your API key
Parameters:
- handle (string) [required]: User handle WITHOUT the @ symbol, e.g. `thedankoe`.
- trim (select): Return trimmed-down tweets (essential fields only).
- 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": {
"tweets": [
{
"id": "2010751592346030461",
"url": "https://x.com/thedankoe/status/2010751592346030461",
"text": "https://t.co/7l7Jef99QZ",
"isLongForm": false,
"lang": "zxx",
"createdAtMs": 1768235512000,
"createdAt": "2026-01-12T16:31:52.000Z",
"counts": {
"likes": 357792,
"retweets": 57448,
"replies": 9317,
"quotes": 15941,
"bookmarks": 940591
},
"views": "246051197",
"media": [],
"mentions": [],
"urls": [
{
"url": "https://t.co/7l7Jef99QZ",
"expandedUrl": "http://x.com/i/article/2010742786430021632",
"displayUrl": "x.com/i/article/2010…"
}
],
"hashtags": [],
"cashtags": [],
"card": {
"id": "Q2FyZDpodHRwczovL3QuY28vN2w3SmVmOTlRWg=="
},
"communityNote": null,
"article": {
"id": "2010742786430021632",
"title": "How to fix your entire life in 1 day",
"previewText": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They crea…",
"coverImage": {
"url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"width": 1456,
"height": 582
},
"fullText": null,
"raw": {
"article_results": {
"id": "QXJ0aWNsZUVudGl0eVJlc3VsdHM6MjAxMDc0Mjc4NjQzMDAyMTYzMg==",
"result": {
"__isArticleResult": "ArticleEntity",
"cover_media_results": {
"id": "QXBpTWVkaWFSZXN1bHRzOgwABQoAARvnn8qQm0ABCgACAAAAAA9KOzAAAA==",
"result": {
"id": "QXBpTWVkaWE6DAAFCgABG+efypCbQAEKAAIAAAAAD0o7MAAA",
"media_info": {
"original_img_height": 582,
"original_img_url": "https://pbs.twimg.com/media/G-efypCbQAEEi8a.jpg",
"original_img_width": 1456
}
}
},
"id": "QXJ0aWNsZUVudGl0eToyMDEwNzQyNzg2NDMwMDIxNjMy",
"preview_text": "If you're anything like me, you think new years resolutions are stupid.\nBecause most people go about changing their lives in the completely wrong way. They crea…",
"rest_id": "2010742786430021632",
"title": "How to fix your entire life in 1 day"
}
}
}
},
"isReply": false,
"replyToTweetId": null,
"replyToUserId": null,
"isQuote": false,
"quotedTweetId": null,
"quotedTweet": null,
"possiblySensitive": false,
"conversationControl": null,
"editTweetIds": [
"2010751592346030461"
],
"place": null,
"isPinned": true
}
],
"tweetCount": 5,
"fetchedAt": "2026-10-05T14:42:27.369Z"
},
"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.
```
# Authentication
Source: https://docs.scraperize.com/authentication
Authenticate requests with your API key.
Every scrape request must be authenticated with an API key. Create and manage keys in your
[dashboard](https://app.scraperize.com) under **API keys**.
## Sending your key
Send the key in the `x-api-key` header:
```bash theme={"system"}
curl "https://api.scraperize.com/v1/twitter/tweet?url=https://x.com/…" \
-H "x-api-key: YOUR_API_KEY"
```
A `Bearer` token is also accepted, if that fits your HTTP client better:
```bash theme={"system"}
curl "https://api.scraperize.com/v1/twitter/tweet?url=https://x.com/…" \
-H "Authorization: Bearer YOUR_API_KEY"
```
A missing, invalid, or revoked key returns **`401 UNAUTHORIZED`**.
## Key format
Keys are a 28-character random string of letters and digits — there is **no** `live`/`test` split and no
prefix. The full secret is shown **once**, when the key is created; store it securely (an environment
variable or a secret manager). If you lose it, revoke the key and create a new one.
Treat your API key like a password. Never commit it to source control or expose it in client-side code
(browser or mobile apps). Call the API from your server.
## Managing keys
From the dashboard you can create multiple keys, name them, see each key's last-used time, and revoke any
key immediately. Revoking takes effect right away.
# Caching
Source: https://docs.scraperize.com/essentials/caching
Reuse recent results for zero credits.
Every scrape endpoint accepts an optional **`cache_max_age`** query parameter. When you send it,
Scraperize will return a recent cached result — for **0 credits** — instead of scraping fresh, as long as
a cached result within your chosen window exists.
## Using it
```bash theme={"system"}
curl "https://api.scraperize.com/v1/telegram/channel?handle=telegram&cache_max_age=7d" \
-H "x-api-key: YOUR_API_KEY"
```
`cache_max_age` accepts one of:
| Value | Meaning |
| - | - |
| `1d` | up to 1 day old |
| `3d` | up to 3 days old |
| `7d` | up to 7 days old |
| `14d` | up to 14 days old |
| `30d` | up to 30 days old |
## Behaviour
* **Hit** — a cached result within the window exists → it's returned for **0 credits**, with
`meta.cached: true` and `meta.cachedAt` (when it was scraped).
* **Miss** — no fresh-enough result → a live scrape runs (**1 credit**) and refreshes the cache.
* **Omitted** — leave `cache_max_age` out to always scrape fresh.
```json theme={"system"}
"meta": { "cached": true, "cachedAt": "2026-09-12T08:00:00.000Z", "creditsCharged": 0 }
```
Pick the largest window your use case tolerates. `30d` on data that rarely changes can cut credit usage
dramatically; use `1d` when you need it fresh.
# Credits
Source: https://docs.scraperize.com/essentials/credits
How usage is billed.
Scraperize is billed with **prepaid credits** — a balance you spend as you scrape. Credits are bought in
one-time packs, unused credits don't expire, and your balance is shared across your team.
## What a call costs
* A **successful live scrape** costs **1 credit**.
* A **cache hit** (see [Caching](/essentials/caching)) costs **0 credits**.
* **Errors cost nothing** — a `4xx`/`5xx` response is never charged.
Every scrape response reports the outcome in `meta`:
```json theme={"system"}
"meta": { "creditsCharged": 1, "creditsRemaining": 4999, "cached": false }
```
Some endpoints may cost more than 1 credit in future; the cost of each call is always reflected in
`meta.creditsCharged`, so you never have to guess.
## Running out
When your balance can't cover a call, the API returns **`402 INSUFFICIENT_CREDITS`**. Buy another pack
from the **Billing** page in your [dashboard](https://app.scraperize.com) and you're topped up
immediately — credits you already had are unaffected.
## Plans
All plans include **every endpoint** and credits that **never expire** — they differ only in how many
credits you get. See live pricing on the [dashboard billing page](https://app.scraperize.com).
# Errors
Source: https://docs.scraperize.com/essentials/errors
The error shape and what each status means.
Errors return a consistent JSON shape and the matching HTTP status code:
```json theme={"system"}
{
"error": {
"code": "NOT_FOUND",
"message": "The requested content was not found (it may not exist, be deleted, or be private).",
"requestId": "req_8f0c…"
}
}
```
* **`code`** — a stable, machine-readable string (switch on this, not the message).
* **`message`** — a human-readable, safe description. It never leaks upstream or internal detail.
* **`requestId`** — quote it in support requests so we can trace the exact call.
## Status codes
| Status | `code` | When |
| - | - | - |
| `401` | `UNAUTHORIZED` | Missing, invalid, or revoked API key. |
| `402` | `INSUFFICIENT_CREDITS` | Balance is below the call's cost. Top up to continue. |
| `404` | `NOT_FOUND` | The target doesn't exist, is deleted, or is private. |
| `422` | `VALIDATION_ERROR` | A required query param is missing or malformed (details included). |
| `429` | `RATE_LIMITED` | Over the per-minute limit. See [Rate limits](/essentials/rate-limits). |
| `503` | `UPSTREAM_BLOCKED` | The source blocked this request. Retry shortly. |
| `503` | `EXTRACTION_FAILED` | The source returned unexpected data. Retry shortly. |
| `503` | `PLATFORM_UNAVAILABLE` | The source is down or timed out. Retry shortly. |
| `503` | `SERVICE_UNAVAILABLE` | We're at capacity, or the scrape didn't finish in time. Retry shortly. |
Every `503` is temporary and safe to retry — wait for the `Retry-After` header (in seconds) when it's
present. Switch on `code` if you need to know which one it was. Failed requests are never charged.
`422` responses include a `details` array pinpointing each invalid parameter, so you can surface precise
validation feedback to your users.
# Rate limits
Source: https://docs.scraperize.com/essentials/rate-limits
Per-team request limits and how to handle them.
Requests are rate limited **per team**, on a sliding one-minute window. When you exceed the limit the API
returns **`429 RATE_LIMITED`** with a **`Retry-After`** header telling you how many seconds to wait.
Every scrape response also carries your current budget:
| Header | Meaning |
| - | - |
| `X-RateLimit-Limit` | Max requests allowed in the window. |
| `X-RateLimit-Remaining` | Requests left in the current window. |
| `Retry-After` | On a `429`, seconds to wait before retrying. |
## Handling 429s
Back off and retry after the `Retry-After` interval:
```js theme={"system"}
async function scrape(url, key) {
const res = await fetch(url, { headers: { "x-api-key": key } });
if (res.status === 429) {
const wait = Number(res.headers.get("retry-after") ?? 1);
await new Promise((r) => setTimeout(r, wait * 1000));
return scrape(url, key);
}
return res.json();
}
```
The limit is per team, not per key — every key on a team draws from the same budget. Spreading calls
across multiple keys does not raise it.
# Response format
Source: https://docs.scraperize.com/essentials/response-format
The consistent envelope every endpoint returns.
Every endpoint returns the same JSON envelope, so you can write your handling once and reuse it
everywhere.
## Success
```json theme={"system"}
{
"data": {
"post": { "id": 537, "text": "…", "views": 3440000 },
"fetchedAt": "2026-09-14T09:00:00.000Z"
},
"meta": {
"requestId": "req_8f0c…",
"creditsCharged": 1,
"creditsRemaining": 4999,
"cached": false
}
}
```
* **`data`** — the result for the endpoint. Its shape is documented per endpoint in the
[API Reference](/api-reference).
* **`meta`** — metadata about the request itself (below).
### `meta` fields
| Field | Description |
| - | - |
| `requestId` | Unique id for this request (`req_…`). Quote it in support requests. |
| `creditsCharged` | Credits this request cost — `1` for a live result, `0` for a cache hit. |
| `creditsRemaining` | Your team's balance after this request. |
| `cached` | `true` if served from cache, `false` if freshly fetched. |
| `cachedAt` | When the cached result was produced (present only on a cache hit). |
## Errors
Errors use a parallel shape with a matching HTTP status:
```json theme={"system"}
{
"error": {
"code": "NOT_FOUND",
"message": "The requested content was not found.",
"requestId": "req_8f0c…"
}
}
```
Switch on `error.code` (stable and machine-readable), show `error.message` to humans, and log
`requestId`. See [Errors](/essentials/errors) for the full list of codes.
## Timestamps & IDs
* All timestamps are **ISO 8601 UTC** strings (e.g. `2026-09-14T09:00:00.000Z`).
* Treat all IDs as **opaque strings** — don't parse or infer meaning from them.
# FAQ
Source: https://docs.scraperize.com/faq
Common questions about the Scraperize API.
Publicly available data from the platforms we support — profiles, posts, media, comments, and
pages. See the full list on the [Platforms](/platforms) page. Scraperize returns only what is
publicly visible; it never accesses private or logged-in-only content.
With prepaid **credits**. Each successful request costs 1 credit; a [cache hit](/essentials/caching)
costs 0, and errors are never charged. Credits are bought in one-time packs; you spend from your balance
as you scrape, and unused credits **never expire**. See [Credits](/essentials/credits).
No. Credits are a balance you spend as you scrape (about 1 per request) — whatever you don't use stays on
your account, with no monthly reset.
Requests return `402 INSUFFICIENT_CREDITS`. Buy another pack from your
[dashboard](https://app.scraperize.com) and you're topped up immediately — existing credits are
unaffected.
Add `cache_max_age` to your requests to accept a recent cached result for **0 credits**. Pick the
largest freshness window your use case allows. See [Caching](/essentials/caching).
Requests are limited per team per minute. Over the limit returns `429` with a `Retry-After` header;
back off and retry after that many seconds. See [Rate limits](/essentials/rate-limits).
Switch on the stable `error.code`, show `error.message` to users, and log `error.requestId` (include
it in support requests). See [Errors](/essentials/errors).
19 platforms and 87 endpoints today — see [Platforms](/platforms) — and we add more over time.
Need one that isn't listed? [Tell us](https://scraperize.com); the roadmap follows demand.
Your API keys and usage are private to your team. Keep your API key secret and call the API from your
server, never from client-side code. See [Authentication](/authentication).
Scraperize returns public data, but you are responsible for using it in line with the applicable
platforms' terms and the laws that apply to you. Use it to build responsibly.
Still stuck? Reach out from [scraperize.com](https://scraperize.com) with your `requestId` and we'll help, or find us on
[X (@scraperize)](https://x.com/scraperize).
# MCP
Source: https://docs.scraperize.com/integrations/mcp
Connect Claude, ChatGPT, Cursor, VS Code and other AI assistants to Scraperize.
The Scraperize MCP server lets AI assistants use the Scraperize API for you. Your assistant finds the right
endpoint, runs the scrape and works with the JSON, using your account's credits. It's read-only: it can't
change your account, API keys or billing.
```text MCP server URL theme={"system"}
https://api.scraperize.com/mcp
```
## Quick install
Adds the server, then sign in with your API key.
Adds the server, then sign in with your API key.
## Setup
When an app connects for the first time, a Scraperize page opens in your browser. Paste an
[API key](https://app.scraperize.com/keys) and click **Connect**. The app gets its own access token; your key
is never shared with it.
Works in Claude on the web and the Claude desktop app.
Go to **Settings → Connectors** and click **Add custom connector**.
Name it **Scraperize** and use `https://api.scraperize.com/mcp` as the URL.
Click **Connect**, paste your API key on the Scraperize page, and click **Connect** again.
In **Settings → Apps & Connectors**, create a custom connector. Depending on your plan, you may need to
turn on **Developer mode** under **Advanced settings** first.
Name it **Scraperize**, use `https://api.scraperize.com/mcp` as the URL and choose **OAuth** for
authentication.
Paste your API key on the Scraperize page and click **Connect**.
Add the server:
```bash theme={"system"}
claude mcp add --transport http scraperize https://api.scraperize.com/mcp
```
Then run `/mcp`, select **scraperize** and choose **Authenticate** to sign in with your API key.
To skip the browser step, pass the key as a header instead:
```bash theme={"system"}
claude mcp add --transport http scraperize https://api.scraperize.com/mcp --header "x-api-key: YOUR_API_KEY"
```
Use **Install in Cursor** above, or add this to `~/.cursor/mcp.json`:
```json theme={"system"}
{
"mcpServers": {
"scraperize": {
"url": "https://api.scraperize.com/mcp"
}
}
}
```
Then open **Settings → Tools & MCP** and click **Connect** next to scraperize to sign in.
Use **Install in VS Code** above, or add this to `.vscode/mcp.json` in your workspace:
```json theme={"system"}
{
"servers": {
"scraperize": {
"type": "http",
"url": "https://api.scraperize.com/mcp"
}
}
}
```
Start the server from the file (or **MCP: List Servers**) and sign in when prompted.
Any MCP client that supports Streamable HTTP can connect. Use OAuth sign-in if the client supports it,
or send your API key as a header:
```json theme={"system"}
{
"mcpServers": {
"scraperize": {
"url": "https://api.scraperize.com/mcp",
"headers": { "x-api-key": "YOUR_API_KEY" }
}
}
}
```
`Authorization: Bearer YOUR_API_KEY` also works.
Give each app its own API key (for example "Claude" or "Cursor"). To disconnect an app, revoke its key in the
[dashboard](https://app.scraperize.com/keys). Your other apps and scripts keep working.
## Tools
| Tool | What it does | Credits |
| - | - | - |
| `list_endpoints` | Lists every scrape endpoint, optionally for one platform. | Free |
| `describe_endpoint` | Shows one endpoint's parameters, cost and an example response. | Free |
| `call_endpoint` | Runs a scrape: `{ path, params, cache_max_age? }`. Returns `{ data, meta }`, like the REST API. | Per call |
| `get_credit_balance` | Your current credit balance. | Free |
| `get_usage_summary` | Requests, credits and cache hits for the last 7, 30 or 90 days, plus your most-used endpoints. | Free |
Your assistant sees every endpoint as soon as it connects, so it can usually go straight to `call_endpoint`.
If a path or parameter is wrong, it gets an error naming the closest endpoint or the valid parameters, and
no credits are spent.
## Credits and approval
* **Same as the API:** a successful `call_endpoint` costs the endpoint's credits (shown in `meta.creditsCharged`). Errors are free.
* **Caching:** your assistant can pass `cache_max_age` (`1d`, `3d`, `7d`, `14d` or `30d`) to reuse a recent result for 0 credits.
* **Approval:** `call_endpoint` is marked as an action that spends credits, so most clients ask before running it. Keep approval on.
* **Limits:** calls share your team's [rate limit](/essentials/rate-limits) and show up in your request history.
Scraped posts and comments are third-party content. Scraperize returns them as data, and tells your
assistant never to follow instructions found inside them.
## Try it
Once connected, ask your assistant things like:
* "Get natgeo's TikTok profile and summarize their last 10 videos."
* "What has this company posted on LinkedIn this month?" (paste the company page link)
* "How many credits do I have left, and what did I use most this week?"
## Troubleshooting
The API key it was connected with was probably revoked. Reconnect the app and paste an active key.
Your balance is lower than the endpoint's cost. Top up in the [dashboard](https://app.scraperize.com).
Your team hit its per-minute limit. Wait for the time in the error, then try again.
# Introduction
Source: https://docs.scraperize.com/introduction
Extract public data from social media platforms as clean JSON.
**Scraperize is a REST API for extracting public data from social media platforms.** Ask for a profile, a
post, a page, or a search result and get back clean, structured JSON — no infrastructure to build, no
pipelines to maintain, no data to parse yourself.
One consistent API spans every platform we support, so the profile you fetch from Twitter and the post you
fetch from Telegram come back through the same request pattern and the same response shape.
Make your first request in under a minute.
Every platform and endpoint we support.
How API keys work.
Every endpoint, parameter, and response.
## What you can do
* **Profiles & pages** — pull public profile info, stats, and metadata across platforms.
* **Posts & media** — fetch individual posts, reels, clips, photos, and their engagement.
* **Feeds & collections** — page through a profile's posts, a group's posts, a channel's history.
* **Comments** — read comments and replies on a post.
* **Link-in-bio** — creator link pages (Linktree, Komi, Pillar, and more).
See the full list on the [Platforms](/platforms) page — **19 platforms and 87 endpoints today, and
growing** as we add more.
## How a request works
Send your API key in a header and the target (a URL or handle) in the query string:
```bash theme={"system"}
curl "https://api.scraperize.com/v1/telegram/post?url=https://t.me/durov/537" \
-H "x-api-key: YOUR_API_KEY"
```
You get back a consistent envelope — your result under `data`, request + usage info under `meta`:
```json theme={"system"}
{
"data": { "post": { "id": 537, "views": 3440000, "text": "…" }, "fetchedAt": "2026-09-14T09:00:00.000Z" },
"meta": { "requestId": "req_…", "creditsCharged": 1, "creditsRemaining": 4999, "cached": false }
}
```
Read more in [Response format](/essentials/response-format).
## Good to know
Scraperize returns only publicly available data — the same information anyone can see without logging
in.
Each successful request costs 1 credit. Cache hits are free. Unused credits never expire.
Accept a recent result with `cache_max_age` and pay 0 credits.
Every endpoint returns the same `data` / `meta` envelope and error format.
## Base URL
```text theme={"system"}
https://api.scraperize.com
```
All endpoints are versioned under `/v1`. Ready to build? Start with the [Quickstart](/quickstart).
Follow [@scraperize on X](https://x.com/scraperize) for new platforms, endpoints and updates.
# Platforms
Source: https://docs.scraperize.com/platforms
Every platform and endpoint Scraperize supports today.
Scraperize supports **19 platforms** and **87 endpoints** today, all through one consistent API — and
we're adding more over time. Full request/response details for each are in the
[API Reference](/api-reference).
Every endpoint returns only **public** data and follows the same [response format](/essentials/response-format).
A successful request costs 1 credit; a [cache hit](/essentials/caching) is free.
## Twitter / X
| Endpoint | Returns |
| - | - |
| `GET /v1/twitter/tweet` | A public tweet by URL |
| `GET /v1/twitter/user-tweets` | A user's profile tweets |
| `GET /v1/twitter/profile` | Profile info, stats, and metadata |
| `GET /v1/twitter/community` | An X Community — info, stats, rules, creator |
| `GET /v1/twitter/community/tweets` | A community's tweets |
## Facebook
| Endpoint | Returns |
| - | - |
| `GET /v1/facebook/post` | A public post or reel by URL |
| `GET /v1/facebook/profile` | Public profile information |
| `GET /v1/facebook/profile/posts` | A profile's posts |
| `GET /v1/facebook/profile/photos` | A page's photos |
| `GET /v1/facebook/profile/reels` | A page's reels |
| `GET /v1/facebook/profile/events` | A page's events |
| `GET /v1/facebook/post/comments` | A post's (or reel's) comments |
| `GET /v1/facebook/post/comment/replies` | Replies to a comment |
| `GET /v1/facebook/group` | Public group "About" information |
| `GET /v1/facebook/group/posts` | A public group's posts |
## Instagram
| Endpoint | Returns |
| - | - |
| `GET /v1/instagram/profile` | A public profile — bio, counts, bio links, highlights & related accounts |
| `GET /v1/instagram/basic-profile` | A profile by user id — bio, counts, HD picture & bio links |
| `GET /v1/instagram/user/posts` | A profile's posts & Reels — counts, media files, audio, tags & collaborators |
| `GET /v1/instagram/user/reels` | A profile's Reels by user id or username — views, counts, video files, audio & tags |
| `GET /v1/instagram/user/highlights` | A profile's story highlights by user id or username — id, title, cover & link (the first 10) |
| `GET /v1/instagram/user/highlight/detail` | One highlight by id with every story in it — media, dates, links, hashtags, mentions, music & more |
| `GET /v1/instagram/profile/post-count` | The post count a profile shows — exact or rounded, with exact follower counts |
| `GET /v1/instagram/post` | A single post or Reel by URL — counts, views & plays, media files, audio, tags, AI summary, owner, first comments & more from the owner |
| `GET /v1/instagram/post/comments` | A post's or Reel's comments by URL, newest first — text, date, likes, author & GIFs (no replies), paginated |
| `GET /v1/instagram/search/popular` | A topic by keyword — title, Reels total, AI summary, related keywords & its curated posts (plays, counts, media, audio, owner), plus trending topics |
| `GET /v1/instagram/audio/reels` | The Reels using an audio (song or original sound) by its URL — plays, counts, media & owner — plus the audio: title, artist, cover, Reels count, download & Spotify links |
`/v1/instagram/post` takes an optional `region` (default NG) — the country the post is fetched from, from the same list as the [TikTok regions](#tiktok). Instagram media URLs download directly, with no extra headers.
## Lagos Life
| Endpoint | Returns |
| - | - |
| `GET /v1/lagos-life/site` | Site details — description, share image, contact email & official social accounts |
| `GET /v1/lagos-life/stats` | The headline numbers — players online, visits, homes by area, billboard & Sea Plots ads with weekly ₦ value, the election leader |
| `GET /v1/lagos-life/daily` | Today's in-game bulletin — weather, headline & tip |
| `GET /v1/lagos-life/government` | The governor, the policy in force & the running election — every candidate ranked with votes & vote share |
| `GET /v1/lagos-life/billboards` | Every billboard — area, city, weekly ₦ price & all its rotating ads (link, image, end date) |
| `GET /v1/lagos-life/sea` | The Sea Plots ad wall — each ad's title, link, image, size & weekly ₦ cost |
| `GET /v1/lagos-life/homes` | The player homes on the map — username, home type, area & rent, online status |
| `GET /v1/lagos-life/verified-players` | The verified players |
| `GET /v1/lagos-life/places` | The places on the map — name, area, city & opening hours |
[Lagos Life](https://lagoslife.app) is a life-sim game set in Lagos with real players. None of these endpoints takes parameters.
## Telegram
| Endpoint | Returns |
| - | - |
| `GET /v1/telegram/channel` | Channel details |
| `GET /v1/telegram/channel/posts` | Recent posts from a channel or group |
| `GET /v1/telegram/post` | One public post by URL |
## Snapchat
| Endpoint | Returns |
| - | - |
| `GET /v1/snapchat/profile` | A user profile |
| `GET /v1/snapchat/spotlight` | A Spotlight video |
| `GET /v1/snapchat/spotlight/comments` | Comments on a Spotlight video |
## Kick
| Endpoint | Returns |
| - | - |
| `GET /v1/kick/clip` | A Kick clip |
## Amazon
| Endpoint | Returns |
| - | - |
| `GET /v1/amazon/shop` | A creator's Amazon Shop |
## Twitch
| Endpoint | Returns |
| - | - |
| `GET /v1/twitch/profile` | A channel profile — info, follower count, socials & live status |
| `GET /v1/twitch/user/videos` | A channel's videos (filter by type, sort by time/views) |
| `GET /v1/twitch/user/schedule` | A channel's stream schedule — upcoming segments, category & vacation |
| `GET /v1/twitch/clip` | A single clip by URL — metadata, broadcaster, game & signed download URLs |
## TikTok
| Endpoint | Returns |
| - | - |
| `GET /v1/tiktok/profile` | A public profile by username or user id — bio, avatars, badges, exact stats & LIVE events |
| `GET /v1/tiktok/profile/region` | The country a profile posts from (code + name) |
| `GET /v1/tiktok/profile/videos` | A profile's videos — latest, popular or oldest first, paged with a cursor |
| `GET /v1/tiktok/collection/videos` | The videos in a public collection, paged with a cursor |
| `GET /v1/tiktok/video` | A single video or photo post by URL — stats, author, media, music, hashtags, posting country & categories |
| `GET /v1/tiktok/video/transcript` | A video's transcripts by URL — every caption language (original + translations), as text, timed segments & the raw file |
| `GET /v1/tiktok/video/comments` | A video's top-level comments by URL, paged with a cursor — text, likes, replies, author & creator-liked flags |
| `GET /v1/tiktok/video/comment/replies` | The replies to a comment by video URL + comment id, paged with a cursor — text, likes, author & who each reply answers |
| `GET /v1/tiktok/user/followers` | A public account's followers by username or user id, paged with a cursor — profiles, flags & exact stats |
| `GET /v1/tiktok/user/live` | Whether an account is LIVE and, if so, the stream — title, viewers, category & game, battle scores, top gifters and stream URLs; the most recent LIVE when offline |
| `GET /v1/tiktok/song` | A sound by its TikTok link — title, artist, album, duration, flags, covers, the audio file, Apple Music & Spotify links, how many videos use it, and the artist account(s) or the original sound's creator |
| `GET /v1/tiktok/song/videos` | The TikToks made with a sound, about 30 per page with a cursor — videos and photo carousels, each in full, plus the sound itself |
| `GET /v1/tiktok/get-trending-feed` | TikTok's trending feed (Explore) for a region (`region`, required) — a fresh batch of about 30 posts per call, each in full with its content category |
| `GET /v1/tiktok/user/following` | The accounts a user follows by username or user id, paged with a cursor — profiles, flags & exact stats |
| `GET /v1/tiktok/search/users` | Accounts matching a search query, 10 per page with a cursor — profile basics, followers, likes & LIVE status |
| `GET /v1/tiktok/search/suggestions` | TikTok's autocomplete suggestions for a query in a region (`region`, default NG) |
| `GET /v1/tiktok/search` | TikTok's Top search for a keyword in a region (`region`, default NG): videos and photo carousels mixed in TikTok's order, about 12 per page with a cursor — each post in full, plus the accounts TikTok shows among the results |
| `GET /v1/tiktok/search/keyword` | Videos matching a keyword in a region (`region`, default NG), about 12 per page with a cursor — each video in full, with related searches |
| `GET /v1/tiktok/search/hashtag` | Videos for a hashtag in a region (`region`, default NG), 30 per page with a cursor — the hashtag's exact video & view counts plus each video in full |
Endpoints with a `region` parameter return results for that region (default NG). Some hashtags aren't available in every region, and search (Top and keyword) isn't available in every region (for example the United States); those endpoints then return a 404, and another region may work.
Albania (`AL`), Algeria (`DZ`), Argentina (`AR`), Australia (`AU`), Austria (`AT`), Azerbaijan (`AZ`), Belarus (`BY`), Belgium (`BE`), Bolivia (`BO`), Brazil (`BR`), Cambodia (`KH`), Cameroon (`CM`), Canada (`CA`), Chile (`CL`), Colombia (`CO`), Costa Rica (`CR`), Czechia (`CZ`), Egypt (`EG`), France (`FR`), Germany (`DE`), Ghana (`GH`), Greece (`GR`), Hong Kong (`HK`), Iceland (`IS`), Ireland (`IE`), Israel (`IL`), Italy (`IT`), Jamaica (`JM`), Japan (`JP`), Kazakhstan (`KZ`), Kenya (`KE`), Kuwait (`KW`), Liechtenstein (`LI`), Lithuania (`LT`), Luxembourg (`LU`), Mexico (`MX`), Morocco (`MA`), Mozambique (`MZ`), Namibia (`NA`), Netherlands (`NL`), Nigeria (`NG`), North Macedonia (`MK`), Norway (`NO`), Panama (`PA`), Peru (`PE`), Philippines (`PH`), Portugal (`PT`), Puerto Rico (`PR`), Romania (`RO`), Saudi Arabia (`SA`), Singapore (`SG`), South Africa (`ZA`), South Korea (`KR`), Spain (`ES`), Sweden (`SE`), Switzerland (`CH`), Taiwan (`TW`), Thailand (`TH`), Trinidad and Tobago (`TT`), Tunisia (`TN`), Türkiye (`TR`), Uganda (`UG`), Ukraine (`UA`), United Arab Emirates (`AE`), United Kingdom (`GB`), United States (`US`), Uruguay (`UY`), Uzbekistan (`UZ`), Venezuela (`VE`)
TikTok rounds large view, like, comment and share counts on videos (saves are exact) — use
`/v1/tiktok/profile` for exact profile stats. Video `playUrl` / `formats[].url` are watermark-free;
`downloadUrl` carries TikTok's watermark.
## LinkedIn
| Endpoint | Returns |
| - | - |
| `GET /v1/linkedin/profile` | A person's public profile & recent posts |
| `GET /v1/linkedin/company` | A company page — info, stats & recent posts |
| `GET /v1/linkedin/company/posts` | A company's recent public posts |
| `GET /v1/linkedin/post` | A single post or Pulse article by URL |
| `GET /v1/linkedin/post/transcript` | A post video's transcript, when available |
## Bluesky
| Endpoint | Returns |
| - | - |
| `GET /v1/bluesky/profile` | A public profile by handle — bio, avatar & banner, follower/following/post counts, verification, DM settings, pinned post, live status & labels |
| `GET /v1/bluesky/user/posts` | An account's posts by handle or DID, about 30 per page with a cursor — text, hashtags, mentions & links, counts, images, video & link cards, quoted posts, reply context, reposts & the pinned post |
| `GET /v1/bluesky/post` | A single post by URL — text, hashtags, mentions & links, counts, images, video & link cards, the quoted post, reply settings & labels, plus every post above it in its thread |
## Threads
| Endpoint | Returns |
| - | - |
| `GET /v1/threads/profile` | A public profile by username — bio & mentions, profile picture, verified & private flags, follower count, links, interests, podcast, fediverse sharing, and the linked Instagram account's follower & following counts |
| `GET /v1/threads/user/posts` | An account's threads by username, 15 per page with a cursor — text, images, videos & carousels, like/reply/repost/quote/share counts, mentions & links, topic, link previews, quoted posts, music, podcasts, embedded Instagram posts, pinned & spoiler flags |
| `GET /v1/threads/post` | A single post by URL — the full post, the posts above it when it's a reply, the replies its author added to continue it, the first comments (each with the conversation under it) and the related posts Threads suggests |
| `GET /v1/threads/search/users` | Accounts matching a username or name — up to \~100, best match first, each with bio, profile picture, follower count, and verified & private flags |
| `GET /v1/threads/search` | Posts matching a keyword — up to 20 top results, optionally limited to a date range (`startdate` / `enddate`), each a full post (text, media, counts, links, quotes, …) with the posts it replies to |
## Truth Social
| Endpoint | Returns |
| - | - |
| `GET /v1/truthsocial/profile` | A public profile by username — display name, bio with its mentions & links, profile picture & header, website, location, follower, following & post counts, join date, last post date, and verified, premium, private, bot & messages flags |
| `GET /v1/truthsocial/user/posts` | An account's posts by username or user id, 20 per page with a cursor — text, images, videos & GIFs, link cards, polls, mentions, hashtags & links, quoted posts, ReTruths (with who shared them), reply, ReTruth & like counts |
| `GET /v1/truthsocial/post` | A single post by URL — the full post (text, media, link card, poll, quote, counts) and, when it's a reply, the post it replies to |
## Link-in-bio pages
Creator link pages, each returning the page's links and profile details:
| Endpoint | Returns |
| - | - |
| `GET /v1/linktree/page` | A public Linktree page |
| `GET /v1/komi/page` | A public Komi page |
| `GET /v1/pillar/page` | A public Pillar page |
| `GET /v1/linkbio/page` | A public Lnk.Bio page |
| `GET /v1/linkme/profile` | A public Linkme profile |
***
Don't see a platform you need? [Let us know](https://scraperize.com) — the roadmap is shaped by demand.
# Quickstart
Source: https://docs.scraperize.com/quickstart
Make your first Scraperize call in under a minute.
Sign in to your [dashboard](https://app.scraperize.com), open **API keys**, and create a key. Copy it
now — the secret is shown once. New accounts start with free credits.
Send the key in the `x-api-key` header. This fetches one public Telegram post:
```bash cURL theme={"system"}
curl "https://api.scraperize.com/v1/telegram/post?url=https://t.me/durov/537" \
-H "x-api-key: YOUR_API_KEY"
```
```js Node theme={"system"}
const res = await fetch(
"https://api.scraperize.com/v1/telegram/post?url=https://t.me/durov/537",
{ headers: { "x-api-key": process.env.SCRAPERIZE_API_KEY } }
);
const { data, meta } = await res.json();
console.log(data, meta.creditsRemaining);
```
```python Python theme={"system"}
import requests
r = requests.get(
"https://api.scraperize.com/v1/telegram/post",
params={"url": "https://t.me/durov/537"},
headers={"x-api-key": "YOUR_API_KEY"},
)
print(r.json())
```
You get the standard envelope — your result under `data`, plus `meta` with your `requestId` and
remaining credits:
```json theme={"system"}
{
"data": { "post": { "id": 537, "text": "…", "views": 3440000 }, "fetchedAt": "2026-09-14T09:00:00.000Z" },
"meta": { "requestId": "req_…", "creditsCharged": 1, "creditsRemaining": 4999, "cached": false }
}
```
Add `cache_max_age` to accept a recent cached result for **0 credits**:
```bash theme={"system"}
curl "https://api.scraperize.com/v1/telegram/post?url=https://t.me/durov/537&cache_max_age=7d" \
-H "x-api-key: YOUR_API_KEY"
```
See [Caching](/essentials/caching).
## Next steps
The full API reference, grouped by platform.
What each call costs and how to top up.
# Status
Source: https://docs.scraperize.com/status
Live availability and incident history.
Check the live status of the Scraperize API — current availability, ongoing incidents, and past
incidents with their resolutions — on our status page:
Real-time uptime and incident history.
The status page is fed by independent uptime monitors that probe the API's health endpoint continuously.
## Reporting a problem
If you're seeing errors that the status page doesn't reflect, contact support with the **`requestId`**
from the affected response (`meta.requestId`, or `error.requestId`) — it lets us trace the exact call.