---
title: "获取视频号直播回放列表/Get WeChat Channels Live History"
method: POST
path: "/api/v1/wechat_channels/v2/fetch_live_history"
tags: ["WeChat-Channels-V2-API"]
---

# 获取视频号直播回放列表/Get WeChat Channels Live History

`POST /api/v1/wechat_channels/v2/fetch_live_history`

## 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/wechat_channels/v2/fetch_live_history`
- Auth: HTTP bearer

# [中文]
### 用途:
- 获取创作者的直播回放列表。回放本身就是视频对象，每条带媒体地址 `media`（含 `url` / `url_token` / `decode_key`），可直接下载解密。
- 支持翻页获取更多回放。
- 价格：0.01$/次
- ⏱️ 由于微信服务器原因，本接口响应较慢，请将客户端请求超时（timeout）设置为 30 秒；timeout 设置过小会造成已扣费但收不到响应的情况。
- ⚠️ 大整数 ID 精度：响应中的 `id` 等为 64 位大整数，超出 JavaScript 安全整数范围（2^53-1）。请始终以**字符串**方式接收 / 传递这类 ID（解析 JSON 用 json-bigint 或按文本取值），勿让其经过 JS `Number`。Swagger UI 文档页对超大整数会末位舍入显示，属正常现象，不影响接口实际返回的数据。
### 参数:
- username: 视频号 finder username（`v2_…@finder` 格式）。示例（有直播回放的号）`v2_060000231003b20faec8cae1811ac4d5c702ea32b0771737aa785454f7f8177114cc4d248d66@finder`（虎嗅）。
- last_buffer: 可选，翻页游标（base64），**首页留空**；当响应 `continue_flag` 为真时，传上一页响应的 `last_buffer` 取下一页。
- flag: 可选，拉取标志，默认 12。
- raw: 可选，默认 True。True=原始响应；False=精简解析结构（推荐做媒体下载）。
### 返回:
- 直播回放列表及翻页游标

### 响应结构与 JSON Path:
#### `raw=false`（精简，snake_case，**推荐做媒体下载**）:
- `$.data.username`
- `$.data.count` —— 本页条数；`$.data.total_count` —— 回放总数（**无回放时为 0**）
- `$.data.lives[]` —— 回放数组，每条是一个视频对象（结构同 `fetch_collection_videos` 的 video），逐个（N 为下标）:
    - `$.data.lives[N].id` —— 回放作品 objectId
    - `$.data.lives[N].username` / `.nickname` / `.title` / `.create_time`
    - `$.data.lives[N].like_count` / `.fav_count` / `.forward_count` / `.comment_count` 等计数
    - `$.data.lives[N].media` —— 媒体对象（单个），下载 + 解密:
        - `$.data.lives[N].media.url` —— 视频 CDN 链接（不带 Token）
        - `$.data.lives[N].media.url_token` —— CDN 链接 Token（防盗链）
        - `$.data.lives[N].media.full_url` —— 已拼好的完整 CDN URL（= `url` + `url_token`，可直接下载）
        - `$.data.lives[N].media.decode_key` —— 视频解密密钥（**每次请求都不同**）
- `$.data.continue_flag` —— 是否有下一页（1=有）
- `$.data.last_buffer` —— 翻页游标（传回本接口取下一页）
#### `raw=true`（完整原始响应，camelCase）:
- `$.data.totalCount` → `total_count`
- `$.data.object[]` → `lives[]`（完整视频对象），逐个媒体在 `$.data.object[N].objectDesc.media[0]`: `.url` → `url`、`.urlToken` → `url_token`、`.decodeKey` → `decode_key`（`full_url` 为精简层拼接产物，raw 需自行 `url` + `urlToken` 拼接）
- `$.data.continueFlag` → `continue_flag`
- `$.data.lastBuffer`（别名 `$.data.last_buffer`）→ `last_buffer`

### 重要提示（视频下载与解密）:
- 同 `fetch_video_detail`：用 `full_url`（已拼 Token）下载，MP4 不能播即加密，用**同一次响应**的 `decode_key` 解密。
- 某条回放的 `live_id`（直播间维度）可进一步喂 `fetch_live_detail`。
- 在线解密工具: https://evil0ctal.github.io/WeChat-Channels-Video-File-Decryption/
- 可自行部署的解密 API（Docker 一键部署）: https://github.com/Evil0ctal/WeChat-Channels-Video-File-Decryption

