
Douyin TikTok Download API(代码中简称 DTK)是一个开源的、可自托管的抖音与 TikTok 数据采集接口项目,作者是 GitHub 上的 Evil0ctal。很多人最早知道它,是因为它能解析短视频分享链接、取出无水印的媒体地址;而到了现在的 v5,它已经不只是一个「去水印解析器」,更像是一整套抖音 / TikTok 数据服务:作品、作者、评论、合集、收藏夹等数据都能通过接口拿到,同时提供 REST API、MCP 和 CLI 三种调用方式,解析过的内容还会自动归档进你自己的 PostgreSQL。
它是自托管的——数据、身份池、归档都在你自己的服务器上,一条 docker compose up 就能跑起来。截至 2026 年 9 月,项目在 GitHub 上已获得 2 万以上 Star,最新正式版本为 v5.1.1(2026 年 9 月 23 日发布),采用 Apache-2.0 许可,允许商业使用与闭源集成。
一、Douyin TikTok Download API 是什么?
简单说,它相当于在抖音、TikTok 的 Web 数据和你自己的应用之间架了一层接口服务。你的程序通过 REST API 拿 JSON;支持 Model Context Protocol 的 AI 客户端(如 Claude Code、Codex CLI)通过 MCP 调用它提供的工具;终端里可以用 dtk 命令直接操作。Web 控制台则负责管理身份池、调度器、任务、资料库、下载、日志和 API Key。
三种调用方式共用同一套 service 层——MCP 并不是把 REST API 再转发一遍,而是直接调用相同的业务逻辑。入口分别位于:
- REST API:
/api/v1/...,适合脚本、后台程序与自动化服务; - MCP:
/mcp,可接入 Claude Code、Claude Desktop、Codex CLI 等支持 Model Context Protocol 的客户端; - CLI:
dtk --help,适合直接在服务器终端操作。
接口文档可以从 /docs(控制台内嵌的 Swagger UI)、/swagger 或 /redoc 查看,中英双语。
这里需要先说明一点:它是第三方开源项目,不属于抖音或 TikTok 官方 API,和 TikTok 官方的 TikTok for Business MCP Server 也不是同一类东西——后者面向广告投放业务,前者面向内容数据的读取、归档与二次开发。项目访问的是平台 Web 端接口,因此即便部署在你自己的服务器上,账号权限、IP 限制、平台风控和服务条款这些边界依然存在。

二、它能抓取哪些抖音和 TikTok 数据?
当前接口覆盖的范围包括单条视频与图集作品、作者公开资料、作者作品列表、作者喜欢列表、合集与播放列表、评论与评论回复、关键词搜索、收藏夹、媒体地址,以及归档后的历史数据。各平台的具体支持情况如下:
| 采集能力 | 抖音 Douyin | TikTok |
|---|---|---|
| 单帖(视频或图集) | 支持 | 支持 |
| 作者主页 / 作品列表 | 支持 | 支持 |
| 作者点赞的作品 | 支持 | 支持 |
| 合集 / 播放列表 | 支持 | 支持 |
| 收藏夹 | 支持 | 支持 |
| 评论与评论回复 | 支持 | 支持 |
| 关键词搜索 | 支持 | 支持 |
| 粉丝 / 关注列表 | 不提供 | 支持 |
| 作者转发列表 | 不提供 | 支持 |
抖音的粉丝与关注列表需要登录会话,游客身份拿不到,所以 v5 没有把这两个接口注册成面向所有身份的公开接口。另外,v5 不再支持 B 站(v4 支持),原因是签名与身份机制不同,暂未迁移;小红书、快手、微博也不在 v5 的支持平台内。
链接识别做得比较宽容,下面这些形式都能直接交给解析接口处理:
https://v.douyin.com/L4NpDJ6/
https://www.douyin.com/video/7126745726494821640
https://www.douyin.com/jingxuan?modal_id=7660875690212492466
https://www.tiktok.com/@evil0ctal/video/7156033831819037994
https://www.tiktok.com/t/ZTR9nkkmL/
2.84 nqe:/ 复制打开抖音,看看…… https://v.douyin.com/L4FJNR3/
短链接会被跟踪展开,埋在一整段分享文本里的链接也会被提取出来,post id 则先按平台自身的编码规则校验一遍。控制台的调试台把全部接口列在左侧,选中后右侧直接填参数、发起真实调用并查看返回的 JSON:


