---
title: "获取视频号用户作品列表/Get WeChat Channels User Videos"
method: POST
path: "/api/v1/wechat_channels/v2/fetch_user_videos"
tags: ["WeChat-Channels-V2-API"]
---

# 获取视频号用户作品列表/Get WeChat Channels User Videos

`POST /api/v1/wechat_channels/v2/fetch_user_videos`

## 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_user_videos`
- Auth: HTTP bearer

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

### 响应结构与 JSON Path:
#### `raw=false`（精简，推荐）:
- 顶层: `$.data.username` / `$.data.nickname` / `$.data.count`（本页视频数）/ `$.data.up_continue`（是否有下一页）/ `$.data.last_buffer`（翻页游标）
- 每个视频 `$.data.videos[N]`（N 为下标）:
    - `id`（作品 objectId，喂 `fetch_video_detail` / `fetch_video_comments`）: `$.data.videos[N].id`
    - `object_nonce_id`: `$.data.videos[N].object_nonce_id`
    - `username` / `nickname` / `title`: `$.data.videos[N].username` 等
    - 互动计数: `$.data.videos[N].read_count` / `.like_count` / `.fav_count` / `.forward_count` / `.comment_count`
    - 发布时间: `$.data.videos[N].create_time`
    - 位置: `$.data.videos[N].location`
#### `raw=true`（原始）:
- 状态码: `$.data.baseResponse.ret`
- 视频数组（注意是 **`object`** 单数，camelCase）: `$.data.object[N]`
- 翻页: `$.data.upContinueFlag`、`$.data.lastBuffer`（另附别名 `$.data.last_buffer`）
- 账号资料: `$.data.contact`（昵称/签名/认证 `authInfo` 等）、`$.data.finderUserInfo`
- 对应关系: raw=false 的 `videos[]` 对应 raw=true 的 `object[]`；`nickname` 取自 `finderUserInfo` / `contact.nickname`。

### 重要提示（视频下载与解密）:
- 直接访问响应里的 `url` 可能打不开视频页面 —— 微信视频号做了**防盗链**。把 `url` 和 `url_token` 拼成完整 URL 再用任意 HTTP 客户端下载（能打开 = HTTP 200，**不代表能播放**，文件是加密的）。
- ⚠️ **视频文件加密说明**: 下载的 MP4 若无法播放即为加密文件。请使用接口返回的 `decode_key` 字段和加密视频文件进行解密。
- ⚠️ **重要**: 微信**每次请求都返回新的加密链接和 `decode_key`**（即使同一视频）。务必保证 `decode_key` 与下载的加密文件来自**同一次 API 响应**，否则解密失败。
- JSON Path（逐个视频取 —— N 为下标）:
    - `raw=false`（**推荐做媒体下载**）—— `$.data.videos[N].media` 是单个对象:
        - 视频 CDN 链接（不带 Token）: `$.data.videos[N].media.url`
        - 视频 CDN 链接的 Token: `$.data.videos[N].media.url_token`
        - 拼接好的完整 CDN URL（= url + url_token，可直接用）: `$.data.videos[N].media.full_url`
        - 视频解密密钥（每次请求都不一样）: `$.data.videos[N].media.decode_key`
    - `raw=true` —— media 嵌在 `$.data.object[N].objectDesc.media[0]`（camelCase: `url` / `urlToken` / `decodeKey`，完整 URL = `url` + `urlToken`）。做媒体下载建议直接用 `raw=false`，路径更干净。
- 在线解密工具: https://evil0ctal.github.io/WeChat-Channels-Video-File-Decryption/
- 可自行部署的解密 API（Docker 一键部署）: https://github.com/Evil0ctal/WeChat-Channels-Video-File-Decryption

# [English]
### Purpose:
- Get the video list from a WeChat Channels account's homepage.
- Each video carries a `media` object (`url` / `url_token` / `full_url` / `decode_key`) ready for download and decryption.
- Supports pagination for more videos.
- 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` / `object_nonce_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), e.g. `v2_060000231003b20faec8c6e4811dc1d4c602ee30b0771bbcf220c67926bb76ab7702ac335a53@finder` (People's Daily). See `fetch_channel_info` / `fetch_video_detail` / `fetch_channel_id_to_username` docs for how to obtain it.
- last_buffer: Optional pagination cursor (base64). **Leave empty for the first page**; when `up_continue` in the response is truthy, pass the previous page's `last_buffer` to get the next page. (base64 contains `+//=` characters, hence body instead of query.)
- raw: Optional, default True. True=raw response; False=simplified parsed structure (recommended for media download).
### Return:
- User video list with pagination cursor

### Response structure & JSON Path:
#### `raw=false` (simplified, recommended):
- Top level: `$.data.username` / `$.data.nickname` / `$.data.count` (videos on this page) / `$.data.up_continue` (has next page) / `$.data.last_buffer` (pagination cursor)
- Each video `$.data.videos[N]` (N is the index):
    - `id` (video objectId, feed into `fetch_video_detail` / `fetch_video_comments`): `$.data.videos[N].id`
    - `object_nonce_id`: `$.data.videos[N].object_nonce_id`
    - `username` / `nickname` / `title`: `$.data.videos[N].username` etc.
    - Interaction counts: `$.data.videos[N].read_count` / `.like_count` / `.fav_count` / `.forward_count` / `.comment_count`
    - Publish time: `$.data.videos[N].create_time`
    - Location: `$.data.videos[N].location`
#### `raw=true` (raw):
- Status code: `$.data.baseResponse.ret`
- Video array (note: singular **`object`**, camelCase): `$.data.object[N]`
- Pagination: `$.data.upContinueFlag`, `$.data.lastBuffer` (alias `$.data.last_buffer` also provided)
- Account profile: `$.data.contact` (nickname/signature/`authInfo` etc.), `$.data.finderUserInfo`
- Mapping: `videos[]` of raw=false corresponds to `object[]` of raw=true; `nickname` comes from `finderUserInfo` / `contact.nickname`.

### Important Note (video download & decryption):
- Accessing the `url` field directly may fail to open the video page — WeChat Channels uses **anti-hotlinking**. Concatenate `url` and `url_token` into a full URL and download via any HTTP client (opening = HTTP 200, **does not mean playable**, the file is encrypted).
- ⚠️ **Video Encryption Notice**: If the downloaded MP4 cannot be played, it is encrypted. Use the `decode_key` field from the response together with the encrypted file to decrypt it.
- ⚠️ **Important**: WeChat returns a **new encrypted link and `decode_key` on every request** (even for the same video). Make sure the `decode_key` and the downloaded encrypted file come from the **same API response**, otherwise decryption will fail.
- JSON Path (per video — N is the index):
    - `raw=false` (**recommended for media download**) — `$.data.videos[N].media` is a single object:
        - Video CDN link (without Token): `$.data.videos[N].media.url`
        - Token of the video CDN link: `$.data.videos[N].media.url_token`
        - Pre-concatenated full CDN URL (= url + url_token, ready to use): `$.data.videos[N].media.full_url`
        - Video decryption key (different on every request): `$.data.videos[N].media.decode_key`
    - `raw=true` — media is nested at `$.data.object[N].objectDesc.media[0]` (camelCase: `url` / `urlToken` / `decodeKey`, full URL = `url` + `urlToken`). For media download, prefer `raw=false` for cleaner paths.
- 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

- FetchUserVideosRequest
  - `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
  - `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_user_videos/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)
