> ## Documentation Index
> Fetch the complete documentation index at: https://aisa.one/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get WeChat Channels Live History

> Get WeChat Channels Live History

Get WeChat Channels Live History

**Pricing** — billed per successful call; the final charge scales by your plan multiplier. Charged only when the upstream response body `code` is `200`.

<Note>
  Response structure is not yet fully documented — **refer to the actual API response**.
</Note>

## Example

```bash theme={null}
curl -X POST "https://api.aisa.one/apis/v1/tikhub/wechat_channels/v2/fetch_live_history" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'  # see request schema below
```


## OpenAPI

````yaml openapi/tikhub.json POST /tikhub/wechat_channels/v2/fetch_live_history
openapi: 3.0.0
info:
  title: TikHub API
  description: >-
    Multi-platform social media data — Douyin, TikTok, Bilibili, Kuaishou,
    Weibo, Xiaohongshu, Zhihu, and commercial (Xingtu/Huahuo/Billboard)
    endpoints.
  version: 1.0.0
servers:
  - url: https://api.aisa.one/apis/v1
security:
  - bearerAuth: []
paths:
  /tikhub/wechat_channels/v2/fetch_live_history:
    post:
      tags:
        - TikHub - Wechat_channels
      summary: Get WeChat Channels Live History
      description: >-
        WeChat Channels (v2). Pricing and billing notes describe the upstream
        provider. Use the AIsa price quote for gateway calls.


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

        - ⏱️ 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


        API references: `fetch_collection_videos` = `POST
        /tikhub/wechat_channels/v2/fetch_collection_videos` (operationId:
        `post_tikhub_wechat_channels_v2_fetch_collection_videos`);
        `fetch_live_detail` = `POST
        /tikhub/wechat_channels/v2/fetch_live_detail` (operationId:
        `post_tikhub_wechat_channels_v2_fetch_live_detail`);
        `fetch_video_detail` = `POST
        /tikhub/wechat_channels/v2/fetch_video_detail` (operationId:
        `post_tikhub_wechat_channels_v2_fetch_video_detail`).
      operationId: post_tikhub_wechat_channels_v2_fetch_live_history
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FetchLiveHistoryRequest'
        required: true
      responses:
        '200':
          description: >-
            Successful response. The outer object follows `ResponseModel`; the
            endpoint-specific payload is in `data`.


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


            API references: `fetch_collection_videos` = `POST
            /tikhub/wechat_channels/v2/fetch_collection_videos` (operationId:
            `post_tikhub_wechat_channels_v2_fetch_collection_videos`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseModel'
components:
  schemas:
    FetchLiveHistoryRequest:
      properties:
        username:
          type: string
          maxLength: 256
          minLength: 10
          pattern: ^v2_[0-9a-fA-F]+@finder$
          title: Username
          description: >-
            WeChat Channels finder username (`v2_…@finder` format). Example (an
            account with live replays):
            `v2_060000231003b20faec8cae1811ac4d5c702ea32b0771737aa785454f7f8177114cc4d248d66@finder`
            (Huxiu).
          example: >-
            v2_060000231003b20faec8cae1811ac4d5c702ea32b0771737aa785454f7f8177114cc4d248d66@finder
        last_buffer:
          title: Last Buffer
          description: >-
            Optional pagination cursor (base64), **leave empty for the first
            page**; when `continue_flag` is truthy, pass the previous page's
            `last_buffer`.
          default: ''
          nullable: true
          type: string
          pattern: ^[A-Za-z0-9+/=_-]*$
        flag:
          type: integer
          maximum: 1000
          minimum: 0
          title: Flag
          description: Fetch flag, default 12
          default: 12
        raw:
          type: boolean
          title: Raw
          description: >-
            True=raw response; False=simplified parsed structure (recommended
            for media download
          default: true
      type: object
      required:
        - username
      title: FetchLiveHistoryRequest
    ResponseModel:
      properties:
        code:
          type: integer
          title: Code
          description: HTTP status code
          default: 200
        request_id:
          title: Request Id
          description: Unique request identifier
          nullable: true
          type: string
        message:
          type: string
          title: Message
          description: Response message (EN-US)
          default: Request successful. This request will incur a charge.
        message_zh:
          type: string
          title: Message Zh
          description: Response message (ZH-CN)
          default: 请求成功，本次请求将被计费。
        support:
          type: string
          title: Support
          description: Support message
          default: 'Discord: https://discord.gg/aMEAS8Xsvz'
        time:
          type: string
          title: Time
          description: The time the response was generated
        time_stamp:
          type: integer
          title: Time Stamp
          description: The timestamp the response was generated
        time_zone:
          type: string
          title: Time Zone
          description: The timezone of the response time
          default: America/Los_Angeles
        docs:
          title: Docs
          description: Link to the API Swagger documentation for this endpoint
          nullable: true
          type: string
        cache_message:
          title: Cache Message
          description: Cache message (EN-US)
          default: >-
            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.
          nullable: true
          type: string
        cache_message_zh:
          title: Cache Message Zh
          description: Cache message (ZH-CN)
          default: >-
            本次响应已缓存，可通过下方 URL 直接查看，有效期 24
            小时，访问缓存链接无额外费用。缓存仅用于请求溯源，不影响接口数据的时效性，也不会再次通过接口返回。
          nullable: true
          type: string
        cache_url:
          title: Cache Url
          description: The URL to access the cached result
          nullable: true
          type: string
        router:
          type: string
          title: Router
          description: The endpoint that generated this response
          default: ''
        params:
          title: Params
          description: The parameters used in the request
          default: {}
        data:
          title: Data
          description: >-
            Endpoint-specific response payload. The official shared model does
            not declare a fixed type or field set. Use the operation's
            documented return fields or response example; an operation-specific
            schema, when present, describes the documented fields. Undocumented
            fields must be read from the actual response rather than assumed.
          nullable: true
      type: object
      title: ResponseModel
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: AIsa API key. Get yours at https://aisa.one

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.