Scavio Douyin API

Pull Douyin videos, user profiles and feeds, comments, hashtags, music, live rooms, the hot-search board, and keyword search across videos, users, music, live and hashtags. 27 endp…

scavio-ai

@scavio-ai

Install

$ openclaw skills install @scavio-ai/scavio-douyin

Douyin via Scavio

Pull Douyin (the Chinese TikTok) videos, user profiles and feeds, comments, hashtags, music, live rooms, the hot-search board, and run keyword search across videos, users, music, live and hashtags. All endpoints return structured JSON.

When to trigger

Use this skill when the user asks to:

  • Pull a Douyin video's full detail or statistics (play, like, share, download counts), or resolve a share link
  • Read a user's profile, their posts, their liked videos, followers or following, or their current live stream
  • Read a video's comments and comment replies, or videos recommended alongside it
  • Look up a hashtag or a sound (music) and the videos under it
  • Read the hot-search board, the recommended home feed, or a live room by web_rid
  • Search Douyin by keyword - general, or scoped to videos, users, music, live streams or hashtags
  • Do China-market social research, creator analysis or trend spotting on Douyin

Setup

Get a free API key at scavio.dev (50 free credits to get started, no card required):

export SCAVIO_API_KEY=sk_live_your_key

Every request is a POST with a JSON body and:

Authorization: Bearer $SCAVIO_API_KEY

Pricing

Base URL: https://api.scavio.dev.

  • Search endpoints (/api/v1/douyin/search*) cost 10 credits each.
  • Every other Douyin endpoint costs 1 credit.

Check credits_used on each response to confirm what a call cost.

Endpoints

Video

EndpointCreditsWhat it returns
POST /api/v1/douyin/video1Full detail for a single video by id
POST /api/v1/douyin/video/by-share-url1Resolve a share link to its video detail
POST /api/v1/douyin/video/statistics1Play, like, share and download counts for one or more videos
POST /api/v1/douyin/video/comments1Top-level comments on a video
POST /api/v1/douyin/video/comment-replies1Replies under a comment
POST /api/v1/douyin/related1Videos recommended alongside a given video

User

EndpointCreditsWhat it returns
POST /api/v1/douyin/user/profile1Profile details for a user
POST /api/v1/douyin/user/posts1A user's published videos
POST /api/v1/douyin/user/likes1A user's publicly liked videos
POST /api/v1/douyin/user/followers1A user's followers
POST /api/v1/douyin/user/following1Accounts a user follows
POST /api/v1/douyin/user/live1A user's current live stream

Hashtag / music / live

EndpointCreditsWhat it returns
POST /api/v1/douyin/hashtag1Details for a hashtag
POST /api/v1/douyin/hashtag/videos1Videos under a hashtag
POST /api/v1/douyin/music1Details for a sound
POST /api/v1/douyin/music/videos1Videos using a sound
POST /api/v1/douyin/live/room1Live room detail by web_rid

Trending / feed / resolve

EndpointCreditsWhat it returns
POST /api/v1/douyin/trending1The current hot-search board
POST /api/v1/douyin/home-feed1The recommended home feed
POST /api/v1/douyin/resolve/video-id1Extract a video id from a Douyin URL
POST /api/v1/douyin/resolve/user-id1Extract a user sec_user_id from a Douyin URL

Search (10 credits each)

EndpointCreditsWhat it returns
POST /api/v1/douyin/search10General keyword search
POST /api/v1/douyin/search/videos10Search videos by keyword
POST /api/v1/douyin/search/users10Search users by keyword
POST /api/v1/douyin/search/music10Search sounds by keyword
POST /api/v1/douyin/search/live10Search live streams by keyword
POST /api/v1/douyin/search/hashtags10Search hashtags by keyword

Key identifiers

  • aweme_id - a video id (e.g. 7436613508646702348). Used by video, video/statistics, video/comments, video/comment-replies, related.
  • sec_user_id - a user id (the MS4wLjABAAAA... string). Used by the user endpoints. Get it from resolve/user-id if you only have a profile URL.
  • Feed/comment endpoints paginate with max_cursor / cursor / max_time from the previous response, and take an optional count (1-50).

Examples

import requests

BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1. Resolve a share link, then read that video's comments (1 credit each)
video = requests.post(f"{BASE}/api/v1/douyin/video/by-share-url", headers=HEADERS,
    json={"share_url": "https://v.douyin.com/v1zNJi__Teg/"}).json()
aweme_id = video["data"]["aweme_id"]
comments = requests.post(f"{BASE}/api/v1/douyin/video/comments", headers=HEADERS,
    json={"aweme_id": aweme_id, "count": 50}).json()

# 2. Resolve a profile URL to a user id, then read the user's posts (1 credit each)
uid = requests.post(f"{BASE}/api/v1/douyin/resolve/user-id", headers=HEADERS,
    json={"url": "https://www.douyin.com/user/"}).json()["data"]["sec_user_id"]
posts = requests.post(f"{BASE}/api/v1/douyin/user/posts", headers=HEADERS,
    json={"sec_user_id": uid, "count": 20}).json()

# 3. Keyword search - 10 credits
found = requests.post(f"{BASE}/api/v1/douyin/search/videos", headers=HEADERS,
    json={"keyword": "美食"}).json()

curl:

curl -s https://api.scavio.dev/api/v1/douyin/trending \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Response shape

Every response uses the envelope { data, response_time, credits_used, credits_remaining }. data carries the video / user / feed payload, with lists under keys like videos, comments, users and cursors for pagination.

Guardrails

  • Search costs 10 credits per call; everything else costs 1. Confirm with credits_used and avoid running search in tight loops.
  • Use resolve/video-id and resolve/user-id to turn a Douyin URL into the id the other endpoints need.
  • Paginate only with the cursor the previous response returned (max_cursor / cursor / max_time); stop when it stops advancing.
  • Trending, hot-search and rankings are point-in-time snapshots - re-fetch for a fresh board rather than assuming stability.
  • Never fabricate video counts, comment text, follower numbers or user details. Only return what the API returned.
  • Comments and profiles are written by real people. Summarise; do not build profiles of individuals.

Failure handling

  • 400 means malformed input (e.g. a bad URL). Fix and retry.
  • 401 means the API key is invalid or missing. Check SCAVIO_API_KEY.
  • 422 means a required identifier is missing (e.g. no sec_user_id). Supply it and retry.
  • 429 means rate or usage limit exceeded. Wait before retrying. See rate limits.
  • 502 means the source is temporarily unavailable - wait a few seconds and retry.
  • If SCAVIO_API_KEY is not set, prompt the user to export it before continuing.

Top skills in this category