# Douyin Transcript API (douyin.transcript)

- Canonical page: https://everyinfra.com/en/douyin-api/transcript
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "douyin", "action": "transcript", "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 Transcript returns the words spoken in one video as text, given the video's `url`: the whole transcript in `text` and, in `segments`, the same speech split into sentences with start and end times in seconds. The response also carries the title, publish time, length, the video's likes, comments, shares and saves, and the author's name, follower count and total likes. Content researchers use it to study what successful videos actually say, marketers check what a creator said about a product, and analysts run keyword and topic analysis on speech that the written description alone does not capture.

Pass the video page address as `url`, in the form https://www.douyin.com/video/<video ID>; a profile or search page will not work. A video with no recognizable speech returns an empty result, which is not charged. `audio_url` and `video_url` are signed links that expire, so download what you need to keep, and a null count means the figure was not disclosed rather than zero.

## Health

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

## 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. |
| title | Title. null when the platform has no titles (for example text-only posts). |
| 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). |
| 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. |
| play_count | Real plays only on Hot Spot Treasure. On the boards billboard_video_hot, billboard_low_fan_explosion and billboard_high_completion it is Douyin's own play figure. Elsewhere Douyin does not publish play counts, so the value is usually 0 and not real plays; judge reach by likes, comments and shares. |
| 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. |
| author_name | Author's display name. |
| author_avatar | Author avatar URL (transcript). |
| author_follower_count | Author's follower count. null means not disclosed. |
| segments | Sentence-level timeline of the transcript (transcript): each entry has start and end in seconds and its text. |
| 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. |
| audio_url | Audio link: the video's audio track on transcript (mp3), the track's play link on music_search; may expire. |
| duration_sec | Video length in seconds. |
| duration_seconds | Duration in seconds. null for content that is not video or audio. |
| recommend_count | How many times the post was recommended (transcript). |
| author_like_count | Total likes the author's profile has received (search / user_posts / video / transcript). |
| platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |

## 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": "transcript",
  "params": {
    "url": "https://www.douyin.com/video/7664932486333451554"
  }
}'
```

```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": "transcript",
        "params": {
            "url": "https://www.douyin.com/video/7664932486333451554",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

No real sample for these example parameters yet: structure only, every value is a placeholder (…).

```text
{
  "id": "req_…",
  "platform": "douyin",
  "action": "transcript",
  "results": {
    "id": …,
    "url": …,
    "title": …,
    "text": …,
    "posted_at": …,
    "play_count": …,
    "like_count": …,
    "comment_count": …,
    "share_count": …,
    "collect_count": …,
    "author_name": …,
    "author_avatar": …,
    "author_follower_count": …,
    "segments": …,
    "video_url": …,
    "audio_url": …,
    "duration_sec": …,
    "duration_seconds": …,
    "recommend_count": …,
    "author_like_count": …,
    "platform": …
  },
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### What exactly does `text` contain?

The speech in the video, transcribed from its voice track and returned in full as one block, in the video's own language and untranslated. `segments` splits the same speech into sentences with start and end seconds, for finding where something is said or building subtitles. Viewer comments and hashtags are not included; read the same link with Douyin Comments or Video details.

### Can I transcribe several videos in one call?

No. Each call takes one video `url` and returns one transcript, so loop over your list of links. Because Video details and Comments accept that same link, you can collect each video's speech, metadata and viewer reactions in a single pass over the list.

### Can I judge a video's reach from this response?

Partly. `like_count`, `comment_count`, `share_count` and `collect_count` show engagement, and `author_follower_count` gives the size of the author's audience when you call. Douyin does not show play counts publicly, so `play_count` (usually 0) never reflects real plays; leave it out of any ranking.

## 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