# [English]
### Purpose:
- Get a creator's live replay list. Each replay is itself a video object with a `media` object (`url` / `url_token` / `decode_key`) ready for download and decryption.
- Supports pagination for more replays.
- Price: $0.01 per request
- ⏱️ Due to WeChat server latency, this endpoint responds slowly; please set your client request timeout to 30 seconds — a timeout that is too small may result in being billed without receiving the response.
- ⚠️ Large-integer ID precision: IDs such as `id` in the response are 64-bit big integers beyond JavaScript's safe-integer range (2^53-1). Always receive / pass such IDs as **strings** (parse JSON with json-bigint or read them as text), never through JS `Number`. Swagger UI rounds the trailing digits of huge integers in its docs view — this is expected and does not affect the actual data returned by the API.
### Parameters:
- username: WeChat Channels finder username (`v2_…@finder` format). Example (an account with live replays): `v2_060000231003b20faec8cae1811ac4d5c702ea32b0771737aa785454f7f8177114cc4d248d66@finder` (Huxiu).
- last_buffer: Optional pagination cursor (base64), **leave empty for the first page**; when `continue_flag` is truthy, pass the previous page's `last_buffer`.
- flag: Optional fetch flag, default 12.
- raw: Optional, default True. True=raw response; False=simplified parsed structure (recommended for media download).
### Return:
- Live replay list with pagination cursor

### Response structure & JSON Path:
#### `raw=false` (simplified, snake_case, **recommended for media download**):
- `$.data.username`
- `$.data.count` — items on this page; `$.data.total_count` — total replays (**0 when none**)
- `$.data.lives[]` — replay array, each item is a video object (same shape as videos of `fetch_collection_videos`), per item (N is the index):
    - `$.data.lives[N].id` — replay video objectId
    - `$.data.lives[N].username` / `.nickname` / `.title` / `.create_time`
    - `$.data.lives[N].like_count` / `.fav_count` / `.forward_count` / `.comment_count` etc.
    - `$.data.lives[N].media` — media object (single), download + decrypt:
        - `$.data.lives[N].media.url` — video CDN link (without Token)
        - `$.data.lives[N].media.url_token` — Token of the CDN link (anti-hotlinking)
        - `$.data.lives[N].media.full_url` — pre-concatenated full CDN URL (= `url` + `url_token`, ready to download)
        - `$.data.lives[N].media.decode_key` — video decryption key (**different on every request**)
- `$.data.continue_flag` — has next page (1=yes)
- `$.data.last_buffer` — pagination cursor (pass back to this endpoint for the next page)
#### `raw=true` (full raw response, camelCase):
- `$.data.totalCount` → `total_count`
- `$.data.object[]` → `lives[]` (full video objects), media per item at `$.data.object[N].objectDesc.media[0]`: `.url` → `url`, `.urlToken` → `url_token`, `.decodeKey` → `decode_key` (`full_url` is produced by the simplified layer; for raw, concatenate `url` + `urlToken` yourself)
- `$.data.continueFlag` → `continue_flag`
- `$.data.lastBuffer` (alias `$.data.last_buffer`) → `last_buffer`

### Important Note (video download & decryption):
- Same as `fetch_video_detail`: download via `full_url` (Token already appended); if the MP4 cannot be played it is encrypted, decrypt with the `decode_key` from the **same response**.
- The `live_id` of a replay (live-room dimension) can be fed into `fetch_live_detail`.
- Online decryption tool: https://evil0ctal.github.io/WeChat-Channels-Video-File-Decryption/
- Self-deployable decryption API (one-click Docker deployment): https://github.com/Evil0ctal/WeChat-Channels-Video-File-Decryption

## Request body

- FetchLiveHistoryRequest
  - `username` string, required: 视频号 finder username（v2_…@finder 格式）/WeChat Channels finder username (v2_…@finder format)
  - `last_buffer` string, nullable: 翻页游标（base64），首页留空/Pagination cursor (base64), leave empty for first page
  - `flag` integer: 拉取标志，默认 12/Fetch flag, default 12
  - `raw` boolean: True=原始响应；False=精简解析结构（推荐做媒体下载）/True=raw response; False=simplified parsed structure (recommended for media download)

## 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`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tikhub/apis/tikhub-douyin-tiktok-xiaohongshu-lemon8-bilibili-kuaishou-pi/changes/api/v1/wechat_channels/v2/fetch_live_history/post.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)
