开发者文档

TikTok Scraper API

采集为异步:提交 run → 轮询 → 取数。完整流程见 快速开始;统一响应信封 / run 状态机 / 计费 / 错误码见 认证与错误处理。本页只列各端点的 target 字段输出字段


快速说明

  • Base URLhttps://api.antsdata.com/v1
  • 方法与路径:提交 run 均为 POST /v1/scraper/tiktok/<资源>;轮询/取数/下载走通用的 GET /v1/scraper/runs/{id}(见快速开始
  • 鉴权:请求头 Authorization: Bearer ants_xxx(静态 API Key)
  • Content-Typeapplication/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 采集视频评论(可含二级回复)

profileprofile-url 底层出参一致,区别只在入参入口:profile 以用户名为主,profile-url 以主页链接为主(两者均可另传对方字段,二选一即可)。


Profile — 账号资料(用户名搜索)

POST /v1/scraper/tiktok/profile

target 字段targets[] 每个元素):

字段 类型 必填 说明
username string 二选一 TikTok 用户名(不带 @;与 profileUrl 二选一)
profileUrl string 二选一 主页链接(URL 格式;与 username 二选一)

输出字段(取数时 recordsitems[] 每条):

字段 类型 说明
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 二选一)

输出字段(取数时 recordsitems[] 每条):

字段 类型 说明
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 生效)

输出字段(取数时 recordsitems[] 每条):

字段 类型 说明
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 话题名称(不含 #

输出字段(取数时 recordsitems[] 每条):

字段 类型 说明
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 搜索关键词(不支持算子 / 正则)

输出字段(取数时 recordsitems[] 每条):

字段 类型 说明
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 时无效)

输出字段(取数时 recordsitems[] 每条):

字段 类型 说明
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 下载整份产物(端到端示例详见快速开始)。


下一步


FAQ

Q: 一个 run 能采集多个账号 / 话题 / 关键词吗?

可以。targets 是数组,一个 run 可含多个目标,逐目标成败见轮询返回的 tasks[](详见认证与错误处理)。

Q: profileprofile-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 都实时采集,返回目标平台当前的数据。