# Douyin Video details API (douyin.video)

- Canonical page: https://everyinfra.com/en/douyin-api/video
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "douyin", "action": "video", "params": {...}}
- Price: $0.000556 per call ($0.56 per 1,000 requests); failed calls and empty results are not charged
- Returns: single object
- Mode: sync; add "mode": "async" for slow tasks

Douyin Video details reads one video's public information from its `url`: the caption, hashtags, length, like, comment, share and save counts, the author and their follower count, the publish time and region. Use it to break down a single hit video, check the numbers on a sponsored post, or fill in details for video links you collected elsewhere.

Pass the video page link, shaped like https://www.douyin.com/video/<video ID>, not a profile or search page. The same link also works for reading the video's comments or extracting its transcript. Douyin does not publish play counts, so `view_count` says nothing about real views; judge reach by likes, comments and shares.

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=douyin&action=video

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| url | not declared | yes | not declared | Full URL of the target Douyin video, formatted as `https://www.douyin.com/video/<video_id>`. Fetches video details in `video`, comments in `comments`, the replies under one comment in `comment_replies` (the video the comment sits on), or audio transcripts in `transcript`. Do not pass user profile or search page URLs. |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| id | The record's unique ID on the platform. Unique only within one platform; IDs can repeat across platforms. |
| url | Link to the record on the platform. |
| text | Body text with HTML removed, returned in full and never cut short (on a few platforms the list results themselves carry only an excerpt; the platform's field notes say so). |
| media_type | Media type: video, or image for image posts. |
| video_url | Video playback URL (signed, expires; download promptly if you need to keep it). Null for image posts or when the source omits it. |
| like_count | Likes. null means the platform or this capability does not disclose it; it is not 0. |
| comment_count | Comments. null means not disclosed, not 0. |
| share_count | Shares. null means not disclosed, not 0. |
| collect_count | Saves or favorites. null means not disclosed, not 0. |
| view_count | This is not a real play count. Douyin does not publish video play counts; most results omit this field and some show 0, and neither reflects real plays. Judge reach by like_count, comment_count, share_count and collect_count. |
| author_name | Author's display name. |
| author_id | Author's unique ID on the platform. |
| author_douyin_id | The author's Douyin ID. |
| author_uid | Numeric user ID of the author (on comments, of the commenter). author_id is the secUid; both identify the same person. |
| author_bio | The author's profile bio (search / user_posts / video rows). |
| author_avatar_url | Author avatar image URL: the creator on search, user_posts and video rows, the commenter on comments rows. |
| author_follower_count | Author's follower count. null means not disclosed. |
| cover_image_url | Video or image-post cover thumbnail URL (search / user_posts rows). |
| video_width | Video frame width in pixels. |
| video_height | Video frame height in pixels. |
| duration_seconds | Duration in seconds. null for content that is not video or audio. |
| region | Region. |
| hashtags | Hashtags in the text, in order of appearance; absent when there are none. |
| posted_at | Publish time in ISO 8601, UTC (for example 2026-08-07T12:34:56+00:00). Non-standard strings from the platform are passed through as is, so parse defensively. null means the platform does not disclose it. |
| platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |
| image_urls | Array of image links in the platform's display order; absent when there are no images. |
| duration_sec | Video length in seconds. |
| hashtag_ids | platform-native meaning |
| search_rank | platform-native meaning |
| author_is_verified | Whether the author is verified (search / user_posts / video rows). |
| author_following_count | How many accounts the author follows (search / user_posts / video rows). |
| author_like_count | Total likes the author's profile has received (search / user_posts / video / transcript). |
| author_video_count | Total number of posts on the author's profile (search / user_posts / video rows). |
| author_ip_location | The author's IP location, which Douyin displays on every profile. |
| title | Title. null when the platform has no titles (for example text-only posts). |
| music | Background track: id, title, author, is_original (original sound or not), duration_sec, cover_url and play_url (audio link, may expire). Absent when there is no music information. |
| download_count | How many times the post was downloaded. |
| forward_count | How many times the post was forwarded. |
| is_pinned | Whether the item is pinned (post rows: pinned on the author's profile; trending: pinned on the board). |
| is_ad | Whether the post is an ad. |
| video_tags | Content category tags Douyin assigned to the post (for example food or store visit). |
| video_resolution | Video quality tier as Douyin labels it (for example 720p). |
| animated_cover_url | Animated cover link. |
| city | City name in the platform's language, not normalized. |
| city_code | platform-native meaning |
| location | Location description passed through as is; the format varies by platform. |
| text_language | platform-native meaning |
| video_bitrates | platform-native meaning |
| download_url | platform-native meaning |
| has_watermark | platform-native meaning |
| video_url_expires_at | platform-native meaning |
| permissions | platform-native meaning |
| author_gender | platform-native meaning |
| author_age | platform-native meaning |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "douyin",
  "action": "video",
  "params": {
    "url": "https://www.douyin.com/video/7633646113853104116"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "douyin",
        "action": "video",
        "params": {
            "url": "https://www.douyin.com/video/7633646113853104116",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-10-24T18:28:34Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "douyin",
  "action": "video",
  "results": {
    "id": "7633646113853104116",
    "url": "https://www.douyin.com/video/7633646113853104116",
    "text": "别犹豫 想吃谁做的就@谁 #家常菜 #如果幸福是一顿漂亮饭",
    "media_type": "video",
    "video_url": "https://v95-hzyy-thr-daily-colda.douyinvod.com/00e83eb1638968a210789ad41d005848/6add0846/video/tos/cn/tos-cn-ve-15/osCeAU146LfGGBFAgTIGXXewRxoNAEESBGgzu7/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1565&bt=1565&cs=0&ds=3&ft=zyTEemq4dd2~YBSzVvjVQXmz-TLJ9E05m4E5ljOCnzNf…",
    "like_count": 5191450,
    "comment_count": 367807,
    "share_count": 3397981,
    "collect_count": 603283,
    "view_count": 0,
    "author_name": "•••",
    "author_id": "•••",
    "author_douyin_id": "•••",
    "author_avatar_url": "https://p26.douyinpic.com/•••",
    "cover_image_url": "https://p5-ex-gddgtc-sign.douyinpic.com/tos-cn-i-0813c001/okiAIDJvALIEu1AesKf0wAio8AJBYDgAAA8IwC~tplv-dy-resize-walign-adapt-aq:540:q75.webp?lk3s=138a59ce&x-expires=1794074400&x-signature=hydt%2FpxAWFFAH3o1r0%2BRDkzfjeU%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=…",
    "region": "CN",
    "posted_at": "2026-04-28T03:25:39+00:00",
    "platform": "douyin",
    "author_uid": "•••",
    "author_is_verified": true,
    "author_bio": "•••",
    "author_like_count": 394320561,
    "author_video_count": 2279,
    "music": {
      "id": "•••",
      "title": "心跳（你又在哭泣我给不了安慰）",
      "author": "•••",
      "is_original": false,
      "duration_sec": 16,
      "cover_url": "https://p3.douyinpic.com/tos-cn-v-2774c002/oMisiuEh1DsoATBIAwPUiXBoApEaRADEAEezKW~tplv-dy-resize-walign-adapt-aq:720:q75.heic?biz_tag=aweme_music&s=PackSourceEnum_AWEME_DETAIL&sc=cover",
      "play_url": "https://sf11-cdn-tos.douyinstatic.com/obj/tos-cn-ve-2774/owJHiEhBzAg7AaUiiNwMhBIIWAKhf8tQ6sM8Tk"
    },
    "download_count": 10817,
    "forward_count": 0,
    "is_pinned": false,
    "is_ad": false,
    "video_tags": [
      "美食",
      "美食展示",
      "普通美食展示"
    ],
    "video_width": 720,
    "video_height": 960,
    "video_resolution": "720p",
    "animated_cover_url": "https://p5-ex-gddgtc-sign.douyinpic.com/obj/tos-cn-i-0813c001/okiAIDJvALIEu1AesKf0wAio8AJBYDgAAA8IwC?lk3s=138a59ce&x-expires=1794074400&x-signature=Z7xqx7cKvQ1o6chyAX%2Br7wiVTZs%3D&from=327834062_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=dynamic_cover&biz_tag=aweme_video&l=…",
    "hashtag_ids": [
      "1767587367821390",
      "7510979073431046180"
    ],
    "city": "Shandong",
    "city_code": "371300",
    "text_language": "zh",
    "video_bitrates": [
      {
        "quality": "1080_1_1",
        "bitrate": 1761129,
        "fps": 30,
        "is_h265": true,
        "url": "https://v95-zjjx2tc-cold.douyinvod.com/3af3eb3ed8f93616a607176cb701eb9e/6add0846/video/tos/cn/tos-cn-ve-15/oMB3tqiEIAgpMdefkKiDwlLLcgRhgAAxBBB9Q1/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1719&bt=1719&cs=2&ds=4&ft=zyTEemq4dd2~YBSzVvjVQXmz-TLJ9E05m4E5ljOCnzNfG~RUxRyq…"
      },
      {
        "quality": "720_1_1",
        "bitrate": 1179750,
        "fps": 30,
        "is_h265": true,
        "url": "https://v95-hzyy-thr-daily-colda.douyinvod.com/4f077c6ec6d7afc7b94a71c860103399/6add0846/video/tos/cn/tos-cn-ve-15/c28890d8ae014084b8fe0baa7037a421/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1152&bt=1152&cs=2&ds=3&ft=zyTEemq4dd2~YBSzVvjVQXmz-TLJ9E05m4E5ljOCnzNfG~RUxR…"
      },
      {
        "quality": "720_2_1",
        "bitrate": 927020,
        "fps": 30,
        "is_h265": true,
        "url": "https://v95-zj-colda.douyinvod.com/3597031f464e4aaac8e792c309b3c41b/6add0846/video/tos/cn/tos-cn-ve-15/64888fdc0e70457d956f7d85cbc7f6f0/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=905&bt=905&cs=2&ds=3&ft=zyTEemq4dd2~YBSzVvjVQXmz-TLJ9E05m4E5ljOCnzNfG~RUxRyqkZ&mime_type…"
      }
    ],
    "download_url": "https://v5-gddgtc-cold.douyinvod.com/a3891d04f3aaa7423d89030ba331a15f/6add0846/video/tos/cn/tos-cn-ve-15/oUYg9pEj8vJEAUY1AAImarifZCegMFQDgXDB4C/?a=1128&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=1589&bt=1589&cs=0&ds=3&ft=zyTEemq4dd2~YBSzVvjVQXmz-TLJ9E05m4E5ljOCnzNfG~RUxRyqkZ…",
    "has_watermark": true,
    "video_url_expires_at": "2026-10-24T19:34:30+00:00",
    "permissions": {
      "can_comment": true,
      "can_download": true,
      "can_duet": true,
      "can_stitch": true,
      "can_share": true,
      "can_repost": true,
      "can_save": true
    },
    "author_gender": "•••",
    "author_age": 27,
    "duration_sec": 9,
    "hashtags": [
      "家常菜",
      "如果幸福是一顿漂亮饭"
    ],
    "duration_seconds": 9
  },
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### Which link should I pass as `url`?

The full video page link, shaped like https://www.douyin.com/video/<video ID>. If you only have a short share link, open it in a browser first and copy the video page address it lands on. Profile and search page links do not work.

### Can I get a video's play count?

No. Douyin does not publish play counts, so `view_count` here does not reflect real views. To gauge how a video did, look at `like_count`, `share_count` and `collect_count` together and compare them with the author's other videos.

### Can I get what is said in the video?

This capability returns the caption and hashtags, not the speech. For the spoken words, call the Douyin Transcript capability with the same video link; it extracts the voice track as text you can analyze.

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=douyin
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
