---
title: "获取视频字幕/Get video captions"
method: GET
path: "/api/v1/youtube/web_v2/get_video_captions"
tags: ["YouTube-Web-V2-API"]
---

# 获取视频字幕/Get video captions

`GET /api/v1/youtube/web_v2/get_video_captions`

## Request

- Base URL: `https://api.tikhub.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tikhub.io/api/v1/youtube/web_v2/get_video_captions`
- Auth: HTTP bearer

# [中文]
### 用途:
- 获取视频的字幕列表或指定语言的字幕内容
- 支持多种字幕格式输出

### 参数:
- video_id: 视频ID（推荐）
- video_url: 完整的视频URL（可选）
- language_code: 语言代码（如 en, zh-Hans, a.en），为空时返回可用字幕列表
- format: 字幕格式
  - srt: SubRip 字幕格式（带时间轴）
  - xml: 原始 XML 格式
  - json3: JSON 格式（YouTube 原始结构）
  - txt: 纯文本（无时间轴）

### 使用流程:
1. 不传 language_code，获取字幕列表
2. 从列表中选择 language_code，获取字幕内容

### 返回数据:
#### 不传 language_code 时（字幕语言列表）:
```json
{
  "video_id": "dQw4w9WgXcQ",
  "captions": [
    { "language_code": "en", "language_name": "English" },
    { "language_code": "ja", "language_name": "Japanese" }
  ]
}
```

#### 传 language_code 时（字幕内容）:
- format=srt: 标准 SRT 字幕文件内容（含序号、时间轴、文本）
- format=txt: 纯文本（仅文字，无时间轴）
- format=xml: YouTube 原始 XML 字幕
- format=json3: YouTube JSON 格式字幕

#### 视频较大时（转异步任务）:
```json
{
  "video_id": "dQw4w9WgXcQ",
  "status": "processing",
  "job_id": "123e4567-e89b-12d3-a456-426614174000"
}
```
- 返回 `status="processing"` 时，用 `job_id` 调用 `/get_video_captions_result` 取最终字幕

#### 视频无字幕时:
```json
{
  "video_id": "dQw4w9WgXcQ",
  "captions": [],
  "message": "No transcript is available for this video",
  "message_zh": "该视频没有可用字幕"
}
```

### 注意事项:
- 并非所有视频都有字幕
- 仅返回视频本身已有的字幕，不提供 AI 语音转写生成；视频没有字幕时直接返回上述无字幕结果
- video_id 和 video_url 至少提供一个
- 大视频会转为异步任务，需配合 `/get_video_captions_result` 轮询获取结果
- 视频无字幕时返回 200 + 上述提示，且照常计费（上游已对该请求计费）

### 价格:
- $0.008 USD / 请求

# [English]
### Purpose:
- Get video caption list or caption content for a specific language
- Supports multiple caption format outputs

### Parameters:
- video_id: Video ID (recommended)
- video_url: Full video URL (optional)
- language_code: Language code (e.g. en, zh-Hans, a.en), returns available caption list if empty
- format: Caption format
  - srt: SubRip subtitle format (with timestamps)
  - xml: Raw XML format
  - json3: JSON format (YouTube raw structure)
  - txt: Plain text (no timestamps)

### Returns:
#### Without language_code (caption language list):
```json
{
  "video_id": "dQw4w9WgXcQ",
  "captions": [
    { "language_code": "en", "language_name": "English" },
    { "language_code": "ja", "language_name": "Japanese" }
  ]
}
```

#### With language_code (caption content):
- format=srt: Standard SRT subtitle content (with sequence numbers, timestamps, text)
- format=txt: Plain text (text only, no timestamps)
- format=xml: YouTube raw XML captions
- format=json3: YouTube JSON format captions

#### Large videos (async job):
```json
{
  "video_id": "dQw4w9WgXcQ",
  "status": "processing",
  "job_id": "123e4567-e89b-12d3-a456-426614174000"
}
```
- When `status="processing"` is returned, poll `/get_video_captions_result`
  with the `job_id` to retrieve the final captions

