Airsc is free for everyone. If it helps you, support it with $2–$20.

Support
MCP serverSafeBrowser automation & web dataSome setup

Douyin_TikTok_Download_API

Evil0ctal · Evil0ctal/Douyin_TikTok_Download_API

This MCP server provides a self-hosted API for scraping Douyin/TikTok data and downloading watermark-free videos, supporting posts, profiles, comments and playlists.

🚀 抖音、TikTok 数据采集与无水印视频下载 API,自托管,支持 MCP 调用与 Docker 一键部署。| Self-hosted TikTok & Douyin scraper and no-watermark video downloader — async REST API, MCP server, CLI and web console for posts, profiles, comments and playlists. Self-healing identity pool, PostgreSQL archive, one docker compose up.

20k stars2.8kLicense: Apache-2.0Updated 17 days ago0 opens

Preview

▍

What you can do with it

  • Build an AI agent to analyze trends by collecting data from TikTok profiles and posts.
  • Download TikTok videos without watermarks for content analysis or personal archives.
  • Create a custom content monitoring system for specific keywords or creators on Douyin.

Safety check

Safe

No risky patterns found in the files we scanned.

Automated scan of the repo files. Always review code you run.

From the README

Douyin_TikTok_Download_API

English | 简体中文

🚀 A self-hosted data API for Douyin and TikTok. One docker compose up, an identity pool that maintains itself, and a REST API, MCP server and web console on top.

Open source, free, and it runs on your own machine — no signup, no quota, nobody else in the path. It fetches posts, authors, comments and search, downloads video and image albums without a watermark (it picks the clean stream the platform already publishes rather than stripping anything), and keeps what it collects in your own PostgreSQL.

💖 Sponsors

These sponsors paid to be here, and Douyin_TikTok_Download_API stays free and open because of it. To sponsor the project, see my GitHub Sponsors page.

    <b>TikHub.io</b>

Your Ultimate Social Media Data &amp; API Marketplace

    Professional data solutions for Douyin, Xiaohongshu, TikTok, Instagram, YouTube,
    Twitter, and more.
    Real-time Data | Flexible APIs | Seamless Integration | Competitive Pricing with Discounts


    Buy and sell custom APIs, services, and social media solutions on the
    TikHub.io Marketplace, alongside developers, businesses and content creators.

<em>Trusted by leading global influencer marketing and social media intelligence platforms</em>

    <b>→ Visit TikHub.io</b>
    &nbsp;·&nbsp;
    API docs

🧩 REER — a forum for reverse engineering

<b>reer.dev</b>

Somewhere to put what you work out. This project exists because people wrote down how a signature was built; the forum is for the next round of that — signatures, protocols, packers, anything taken apart.

Free, no advertising, and close to no rules beyond the obvious. Bilingual, English and Chinese. Register and post; nothing is gated.

🎬 What it looks like

One real call: paste a link, send it, get the normalised result back. The identity pool, the scheduler and the API reference it passed through on the way are all in the same console. The interface follows the browser's language, and both are written by hand rather than machine-translated. 中文界面

Try it without installing anything

https://demo.douyin.wtf is a live instance, open to everyone. Sign in — the login page fills the demo account in for you — and use the console: the playground, the scheduler, the library, the API reference. The same account comes with an API key you can call the scraping endpoints with, shown in plaintext on the API keys page.

It is read-only. Demo requests are not written to the request log or the archive, so the database of a public instance cannot be filled by strangers, and switching demo mode off ends every demo session and kills the key immediately.

Rate limit: 30 requests per 10 seconds. Go over it and you are cooled down for 10 seconds, during which every request is refused. It is a shared instance, and the identity pool behind it is the ceiling for everybody using it at once.

What the demo is for is deciding whether to run your own. It is not a service to build on — it can go down, be reset, or be switched off, and none of that will be announced.

🚀 v4 vs v5

v5 is a rewrite. It started from an empty branch and inherits no v4 code.

v4's real problem was never a shortage of features — it was that the API would die quietly and nobody would know. A cookie expires, a signature algorithm changes, an endpoint gets rate-limited, and you find out when someone files an issue. v5 puts "you can see it" and "it heals itself" ahead of features.

v4v5
Where identities come fromYou copy cookies out of a browser into config.yamlA headless browser mints guest identities, and the pool tops itself up when usable ones run low
How requests go outStraight out, as they arriveHealth tiers, quantised LRU rotation, one in-flight lock per identity, a token bucket per (identity, endpoint), a circuit breaker per endpoint
When something breaksYou wait for a bug reportOne structured record per request, live health for every identity and endpoint, visible in the console
Call styleSynchronous — send and waitAsynchronous by default (202 + task_id); add ?wait= to go back to synchronous
What is keptNothing; parsed and discardedPostgreSQL + Redis. Everything parsed is archived, so a post deleted upstream is still here
Access controlNone; anyone can call itAPI keys with scopes and roles, managed in the console
InterfaceA single PyWebIO pageA React console: identity pool, scheduler, library, downloads, logs, diagnostics
Ways inRESTREST, MCP and a CLI, all over the same service layer
SigningX-Bogus, A_Bogusa_bogus, X-Bogus, X-Gnarly, X-Dynosaur in pure Python, with a browser fallback
Deploymentpip install -r requirements.txt + python start.pydocker compose up, three images
PlatformsDouyin, TikTok, BilibiliDouyin, TikTok

Bilibili is the one thing that went backwards: v5 does not have it yet. It shares neither the signing nor the identity machinery with Douyin and TikTok, so the rewrite left it out for now.

Still on v4?

v4's code stays on the v4 branch, the image is still published, and one command brings it up:

docker run -d --name dtk-v4 --restart unless-stopped \
  -p 8080:80 evil0ctal/douyin_tiktok_download_api:V4.1.2

Then open http://localhost:8080; the API reference is at /docs. Port 8080 is deliberate — v5 binds 8000, so the two versions can run side by side on one machine.

Replace the Douyin cookie before you use it. v4 has no identity pool, and the cookie baked into the image expired long ago, so Douyin endpoints ans

View source on GitHub