Documentation Index
Fetch the complete documentation index at: https://rocks.docs.rive.wtf/llms.txt
Use this file to discover all available pages before exploring further.
Every API key is tied to one IP. To apply for a key, DM southctrl on Discord.
Use the endpoint path below, replace the required params, and send Authorization: Bearer YOUR_API_KEY.
Most Used Endpoints
User
Look up a TikTok user
Video
Fetch video metadata
Download
Download a TikTok video
FYP Feed
Browse the #fyp hashtag feed
Use video for metadata and download when you need the file itself. Use fyp to browse trending content from the For You Page hashtag.
Get User
Get public profile information for a TikTok user.
Endpoint
Query Parameters
| Parameter | Type | Required | Description |
|---|
| username | string | Yes | TikTok username (without @ symbol) |
Example Request
curl -X GET "https://rocks.rive.wtf/api/tiktok/user?username=tiktok" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response
{
"success": true,
"data": {
"user": {
"id": "107955",
"uniqueId": "tiktok",
"nickname": "TikTok",
"signature": "One TikTok can make a big impact",
"avatar": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:720:720.jpeg?...",
"avatarThumb": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:720:720.jpeg?...",
"avatarMedium": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:720:720.jpeg?...",
"avatarLarger": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:720:720.jpeg?...",
"verified": true,
"privateAccount": false
},
"stats": {
"followerCount": 93500000,
"followingCount": 3,
"heartCount": 456700000,
"videoCount": 1420
}
}
}
Response Fields
User Object
| Field | Type | Description |
|---|
| id | string | TikTok user ID |
| uniqueId | string | Username/handle |
| nickname | string | Display name |
| signature | string | User bio/description |
| avatar | string | Avatar URL (720x720) |
| avatarThumb | string | Small avatar URL (100x100) |
| avatarMedium | string | Medium avatar URL (720x720) |
| avatarLarger | string | Large avatar URL (1080x1080) |
| verified | boolean | Verification status (blue checkmark) |
| privateAccount | boolean | Whether account is private |
Stats Object
| Field | Type | Description |
|---|
| followerCount | number | Total number of followers |
| followingCount | number | Number of accounts this user follows |
| heartCount | number | Total likes across all videos |
| videoCount | number | Total number of videos posted |
Get Video
Get detailed information about a TikTok video.
Endpoint
Query Parameters
| Parameter | Type | Required | Description |
|---|
| url | string | Yes | Full TikTok video URL |
Example Request
curl -X GET "https://rocks.rive.wtf/api/tiktok/video?url=https://www.tiktok.com/@username/video/7602002368330239239" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response
{
"success": true,
"data": {
"id": "7602002368330239239",
"desc": "#roblo #fyppppppppppppppppppppppp #dahood #montage #dahoodmontage",
"createTime": "2026-02-01T20:51:52+00:00",
"url": "https://v16-webapp-prime.us.tiktok.com/video/tos/alisg/tos-alisg-pve-0037/...",
"stats": {
"playCount": 13400,
"diggCount": 427,
"commentCount": 76,
"shareCount": 51,
"collectCount": 78
},
"author": {
"id": "7499271041357759543",
"uniqueId": "high0ffxanax",
"nickname": "xanax",
"avatarMedium": "https://p16-common-sign.tiktokcdn-us.com/tos-alisg-avt-0068/85d0054ef90ece359480ef575f9ef6a9~tplv-tiktokx-cropcenter:720:720.jpeg?...",
"verified": false,
"privateAccount": false,
"stats": {
"followerCount": 202,
"heartCount": 3890,
"videoCount": 15
}
}
}
}
Response Fields
Video Data
| Field | Type | Description |
|---|
| id | string | Video ID |
| desc | string | Video description/caption |
| createTime | string | ISO 8601 timestamp when video was posted |
| url | string | Direct video playback URL |
Video Stats
| Field | Type | Description |
|---|
| playCount | number | Number of video views |
| diggCount | number | Number of likes |
| commentCount | number | Number of comments |
| shareCount | number | Number of shares |
| collectCount | number | Number of saves/bookmarks |
Author Object
| Field | Type | Description |
|---|
| id | string | Author’s user ID |
| uniqueId | string | Author’s username |
| nickname | string | Author’s display name |
| avatarMedium | string | Author’s profile picture URL |
| verified | boolean | Author verification status |
| privateAccount | boolean | Whether author’s account is private |
| stats | object | Author’s follower/like statistics |
Download Video
Download a TikTok video as an MP4 file.
Endpoint
Query Parameters
| Parameter | Type | Required | Description |
|---|
| url | string | Yes | Full TikTok video URL |
Example Request
curl -X GET "https://rocks.rive.wtf/api/tiktok/download?url=https://www.tiktok.com/@username/video/7602002368330239239" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o video.mp4
Response
Returns the video file as MP4 (video/mp4 content type) with appropriate headers for download.
Response Headers:
Content-Type: video/mp4
Content-Disposition: attachment; filename="[video_id].mp4"
Content-Length: [file_size_in_bytes]
Success Response
Status Code: 200
Content Type: video/mp4
Content Length: 3393144 bytes
video file is ready to download and save locally.
Error Response
If the video URL is invalid or inaccessible:
{
"error": "Invalid TikTok URL"
}
Get FYP Feed
Fetch a paginated list of trending videos from TikTok’s #fyp hashtag feed.
Endpoint
Query Parameters
| Parameter | Type | Required | Description |
|---|
| cursor | number | No | Pagination cursor (default: 0) |
| count | number | No | Number of videos to return, max 50 (default: 30) |
Save the cursor value from each response and pass it back as ?cursor= to page through the feed.
Example Request
curl -X GET "https://rocks.rive.wtf/api/tiktok/fyp?cursor=0&count=30" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response
{
"success": true,
"data": {
"items": [
{
"id": "7503690966822440223",
"desc": "wholesome #fyp #nature",
"url": "https://www.tiktok.com/@colbyirv/video/7503690966822440223",
"playUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/...",
"stats": {
"playCount": 334300000,
"diggCount": 52000000,
"commentCount": 253700,
"shareCount": 8100000,
"collectCount": 0
},
"author": {
"uniqueId": "colbyirv",
"nickname": "colbyirv",
"avatarThumb": "https://p16-common-sign.tiktokcdn-us.com/...",
"verified": false
}
},
{
"id": "7299279845215702315",
"desc": "#viral #foryou #fyp #explore #christmas 🌲",
"url": "https://www.tiktok.com/@foryou_sd/video/7299279845215702315",
"playUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/...",
"stats": {
"playCount": 135200000,
"diggCount": 16000000,
"commentCount": 66100,
"shareCount": 412000,
"collectCount": 0
},
"author": {
"uniqueId": "foryou_sd",
"nickname": "ForYou",
"avatarThumb": "https://p16-common-sign.tiktokcdn-us.com/...",
"verified": false
}
}
],
"cursor": 30,
"hasMore": true,
"count": 30
}
}
Response Fields
Top-Level Data Object
| Field | Type | Description |
|---|
| items | array | List of video objects |
| cursor | number | Cursor to pass for the next page |
| hasMore | boolean | Whether more results are available |
| count | number | Number of items returned in this response |
Item Object
| Field | Type | Description |
|---|
| id | string | Video ID |
| desc | string | Video caption/description |
| url | string | Full TikTok URL to the video (tiktok.com/@user/video/ID) |
| playUrl | string | Direct MP4 stream URL |
| stats | object | Engagement metrics |
| author | object | Author info |
Item Stats
| Field | Type | Description |
|---|
| playCount | number | Total views |
| diggCount | number | Total likes |
| commentCount | number | Total comments |
| shareCount | number | Total shares |
| collectCount | number | Total saves/bookmarks |
Item Author
| Field | Type | Description |
|---|
| uniqueId | string | Author’s username/handle |
| nickname | string | Author’s display name |
| avatarThumb | string | Author’s thumbnail avatar URL |
| verified | boolean | Whether the author is verified |
Error Responses
Invalid Parameters
{
"error": "Invalid 'cursor' or 'count' parameter"
}
Status Code: 400
TikTok Upstream Error
{
"error": "TikTok returned a non-zero status",
"statusCode": 10000
}
Status Code: 502
Fetch Failed
{
"error": "Failed to fetch FYP feed: <reason>"
}
Status Code: 502
Error Responses
Invalid Username
{
"error": "Missing 'username' parameter"
}
Status Code: 400
User Not Found
{
"error": "User not found: @username"
}
Status Code: 404
Invalid Video URL
{
"error": "Invalid TikTok URL"
}
Status Code: 400
Missing URL Parameter
{
"error": "Missing 'url' parameter"
}
Status Code: 400
Rate Limiting
- Max Retries: 3 attempts per request
- Timeout: 8 seconds per request
- Retry Delay: 1.5 seconds between retries
- Only public TikTok profiles and videos can be accessed
- Private accounts will return limited information
- Video URLs must be complete (e.g.,
https://www.tiktok.com/@username/video/ID)
- Downloaded videos are typically 3-10 MB in size
- Video download links may expire after a few hours
- API uses watermark-free direct video URLs
- FYP
playUrl links are time-limited — fetch and use promptly or proxy through download
Use Cases
- Social Media Analytics - Track TikTok influencer metrics and engagement
- Content Archival - Download and backup TikTok videos
- Discord Bots - Display TikTok user stats and video information in Discord
- Web Scrapers - Collect TikTok data for research and analysis
- Video Managers - Organize and manage downloaded TikTok content
- Engagement Tracking - Monitor video performance metrics over time
- Trend Discovery - Browse the FYP feed to surface viral and trending content