采集为异步:提交 run → 轮询 → 取数。完整流程见 快速开始;统一响应信封 / run 状态机 / 计费 / 错误码见 认证与错误处理。本页只列各端点的 target 字段与输出字段。
快速说明
- Base URL:
https://api.antsdata.com/v1 - 方法与路径:提交 run 均为
POST /v1/scraper/tiktok/<资源>;轮询/取数/下载走通用的GET /v1/scraper/runs/{id}(见快速开始) - 鉴权:请求头
Authorization: Bearer ants_xxx(静态 API Key) - Content-Type:
application/json - 提交体:统一
{ "deliveryMode": "async", "recordLimit": 1000, "targets": [ … ] };targets[]每个元素的字段见下方各端点「target 字段」,一个 run 可含多个 target(逐目标成败看轮询返回的tasks[])。
💡 也可用
deliveryMode: "sync"同步模式(小任务阻塞等终态,超时自动 fallback 转轮询)——详见 快速开始 · 同步模式。
端点一览
| 端点 | 路径 | 说明 |
|---|---|---|
| 账号资料(用户名) | POST /v1/scraper/tiktok/profile |
按用户名采集账号公开资料 |
| 账号资料(主页链接) | POST /v1/scraper/tiktok/profile-url |
按主页链接采集账号公开资料 |
| 用户视频 | POST /v1/scraper/tiktok/videos |
采集指定账号发布的视频 |
| 话题视频 | POST /v1/scraper/tiktok/hashtag |
采集某话题(hashtag)下的视频 |
| 搜索视频 | POST /v1/scraper/tiktok/search |
按关键词搜索视频 |
| 评论 | POST /v1/scraper/tiktok/comments |
采集视频评论(可含二级回复) |
profile与profile-url底层出参一致,区别只在入参入口:profile以用户名为主,profile-url以主页链接为主(两者均可另传对方字段,二选一即可)。
Profile — 账号资料(用户名搜索)
POST /v1/scraper/tiktok/profile
target 字段(targets[] 每个元素):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
username |
string | 二选一 | TikTok 用户名(不带 @;与 profileUrl 二选一) |
profileUrl |
string | 二选一 | 主页链接(URL 格式;与 username 二选一) |
输出字段(取数时 records 的 items[] 每条):
| 字段 | 类型 | 说明 |
|---|---|---|
userId |
string | TikTok 内部用户 ID |
username |
string | 用户名 |
nickname |
string | 昵称 |
signature |
string | 个性签名 / Bio |
avatarUrl |
string | 头像 URL |
followers |
number | 粉丝数 |
following |
number | 关注数 |
totalLikes |
number | 累计获赞数 |
videosCount |
number | 视频总数 |
isVerified |
boolean | 是否认证 |
isPrivate |
boolean | 是否为私密账号 |
profileUrl |
string | 主页链接 |
提交示例:
curl -X POST "https://api.antsdata.com/v1/scraper/tiktok/profile" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deliveryMode": "async",
"recordLimit": 1000,
"targets": [
{ "username": "khaby.lame" },
{ "username": "nike" }
]
}'
返回 HTTP 201 +
{ "id": <run 号>, "status": "queued" },随后按快速开始轮询取数。
Profile URL — 账号资料(主页链接搜索)
POST /v1/scraper/tiktok/profile-url
target 字段(targets[] 每个元素):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
profileUrl |
string | 二选一 | TikTok 主页链接(URL 格式;与 username 二选一) |
username |
string | 二选一 | TikTok 用户名(不带 @;与 profileUrl 二选一) |
输出字段(取数时 records 的 items[] 每条):
| 字段 | 类型 | 说明 |
|---|---|---|
userId |
string | TikTok 内部用户 ID |
username |
string | 用户名 |
nickname |
string | 昵称 |
signature |
string | 个性签名 / Bio |
avatarUrl |
string | 头像 URL |
followers |
number | 粉丝数 |
following |
number | 关注数 |
totalLikes |
number | 累计获赞数 |
videosCount |
number | 视频总数 |
isVerified |
boolean | 是否认证 |
isPrivate |
boolean | 是否为私密账号 |
profileUrl |
string | 主页链接 |
提交示例:
curl -X POST "https://api.antsdata.com/v1/scraper/tiktok/profile-url" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deliveryMode": "async",
"recordLimit": 1000,
"targets": [
{ "profileUrl": "https://www.tiktok.com/@khaby.lame" }
]
}'
返回 HTTP 201 +
{ "id": <run 号>, "status": "queued" },随后按快速开始轮询取数。
Videos — 用户视频
POST /v1/scraper/tiktok/videos
target 字段(targets[] 每个元素):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
username |
string | ✅ | TikTok 用户名(不带 @) |
sortBy |
string | — | 排序:recent 最新 / popular 最热(默认 recent) |
newestPostDate |
string | — | 最晚发布日期 YYYY-MM-DD(仅 sortBy=recent 生效) |
输出字段(取数时 records 的 items[] 每条):
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 视频 ID |
webUrl |
string | 视频页面链接 |
caption |
string | 视频描述 / 文案 |
createdAt |
string | 发布时间(ISO 8601) |
author |
object | 作者信息 |
author.username |
string | 用户名 |
author.nickname |
string | 昵称 |
author.userId |
string | 用户 ID |
metrics |
object | 互动指标 |
metrics.playCount |
number | 播放次数 |
metrics.diggCount |
number | 点赞数 |
metrics.shareCount |
number | 分享数 |
metrics.commentCount |
number | 评论数 |
video |
object | 视频媒体信息 |
video.downloadUrl |
string | 无水印视频直链(图集为空) |
video.coverUrl |
string | 封面图 URL |
video.duration |
number | 时长(秒)(图集为 0) |
video.width |
number | 宽度 px |
video.height |
number | 高度 px |
images |
array | 图集图片直链列表(仅图集有值,普通视频为空) |
music |
object | 音乐信息 |
music.id |
string | 音乐 ID |
music.title |
string | 曲目名称 |
music.artist |
string | 艺术家 |
music.coverUrl |
string | 音乐封面 URL |
music.playUrl |
string | 音乐试听 URL |
hashtags |
array | 标签列表 |
mentions |
array | @提及 |
提交示例:
curl -X POST "https://api.antsdata.com/v1/scraper/tiktok/videos" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deliveryMode": "async",
"recordLimit": 1000,
"targets": [
{ "username": "khaby.lame", "sortBy": "popular" }
]
}'
返回 HTTP 201 +
{ "id": <run 号>, "status": "queued" },随后按快速开始轮询取数。
Hashtag — 话题视频
POST /v1/scraper/tiktok/hashtag
target 字段(targets[] 每个元素):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
hashtag |
string | ✅ | 话题名称(不含 #) |
输出字段(取数时 records 的 items[] 每条):
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 视频 ID |
webUrl |
string | 视频页面链接 |
caption |
string | 视频描述 / 文案 |
createdAt |
string | 发布时间(ISO 8601) |
author |
object | 作者信息 |
author.username |
string | 用户名 |
author.nickname |
string | 昵称 |
author.userId |
string | 用户 ID |
metrics |
object | 互动指标 |
metrics.playCount |
number | 播放次数 |
metrics.diggCount |
number | 点赞数 |
metrics.shareCount |
number | 分享数 |
metrics.commentCount |
number | 评论数 |
video |
object | 视频媒体信息 |
video.downloadUrl |
string | 无水印视频直链(图集为空) |
video.coverUrl |
string | 封面图 URL |
video.duration |
number | 时长(秒)(图集为 0) |
video.width |
number | 宽度 px |
video.height |
number | 高度 px |
images |
array | 图集图片直链列表(仅图集有值,普通视频为空) |
music |
object | 音乐信息 |
music.id |
string | 音乐 ID |
music.title |
string | 曲目名称 |
music.artist |
string | 艺术家 |
music.coverUrl |
string | 音乐封面 URL |
music.playUrl |
string | 音乐试听 URL |
hashtags |
array | 标签列表 |
mentions |
array | @提及 |
提交示例:
curl -X POST "https://api.antsdata.com/v1/scraper/tiktok/hashtag" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deliveryMode": "async",
"recordLimit": 1000,
"targets": [
{ "hashtag": "comedy" }
]
}'
返回 HTTP 201 +
{ "id": <run 号>, "status": "queued" },随后按快速开始轮询取数。
Search — 搜索视频
POST /v1/scraper/tiktok/search
target 字段(targets[] 每个元素):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
keyword |
string | ✅ | 搜索关键词(不支持算子 / 正则) |
输出字段(取数时 records 的 items[] 每条):
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string | 视频 ID |
webUrl |
string | 视频页面链接 |
caption |
string | 视频描述 / 文案 |
createdAt |
string | 发布时间(ISO 8601) |
author |
object | 作者信息 |
author.username |
string | 用户名 |
author.nickname |
string | 昵称 |
author.userId |
string | 用户 ID |
metrics |
object | 互动指标 |
metrics.playCount |
number | 播放次数 |
metrics.diggCount |
number | 点赞数 |
metrics.shareCount |
number | 分享数 |
metrics.commentCount |
number | 评论数 |
video |
object | 视频媒体信息 |
video.downloadUrl |
string | 无水印视频直链(图集为空) |
video.coverUrl |
string | 封面图 URL |
video.duration |
number | 时长(秒)(图集为 0) |
video.width |
number | 宽度 px |
video.height |
number | 高度 px |
images |
array | 图集图片直链列表(仅图集有值,普通视频为空) |
music |
object | 音乐信息 |
music.id |
string | 音乐 ID |
music.title |
string | 曲目名称 |
music.artist |
string | 艺术家 |
music.coverUrl |
string | 音乐封面 URL |
music.playUrl |
string | 音乐试听 URL |
hashtags |
array | 标签列表 |
mentions |
array | @提及 |
提交示例:
curl -X POST "https://api.antsdata.com/v1/scraper/tiktok/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deliveryMode": "async",
"recordLimit": 1000,
"targets": [
{ "keyword": "web scraping" }
]
}'
返回 HTTP 201 +
{ "id": <run 号>, "status": "queued" },随后按快速开始轮询取数。
Comments — 评论
POST /v1/scraper/tiktok/comments
target 字段(targets[] 每个元素):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
videoUrl |
string | 二选一 | 视频 / 图集 URL(与 videoId 二选一) |
videoId |
string | 二选一 | 数字 aweme_id(与 videoUrl 二选一) |
commentsLimit |
number | — | 顶层评论上限(默认 20,最大 1000) |
includeReplies |
boolean | — | 是否展开二级回复(默认 false) |
repliesLimit |
number | — | 每条评论回复上限(默认 3,最大 20;includeReplies=false 时无效) |
输出字段(取数时 records 的 items[] 每条):
| 字段 | 类型 | 说明 |
|---|---|---|
cid |
string | 评论 ID |
aweme_id |
string | 所属视频 ID |
text |
string | 评论内容 |
create_time |
number | 发布时间戳(Unix 秒) |
digg_count |
number | 点赞数 |
reply_comment_total |
number | 二级回复总数(仅顶层评论) |
comment_language |
string | 评论语言码 |
author_pin |
boolean | 是否作者置顶 |
is_author_digged |
boolean | 视频作者是否点赞 |
status |
number | 评论状态(1 正常) |
user |
object | 评论者 |
user.uid |
string | 用户 ID |
user.unique_id |
string | 用户名 |
user.nickname |
string | 昵称 |
user.sec_uid |
string | secUid |
user.avatar_thumb |
object | 头像(直链在 url_list) |
image_list |
array | 评论图片(图片评论才有;原图直链在 origin_url.url_list) |
text_extra |
array | @提及 / 话题结构 |
reply_comment |
array | 内联二级回复(includeReplies=true 时返回) |
reply_comment.cid |
string | 回复 ID |
reply_comment.text |
string | 回复内容 |
reply_comment.create_time |
number | 回复时间戳(Unix 秒) |
reply_comment.digg_count |
number | 回复点赞数 |
reply_comment.reply_id |
string | 父评论 ID |
reply_comment.reply_to_username |
string | 回复目标用户名 |
reply_comment.user |
object | 回复者(结构同顶层 user) |
提交示例:
curl -X POST "https://api.antsdata.com/v1/scraper/tiktok/comments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"deliveryMode": "async",
"recordLimit": 1000,
"targets": [
{
"videoUrl": "https://www.tiktok.com/@khaby.lame/video/7641693768831225101",
"commentsLimit": 100,
"includeReplies": true
}
]
}'
返回 HTTP 201 +
{ "id": <run 号>, "status": "queued" },随后按快速开始轮询取数。
取数
提交后
GET /v1/scraper/runs/{id}轮询至succeeded,再GET /v1/scraper/runs/{id}/records?page=1&pageSize=20分页取数,或GET /v1/scraper/runs/{id}/download?format=json|csv|excel下载整份产物(端到端示例详见快速开始)。
下一步
- 平台指南: X · Instagram · Facebook · LinkedIn · Google · YouTube · Amazon
- 同步搜索:Google SERP
- 认证与错误处理 — 统一响应信封、run 状态机、计费与错误码
FAQ
Q: 一个 run 能采集多个账号 / 话题 / 关键词吗?
可以。targets 是数组,一个 run 可含多个目标,逐目标成败见轮询返回的 tasks[](详见认证与错误处理)。
Q: profile 与 profile-url 有什么区别?
两者出参完全一致,区别只在入参入口:profile 按用户名采集、profile-url 按主页链接采集。两个端点都可另传对方字段(username / profileUrl 二选一),按手头已有的标识选端点即可。
Q: 私密或不存在的账号怎么处理?
该目标在 tasks[] 中标为 failed 并带 errorMessage,其余目标照常出数;失败目标不计费(部分成功照常按成功条数结算)。
Q: 账号视频为什么不再有 searchMode?
原先用 searchMode(user/hashtag/keyword)合并的能力已拆成三个独立端点:账号视频用 /videos,话题用 /hashtag,关键词用 /search。请按端点选择,不再传 searchMode。
Q: comments 的时间戳是什么格式?
create_time 是 Unix 秒级时间戳(如 1781827200),需要可读时间请自行转换为 ISO 8601。
Q: 数据是实时的吗?
是。每个 run 都实时采集,返回目标平台当前的数据。