#### Video has no captions:
```json
{
  "video_id": "dQw4w9WgXcQ",
  "captions": [],
  "message": "No transcript is available for this video",
  "message_zh": "该视频没有可用字幕"
}
```

### Usage flow:
1. Call without language_code to get available caption list
2. Select language_code from the list to get caption content

### Notes:
- Not all videos have captions
- Only captions that already exist on the video are returned; AI speech-to-text
  transcription is not provided. Videos without captions return the no-captions
  result shown above
- At least one of video_id or video_url is required
- Large videos become async jobs; poll `/get_video_captions_result` for the result
- A video with no captions returns 200 with the message above and is still
  billed (the upstream provider charges for this request)

### Price:
- $0.008 USD / request

# [示例/Example]
#### Step 1 - 获取字幕列表: GET /get_video_captions?video_id=dQw4w9WgXcQ
#### Step 2 - 获取字幕内容: GET /get_video_captions?video_id=dQw4w9WgXcQ&language_code=en&format=srt

## Query parameters

- `video_id` string: 视频ID/Video ID
- `video_url` string: 视频URL/Video URL
- `language_code` string: 语言代码，为空时返回可用字幕列表/Language code, returns available caption list if empty
- `format` 'srt' | 'xml' | 'json3' | 'txt': 字幕格式/Caption format

## Response `200`

Successful Response

- ResponseModel
  - `code` integer: HTTP status code | HTTP状态码
  - `request_id` string, nullable: Unique request identifier | 唯一请求标识符
  - `message` string: Response message (EN-US) | 响应消息 (English)
  - `message_zh` string: Response message (ZH-CN) | 响应消息 (中文)
  - `support` string: Support message | 支持消息
  - `time` string: The time the response was generated | 生成响应的时间
  - `time_stamp` integer: The timestamp the response was generated | 生成响应的时间戳
  - `time_zone` string: The timezone of the response time | 响应时间的时区
  - `docs` string, nullable: Link to the API Swagger documentation for this endpoint | 此端点的 API Swagger 文档链接
  - `cache_message` string, nullable: Cache message (EN-US) | 缓存消息 (English)
  - `cache_message_zh` string, nullable: Cache message (ZH-CN) | 缓存消息 (中文)
  - `cache_url` string, nullable: The URL to access the cached result | 访问缓存结果的 URL
  - `router` string: The endpoint that generated this response | 生成此响应的端点
  - `params` unknown
  - `data` unknown

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-08** `96a122a5f220`: 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status
- **2026-09-01** `50f9ec6e1cd3`: 2 info
  - the `cache_message` response's property default value changed from `This request will be cached. You can access the cached result directly using the URL below, valid for 24 hours. Accessing the cache will not incur additional charges.` to `This response is cached and accessible via the URL below for 24 hours at no extra cost. The cache is for request tracing only — it doesn't affect the API's data freshness and won't be returned through the API again.` for the status `200`
  - the `cache_message_zh` response's property default value changed from `本次请求将被缓存，你可以使用下面的 URL 直接访问缓存结果，有效期为 24 小时，访问缓存不会产生额外费用。` to `本次响应已缓存，可通过下方 URL 直接查看，有效期 24 小时，访问缓存链接无额外费用。缓存仅用于请求溯源，不影响接口数据的时效性，也不会再次通过接口返回。` for the status `200`
- **2026-04-14** `ee5b7c9c88f5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tikhub/apis/tikhub-douyin-tiktok-xiaohongshu-lemon8-bilibili-kuaishou-pi/changes/api/v1/youtube/web_v2/get_video_captions/get.md)

---

[API](https://skmtc.dev/tikhub/apis/tikhub-douyin-tiktok-xiaohongshu-lemon8-bilibili-kuaishou-pi.md) - [All operations](https://skmtc.dev/tikhub/apis/tikhub-douyin-tiktok-xiaohongshu-lemon8-bilibili-kuaishou-pi/llms.txt) - [OpenAPI document](https://skmtc.dev/tikhub/apis/tikhub-douyin-tiktok-xiaohongshu-lemon8-bilibili-kuaishou-pi/revisions/86a3483c705a?raw)