三、v5 相比 v4,变了什么?
v5 并不是在 v4 上继续改出来的小版本。main 和 v4 没有共同祖先,v5 是从新的空分支重新实现的,所以接口、部署方式、配置结构和数据模型都发生了明显变化。其中有三处变化最值得说。
1. 身份池取代手工贴 Cookie
v4 时代的常见做法是:从浏览器里复制 Cookie,粘贴进 config.yaml。Cookie 一失效,相关请求就跟着一起失败。v5 把 Cookie、浏览器环境和相关状态整理成了独立的身份池;启用可选的 CloakBrowser 浏览器组件后,系统会自动铸造游客身份,并根据实际请求结果维护每个身份的健康度。调度器会处理身份健康度、身份轮换、每个身份的独占锁、每个「身份 + 接口」的独立限流、接口级熔断和结构化请求日志。某个身份连续遇到风控或接口错误时,可以降低它的使用优先级,而不是继续把全部请求压在同一个失效身份上。

如果没有启用浏览器组件,也仍然可以手动导入 Cookie。个人登录 Cookie 主要用于取需要登录权限的数据,并不是运行整个项目的必要条件。
2. 默认异步任务:返回 202,而不是一直等
v5 的数据接口默认不是「请求发出去就等结果回来」。不传 ?wait= 或传 ?wait=0 时,服务端会直接返回 HTTP 202 和一个 task_id:
POST /api/v1/parse -> 202 {"task_id": "...", "state": "queued"}
GET /api/v1/tasks/{task_id} -> 200 {"state": "done", "data": {...}}
拿到 task_id 后可以继续查询任务状态。如果只是想解析一条链接、尽量在一次请求里拿到结果,可以加上 ?wait=N,官方 Quick Start 的调用方式类似这样:
API_KEY='dtk_...'
curl -sS -X POST \
'http://127.0.0.1:8000/api/v1/parse?wait=25' \
-H "X-API-Key: ${API_KEY}" \
-H 'content-type: application/json' \
-d '{"url":"你的抖音或 TikTok 分享链接"}'
任务在 25 秒内结束会直接返回 200 和结果;如果还没结束,返回的仍然是 202 和任务 ID——这并不表示解析失败,只是任务还在跑。当前 api.max_wait_seconds 默认上限为 30 秒,请求的等待时间超过实例上限会直接返回参数错误。
3. 解析即归档
v4 解析完就结束了,v5 会把解析过的内容存进 PostgreSQL(配套 TimescaleDB),Redis 承担任务状态、缓存与调度数据。好处是:上游内容后来被删除,本地已归档的数据仍然保留,具体取决于实例自己的归档设置。


v4 与 v5 的主要差异可以概括成这张表:
| 对比维度 | v4 | v5 |
|---|---|---|
| 身份来源 | 手工复制 Cookie 写入配置 | 身份池 + 可选自动铸造游客身份 |
| 调用风格 | 同步 | 默认异步任务(202 + task_id) |
| 数据留存 | 无 | PostgreSQL + Redis,解析内容可归档 |
| 访问控制 | 较简单 | 带 scope 和 role 的 API Key |
| 管理界面 | 单个 PyWebIO 页面 | React Web 控制台 |
| 接入方式 | REST | REST + MCP + CLI |
| 支持平台 | 抖音、TikTok、B站 | 抖音、TikTok |
| 部署方式 | pip 安装后运行脚本 | docker compose up |
v4 的代码仍然保留在 v4 分支,最后一个正式发布版是 V4.1.2。要留在 v4 必须锁定镜像 tag,因为 latest 已经跟随 main 走到 v5。
四、REST API、MCP 和 CLI 怎么选?
三个入口共用同一套业务逻辑,选哪个取决于你的使用场景:
- REST API 适合网站、后台程序、Python 脚本或自动化服务。知道接口路径和参数后直接发 HTTP 请求即可。
- MCP 适合 Claude Code、Claude Desktop、Codex CLI 以及其他支持 Model Context Protocol 的客户端。Agent 可以发现实例提供的工具,再根据指令调用对应功能——也就是说,你可以直接让 AI 助手去查一个抖音作者的全部作品。
- CLI 适合直接在服务器终端操作,能力和 REST 一致。
Web 控制台不属于另一套数据协议,它负责实例管理。另外项目还提供 iOS 快捷指令入口(/api/v1/ios/shortcut),可以做成手机上的解析动作。

