Get User Videos
curl --request GET \
--url https://scrapebadger.com/v1/tiktok/users/{username}/videos \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/tiktok/users/{username}/videos"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/tiktok/users/{username}/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/tiktok/users/{username}/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/tiktok/users/{username}/videos"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/tiktok/users/{username}/videos")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/tiktok/users/{username}/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"videos": [
{
"id": "7234567890123456789",
"description": "new dance #fyp #dance",
"create_time_utc": 1700000000,
"create_time_at": "2023-11-14T22:13:20Z",
"region": "US",
"url": "https://www.tiktok.com/@charlidamelio/video/7234567890123456789",
"share_url": "https://www.tiktok.com/@charlidamelio/video/7234567890123456789",
"aweme_type": 0,
"author": {
"id": "6784129854561813509",
"sec_uid": "MS4wLjABAAAA...",
"unique_id": "charlidamelio",
"nickname": "charli d'amelio",
"avatar_thumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"signature": "no bio yet",
"verified": true,
"follower_count": 155600000,
"following_count": 1300,
"heart_count": 11800000000,
"video_count": 2700,
"region": "US"
},
"music": {
"id": "7011111111111111111",
"title": "original sound",
"author_name": "charli d'amelio",
"duration": 15,
"play_url": "https://sf16-sg.tiktokcdn.com/music.mp3",
"original": true
},
"stats": {
"play_count": 24000000,
"digg_count": 3100000,
"comment_count": 18000,
"share_count": 42000,
"collect_count": 99000
},
"video": {
"height": 1024,
"width": 576,
"duration": 15,
"ratio": "540p",
"format": "mp4",
"cover": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"play_addr": "https://v16-webapp.tiktok.com/video.mp4",
"download_addr": "https://v16-webapp.tiktok.com/download.mp4",
"has_watermark": true
},
"hashtags": [
"fyp",
"dance"
],
"mentions": [],
"challenges": [
{
"id": "229207",
"title": "fyp",
"desc": "",
"is_commerce": false
}
],
"is_slideshow": false,
"image_urls": [],
"is_ad": false,
"is_pinned": false
}
],
"pagination": {
"has_more": true,
"cursor": "30",
"count": 30,
"search_id": null
},
"region": "US"
}Users
Get User Videos
A user’s posted videos, newest first, with cursor pagination.
GET
/
v1
/
tiktok
/
users
/
{username}
/
videos
Get User Videos
curl --request GET \
--url https://scrapebadger.com/v1/tiktok/users/{username}/videos \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/tiktok/users/{username}/videos"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/tiktok/users/{username}/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/tiktok/users/{username}/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/tiktok/users/{username}/videos"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/tiktok/users/{username}/videos")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/tiktok/users/{username}/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"videos": [
{
"id": "7234567890123456789",
"description": "new dance #fyp #dance",
"create_time_utc": 1700000000,
"create_time_at": "2023-11-14T22:13:20Z",
"region": "US",
"url": "https://www.tiktok.com/@charlidamelio/video/7234567890123456789",
"share_url": "https://www.tiktok.com/@charlidamelio/video/7234567890123456789",
"aweme_type": 0,
"author": {
"id": "6784129854561813509",
"sec_uid": "MS4wLjABAAAA...",
"unique_id": "charlidamelio",
"nickname": "charli d'amelio",
"avatar_thumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"signature": "no bio yet",
"verified": true,
"follower_count": 155600000,
"following_count": 1300,
"heart_count": 11800000000,
"video_count": 2700,
"region": "US"
},
"music": {
"id": "7011111111111111111",
"title": "original sound",
"author_name": "charli d'amelio",
"duration": 15,
"play_url": "https://sf16-sg.tiktokcdn.com/music.mp3",
"original": true
},
"stats": {
"play_count": 24000000,
"digg_count": 3100000,
"comment_count": 18000,
"share_count": 42000,
"collect_count": 99000
},
"video": {
"height": 1024,
"width": 576,
"duration": 15,
"ratio": "540p",
"format": "mp4",
"cover": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"play_addr": "https://v16-webapp.tiktok.com/video.mp4",
"download_addr": "https://v16-webapp.tiktok.com/download.mp4",
"has_watermark": true
},
"hashtags": [
"fyp",
"dance"
],
"mentions": [],
"challenges": [
{
"id": "229207",
"title": "fyp",
"desc": "",
"is_commerce": false
}
],
"is_slideshow": false,
"image_urls": [],
"is_ad": false,
"is_pinned": false
}
],
"pagination": {
"has_more": true,
"cursor": "30",
"count": 30,
"search_id": null
},
"region": "US"
}Each request costs 8 credits. Failed requests are not charged.
pagination.cursor unchanged with the same username and region to continue.
Guest cursors last up to 15 minutes and can expire earlier when their session is
replaced (HTTP 410). Public metadata can omit native-only fields. CDN links may
return 403 and are not guaranteed downloads.Authorizations
Path Parameters
The user's @handle (unique_id), without the leading '@'.
Query Parameters
Content region (ISO 3166-1 alpha-2). Routes the request through a proxy and signer for that locale.
Maximum number of items to return (1-50).
Required range:
1 <= x <= 50Pagination cursor — pass the pagination.cursor value from a prior response to fetch the next page. Omit for the first page.

