Reference
API reference
TrueScrape's REST API is 206 GET endpoints across 37 platform groups, all returning one unified schema for creators, posts, comments, transcripts and ads. Pick a platform below for its endpoints, their parameters and their prices. A cache hit is free, and a failed or empty response is never charged.
Endpoints
206
Platforms
37
Cacheable
206
hits cost 0 credits
Batchable
200
usable in /v1/jobs/batch
Platforms
| Platform | Endpoints | Credits |
|---|---|---|
| Amazon | 4 | 1–3 cr |
| Apple Music | 4 | 1 cr |
| Bluesky | 3 | 1 cr |
| eBay | 2 | 1 cr |
| 22 | 1–2 cr | |
| GitHub | 10 | 1 cr |
| 8 | 1–5 cr | |
| 19 | 1 cr | |
| Kwai | 3 | 1 cr |
| Link-in-bio | 8 | 1 cr |
| 8 | 1 cr | |
| 4 | 1 cr | |
| 9 | 1 cr | |
| Redfin | 4 | 1 cr |
| Rumble | 5 | 1 cr |
| Snapchat | 3 | 1 cr |
| SoundCloud | 3 | 1 cr |
| Spotify | 7 | 1 cr |
| Telegram | 3 | 1 cr |
| Threads | 5 | 1 cr |
| TikTok | 32 | 1 cr |
| Truth Social | 3 | 1 cr |
| Twitch | 4 | 1 cr |
| X / Twitter | 6 | 1 cr |
| Utilities | 2 | 1–10 cr |
| Walmart | 4 | 3 cr |
| YouTube | 17 | 1 cr |
| Zillow | 3 | 1 cr |
| Kick | 1 | 1 cr |
Every endpoint
Kick
GET
/v1/kick/clip1 creditcacheablebatchableClip
A public Kick clip: title, creator, channel, duration, view count, and media URL.
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | yes | Clip URL (https://kick.com/<channel>/clips/clip_XXXX or https://kick.com/<channel>?clip=clip_XXXX) or a clip id |
Also accepts cache_max_age (a hit costs 0 credits) and include_raw (returns the untouched upstream payload under raw).
Returns one Post.
Fields
| Field | Type | Present | Description |
|---|---|---|---|
| platform | one of 32 strings | always | |
| id | string | always | |
| type | video | short | image | carousel | text | live | story | reel | audio | album | episode | unknown | always | What kind of post this is. `short` and `reel` are short-form video formats, `live` is a live stream or a recording of one, `carousel` holds several images or videos, `audio` is a music track, `album` is an album, `episode` is a podcast episode, and `unknown` covers anything else. |
| url | string | null | always | |
| title | string | null | always | |
| text | string | null | always | The post's text: a caption, a description or the message body. |
| authorId | string | null | always | |
| authorHandle | string | null | always | |
| authorName | string | null | always | |
| thumbnailUrl | string | null | always | |
| mediaUrls | string[] | always | |
| durationSeconds | number | null | always | |
| viewCount | number | null | always | Views. Null means the platform did not expose a count, which is not the same as zero. |
| likeCount | number | null | always | Likes, or the platform's nearest equivalent. Null means not exposed, not zero. |
| commentCount | number | null | always | Comments. Null means not exposed, not zero. |
| shareCount | number | null | always | Shares, reposts, or the platform's nearest equivalent. Null means not exposed, not zero. |
| hashtags | string[] | always | Hashtags or the platform's own topic tags, without the leading #. |
| mentions | string[] | always | Handles mentioned in the post text, without the leading @. |
| taggedUsers | string[] | may be absent | Usernames tagged in the media itself, as distinct from `mentions`, which come from the caption text. Absent when the platform does not report tags; an empty array means it reports none. |
| isSponsored | boolean | null | always | Whether the platform labels the post as an ad, promoted content or a paid partnership. |
| publishedAt | string | null | always | When the post was published. Usually an ISO 8601 timestamp; some platforms expose only a date or relative text such as "3 days ago". |
| fetchedAt | string | always | When this record was fetched from the platform, as an ISO 8601 timestamp. A cached response keeps the time of the original fetch. |
curl
curl "$API/v1/kick/clip?url=8XkPqR2nLvE&cache_max_age=7d" \
-H "x-api-key: $KEY"TypeScript
const query = new URLSearchParams({
url: '8XkPqR2nLvE',
cache_max_age: '7d',
});
const response = await fetch(`${API}/v1/kick/clip?${query}`, {
headers: { 'x-api-key': KEY },
});
const body = await response.json();
if (!body.success) throw new Error(body.error.code);
// 1 credit, 0 on a cache hit
console.log(body.data, body.meta.creditsCharged);Python
Python
import os, httpx
r = httpx.get(
f"{os.environ['API']}/v1/kick/clip",
params={
"url": "8XkPqR2nLvE",
"cache_max_age": "7d",
},
headers={"x-api-key": os.environ["KEY"]},
timeout=30,
)
body = r.json()
if not body["success"]:
raise RuntimeError(body["error"]["code"])
print(body["data"], body["meta"]["creditsCharged"])Response codes
| 200 | Success |
| 400 | invalid_request. Not charged |
| 401 | missing_api_key / invalid_api_key / revoked_api_key. Never a billing error |
| 402 | insufficient_credits. The key is valid, the balance is not |
| 429 | daily_cap_exceeded or upstream_rate_limited. Not charged |
| 501 | not_configured. This deployment is not set up to serve this endpoint. Not charged. |
| 502 | upstream_blocked / upstream_schema_drift. Not charged |
| 504 | upstream_timeout. Not charged |