五、部署:一条 docker compose up 跑起来
v5 主要通过 Docker Compose 部署,建议使用 v2.24 或更新的版本。核心服务包含 API、Worker、数据库和 Redis;下载器和用于自动铸造游客身份的浏览器组件可以按需启用。
方式一:引导式安装脚本(最省事)
curl -fsSL https://raw.githubusercontent.com/Evil0ctal/Douyin_TikTok_Download_API/main/install/install.sh -o install.sh
less install.sh # 先读一遍是个好习惯
bash install.sh
这个脚本装完之后同时也是一个运维工具:再次运行会找到已有安装并打开管理菜单,可以查看状态、升级(对比最新 GitHub Release)、改密码、增加管理员、备份恢复、调整运行时设置、清理磁盘、停止或卸载。加 --manage 可以直接进入管理菜单。
方式二:手动 Docker Compose
先获取源码,再生成 .env(仓库中不含默认密码或密钥):
git clone https://github.com/Evil0ctal/Douyin_TikTok_Download_API.git
cd Douyin_TikTok_Download_API
POSTGRES_PASSWORD=$(openssl rand -hex 24)
REDIS_PASSWORD=$(openssl rand -hex 24)
cat > .env <<EOF
DTK_SECRET_KEY=$(openssl rand -base64 48)
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
REDIS_PASSWORD=${REDIS_PASSWORD}
DTK_DATABASE_URL=postgresql+asyncpg://dtk:${POSTGRES_PASSWORD}@postgres:5432/dtk
DTK_REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379/0
EOF
然后启动。默认 API 绑定在 127.0.0.1:8000,日志里会打印一个 setup token,用它创建第一个管理员:
docker compose -p dtk -f docker/compose.yml up -d
docker compose -p dtk -f docker/compose.yml logs api
想跳过本地构建、直接用已发布的镜像,设置好这两个环境变量再 pull 即可:
export DTK_IMAGE=evil0ctal/douyin_tiktok_download_api
export DTK_IMAGE_TAG=latest
docker compose -p dtk -f docker/compose.yml pull
docker compose -p dtk -f docker/compose.yml up -d
镜像同时支持 linux/amd64 和 linux/arm64,群晖、威联通这类 x86 / ARM 机型都能跑。如果你手上正好有 NAS,部署思路和「一站式通用 NAS Docker Compose 模板」那套流程是一致的,把它当成一个普通的 Compose 项目即可。
中国大陆服务器注意:拉取镜像前建议先切换镜像源,否则很可能因为网络超时失败。
更新与回滚
# 走已发布镜像的推荐方式
docker compose -p dtk -f docker/compose.yml pull api worker downloader
docker compose -p dtk -f docker/compose.yml run --rm migrate
docker compose -p dtk -f docker/compose.yml up -d
数据不会丢:命名卷(postgres-data、redis-data、media-data)在重建容器后依然存在。回滚需要把 DTK_IMAGE_TAG 指向之前的版本号或 sha- 值;migrations 没有自动降级,升级前务必备份数据库。
部署完成后,控制台的调度器页面能实时看到身份健康度、接口成功率与熔断情况,方便判断实例是否正常:

六、接口文档、Web 控制台与在线 Demo
不想先部署、只想看看长什么样,可以直接访问作者提供的公开 Demo:https://demo.douyin.wtf/。Demo 是共享的只读实例,登录页已经填好演示账号,无需注册;可以查看调试台、调度器、资料库和接口文档,但所有操作都不会被保存,涉及凭据的页面也做了隐藏。
Demo 当前限制为 每 10 秒 30 次请求,超出后进入 10 秒冷却。它可能随时重置、暂停或升级,不适合当作正式应用的生产 API,也不要往里提交自己的个人 Cookie、代理账号或其他敏感凭据。
接口文档页面内嵌了按当前界面语言渲染的 Swagger UI,能直接看到全部路径与操作数量:

