---
title: "搜视频号视频（时长/排序/时间筛选）/WeChat Channels Video Search"
method: POST
path: "/api/v1/wechat_search/v2/fetch_search_videos"
tags: ["WeChat-Search-V2-API"]
---

# 搜视频号视频（时长/排序/时间筛选）/WeChat Channels Video Search

`POST /api/v1/wechat_search/v2/fetch_search_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_search/v2/fetch_search_videos`
- Auth: HTTP bearer

# [中文]
### 用途:
- 专搜视频号视频（`video` 垂类），并支持搜索结果页里的「时长」「不限/最新/最热」排序与「时间」下拉。
- 等价于综合搜索 `/fetch_search`（`business_type=video`）再叠加筛选，筛选项均实测有效。
- 价格：0.01$/次
- ⏱️ 由于微信服务器原因，本接口响应较慢，请将客户端请求超时（timeout）设置为 30 秒；timeout 设置过小会造成已扣费但收不到响应的情况。
- ⚠️ 大整数 ID 精度：响应中的 `docID` / `feedNonceId` 等为 64 位大整数，超出 JavaScript 安全整数范围（2^53-1）。请始终以**字符串**方式接收 / 传递这类 ID（解析 JSON 用 json-bigint 或按文本取值），勿让其经过 JS `Number`。Swagger UI 文档页对超大整数会末位舍入显示，属正常现象，不影响接口实际返回的数据。
### 参数:
- keyword: 搜索关键词（去空白后 1-100 字）。示例 `美食`
- duration: 可选，默认 `all`。时长档（video 垂类专属）—— 不限 `all`/0 / 短(<5min) `short`/1 / 中(5-10min) `medium`/2 / 长(20min+) `long`/3，字符串键或整数均可，非法值报错（400）。
- sort: 可选，默认 `default`。排序 —— 不限(相关性) `default`/0 / 最新(发布时间降序) `latest`/1 / 最热(点赞降序) `hot`/2，字符串键或整数均可，非法值报错（400）。
- publish_time: 可选，默认 `all`。发布时间 —— 不限 `all`/0 / 最近一天 `day`/1 / 最近七天 `week`/2 / 最近半年 `half_year`/3，字符串键或整数均可，非法值报错（400）。
- offset: 可选，默认 0（>=0）。首页传 `0`；翻页请用 `cursor`（只传 offset 无效）。
- cursor: 可选。翻页游标，用法同综合搜索 `/fetch_search`。首页留空；翻页时把上一页响应返回的 `cursor` 原样传回（须同时重复上一页的 `duration` / `sort` / `publish_time`）。
- raw: 可选，默认 True。True=原始搜索响应；False=精简解析。
### 返回:
- 视频号视频搜索结果列表（结构同综合搜索的 `video` 垂类）

### 典型链路:
- 💡 排序下拉里的「账号」选项**不是排序**，而是切到公众号垂类 —— 用综合搜索 `/fetch_search`（`business_type=account`）。
- 💡 **拿视频号详情（媒体下载地址 / decode_key）**：视频结果项**不直接含**媒体，只给 `exportId`（+ `jumpInfo.extInfo.feedNonceId`）。要下载 / 解密：取 `exportId` → 走视频号 V2 接口 `/api/v1/wechat_channels/v2/fetch_video_detail`（传 `export_id`）拿 `media`（`url` / `url_token` / `decode_key`）和明文 `username`。结果字段与响应结构说明同 `/fetch_search`。

# [English]
### Purpose:
- Search WeChat Channels videos specifically (`video` vertical), with the result page's "duration" filter, "relevance/newest/most-liked" sort, and "time" dropdown.
- Equivalent to universal search `/fetch_search` (`business_type=video`) plus filters; all filters are verified to work.
- 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 `docID` / `feedNonceId` 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:
- keyword: Search keyword (1-100 chars after trimming). E.g. `美食`
- duration: Optional, default `all`. Duration tier (Channels video only) — `all`/0 / `short`/1 (<5min) / `medium`/2 (5-10min) / `long`/3 (20min+); string key or integer, invalid values rejected (400).
- sort: Optional, default `default`. Sort — `default`/0 (relevance) / `latest`/1 (newest) / `hot`/2 (most liked); string key or integer, invalid values rejected (400).
- publish_time: Optional, default `all`. Publish time — `all`/0 / `day`/1 / `week`/2 / `half_year`/3; string key or integer, invalid values rejected (400).
- offset: Optional, default 0 (>=0). Pass `0` for the first page; use `cursor` to paginate (offset alone does not work).
- cursor: Optional. Pagination cursor, same usage as universal search `/fetch_search`. Leave empty for the first page; for the next page pass back the `cursor` from the previous response (repeat the same `duration` / `sort` / `publish_time`).
- raw: Optional, default True. True=raw search response; False=simplified parsing.
### Return:
- Channels video search result list (same structure as the `video` vertical of universal search)

### Typical chains:
- 💡 The "account" option in the sort dropdown is **not a sort** — it switches to the official-account vertical; use universal search `/fetch_search` (`business_type=account`).
- 💡 **To get Channels video detail (media download address / decode_key)**: video result items do **not** contain media directly — only `exportId` (+ `jumpInfo.extInfo.feedNonceId`). To download / decrypt: take `exportId` → call the Channels V2 endpoint `/api/v1/wechat_channels/v2/fetch_video_detail` (pass `export_id`) to get `media` (`url` / `url_token` / `decode_key`) and the plain `username`. Result fields and response structure are the same as `/fetch_search`.

## Request body

- FetchSearchVideosRequest
  - `keyword` string, required: 搜索关键词（1-100 字）/Search keyword (1-100 chars)
  - `duration` union: 时长档（video 垂类专属）：不限 all/0 / 短(<5min) short/1 / 中(5-10min) medium/2 / 长(20min+) long/3，字符串键或整数均可/Duration tier (Channels video only): all/0 / short/1 (<5min) / medium/2 (5-10min) / long/3 (20min+); string key or integer
    - integer
    - string
  - `sort` union: 排序：不限(相关性) default/0 / 最新(发布时间降序) latest/1 / 最热(点赞降序) hot/2，字符串键或整数均可/Sort: default/0 (relevance) / latest/1 (newest) / hot/2 (most liked); string key or integer
    - integer
    - string
  - `publish_time` union: 发布时间：不限 all/0 / 最近一天 day/1 / 最近七天 week/2 / 最近半年 half_year/3，字符串键或整数均可/Publish time: all/0 / day/1 / week/2 / half_year/3; string key or integer
    - integer
    - string
  - `offset` integer: 首页传 0；翻页请用 cursor（只传 offset 无效）/Pass 0 for the first page; use cursor to paginate (offset alone does not work)
  - `cursor` string, nullable: 翻页游标，用法同综合搜索：首页留空；翻页时把上一页响应返回的 cursor 原样传回/Pagination cursor, same as universal search: leave empty for the first page; pass back the cursor from the previous response
  - `raw` boolean: True=原始搜索响应；False=精简解析结构/True=raw search response; False=simplified parsed structure

## 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_search/v2/fetch_search_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)