七、常见问题(FAQ)
Douyin TikTok Download API 是官方 API 吗?
不是。它是第三方开源项目,与抖音、TikTok 官方 API 以及 TikTok for Business MCP Server 都不是同一项服务。
所谓的「无水印」是 AI 擦除水印吗?
不是。项目做的是媒体地址解析——从平台返回的数据里挑选平台本身就提供的干净媒体流,而不是用 Photoshop 或 AI Inpainting 去修画面。如果上游没有提供对应的媒体流,接口也无法自己重新生成一份原始视频。这一点和站内介绍过的「抖音批量下载工具」思路类似,区别是 DTK 提供的是可编程接口而不是桌面客户端。
必须提供自己的 Cookie 吗?
不一定。启用浏览器身份组件后可以自动铸造游客身份;只有需要登录权限的数据,才可能需要导入自己的登录身份。
为什么接口返回 202?
因为 v5 的数据接口默认异步执行。返回的 task_id 可以继续查询结果,也可以加 ?wait=N 等待一段时间。
可以连接 Claude Code 吗?
可以。项目提供 /mcp 接口,用于连接支持 Model Context Protocol 的客户端。类似的 MCP 实践也可以参考站内的「ai-memory:让 Claude Code、Codex 与 Cursor 共享项目记忆」。
v4 可以直接升级到 v5 吗?
不能按普通小版本升级来处理。v5 是重新实现的版本,旧版接口、配置和部署方式需要重新适配。
自托管之后还会被限流吗?
会。自托管控制的是你自己的 API、数据库、身份池和归档服务,真正的数据仍然来自抖音和 TikTok。上游平台依旧可以根据 IP、Cookie、账号状态、请求频率、签名和地区限制请求。v5 的身份健康度、令牌桶和接口熔断能让问题更容易被发现和隔离,但不能保证某个 Web 接口永久有效。
它和「社媒助手」这类采集工具有什么区别?
站内介绍过的「小红书、抖音数据采集工具:社媒助手」偏向开箱即用的成品工具;DTK 提供的是可以自己部署、自己扩展的接口层,更适合需要把数据接进自有系统的场景。
八、使用边界与合规提醒
几点需要提前想清楚的事:
- 密钥要自己生成。
DTK_SECRET_KEY用于保护项目保存的 Cookie 和代理凭据,应自行生成并妥善保存,不要使用网上复制来的固定值。 - 不要把服务直接暴露在公网。PostgreSQL、Redis 和 Web 控制台都没有必要开放公网访问;需要远程访问时,可以配合 HTTPS、反向代理、API Key 或私有网络。
- Apache-2.0 授权的是项目源码,并不代表抖音或 TikTok 同时授权了数据采集与内容再分发。
- 能拿到媒体地址 ≠ 拥有转载权。项目文档也明确提醒,自动化采集可能受到平台服务条款限制,使用者需要遵守所在地法律,并自行处理版权、个人数据和内容授权问题。
九、项目地址
- GitHub 仓库:https://github.com/Evil0ctal/Douyin_TikTok_Download_API
- 项目文档 / 落地页:https://douyin.wtf/
- 在线 Demo:https://demo.douyin.wtf/
- 最新版本:https://github.com/Evil0ctal/Douyin_TikTok_Download_API/releases/latest
- Docker 镜像:evil0ctal/douyin_tiktok_download_api

简单总结一下:如果你需要的是一个能自己掌控数据、可以把抖音和 TikTok 内容接进自有系统的接口层,DTK 目前的完成度相当高——自带身份池、异步任务、归档与 Web 控制台,还额外提供了 MCP 入口。但如果只是想偶尔下几个视频,直接用现成的桌面工具会更省事。






-Featured-Image240916-300x200-1.jpg)











-Featured-Image-300x200-1.jpg)




暂无评论内容