---
title: "获取蒲公英博主笔记案例/Get PGY blogger note cases"
method: POST
path: "/api/v1/xiaohongshu/pgy/get_blogger_notes"
tags: ["Xiaohongshu-PGY-API"]
---

# 获取蒲公英博主笔记案例/Get PGY blogger note cases

`POST /api/v1/xiaohongshu/pgy/get_blogger_notes`

## 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/xiaohongshu/pgy/get_blogger_notes`
- Auth: HTTP bearer

# [中文]
### 用途:
- 分页获取博主的笔记明细，对应博主主页「笔记数据 → 笔记案例」
- 想看「这个博主接过哪些商单」，把 note_type 设为 3(合作笔记)
- **本接口只覆盖原生笔记，少数博主（笔记以跨平台/跨域内容为主）会返回空列表
  （total 为 0）。遇到这种情况改用 `/get_blogger_notes_v2`（覆盖范围更广，返回字段结构不同）**
### 请求体参数:
- user_id: **必填**，博主用户ID
- page_number: 页码，从 1 开始（注意本接口是 page_number，不是 page_num）
- page_size: 每页数量，**1-8**（蒲公英网页固定 8，不能更大）
- note_type: 笔记类型，4=全部类型(默认) 3=合作笔记 1=图文 2=视频
  **注意**: 与 /get_blogger_notes_rate、/get_blogger_core_data 的同名参数取值不同
  （那两个是 1=图文 2=视频 3=图文+视频）。照搬 note_type=3 会从「合作笔记」
  静默变成「图文+视频」，不会报错
- order_type: 排序，1=最新发布(默认) 2=阅读最多 3=互动最多
- advertise_switch: 流量类型，1=全部(含商业合作，默认) 0=仅自然流量
- feature_tag: 按内容特征筛选，如 "韩系"（取值见博主详情的 featureTags）
- content_tag: 按内容类目筛选，如 "美妆"（取值见博主详情的 contentTags）
- is_third_platform: 1=只看跨域合作笔记 0=不限(默认)
### 返回:
- list[]: 笔记数组，每条含 noteId / title / imgUrl(封面) / date(发布日期) / isVideo(是否视频)
- 数据: readNum(阅读) / likeNum(点赞) / collectNum(收藏) / thirdReadUserNum(站外阅读人数)
- 合作: isAdvertise(是否商业合作) / brandName(合作品牌)
- total: 命中总数（随筛选变化，可据此算总页数）
- 拿到 noteId 后可调 /get_note_detail 查正文、图片/视频与完整互动数据
- **注意**: 本接口的封面字段是 `imgUrl`，`/get_blogger_notes_v2` 是 `imageUrl`，一字之差
### 翻页:
- 只改 page_number，其余参数原样保持不变；翻到某页返回空数组即没有更多

### 响应结构（取数要剥两层）:
- `resp["data"]` 是蒲公英原样信封（含 `code`/`msg`/`success`），业务数据还在它里面一层
- 正确取法：`data = resp["data"]["data"]`；下面「返回」列的字段都在这一层下
### 计费:
- HTTP 200 → **计费**。包含「查无结果」（`data` 为 null，如 ID 不存在或筛选无命中）——
  请求已送达蒲公英，同样扣费，不要因为拿不到数据就重试
- HTTP 400 → 不计费（参数格式非法，或上游资源不足/异常）

# [English]
### Purpose:
- Paginated note list of a blogger ("Note Data → Note Cases" on the PGY blogger page)
- To inspect sponsored posts only, set note_type=3
### Request Body Parameters:
- user_id: **required**, blogger user ID
- page_number: page number from 1 (note: this endpoint uses page_number, not page_num)
- page_size: **1-8** (fixed at 8 on the PGY web page, cannot be larger)
- note_type: 4=all (default), 3=sponsored, 1=image-text, 2=video
  **Warning**: the same parameter means something else in /get_blogger_notes_rate
  and /get_blogger_core_data (1=image-text, 2=video, 3=both). Copying note_type=3
  across silently switches "sponsored" to "image-text+video" with no error
- order_type: 1=newest (default), 2=most read, 3=most engaged
- advertise_switch: 1=all traffic incl. sponsored (default), 0=organic only
- feature_tag: filter by feature tag, e.g. "韩系" (see featureTags in blogger detail)
- content_tag: filter by content category, e.g. "美妆" (see contentTags in blogger detail)
- is_third_platform: 1=cross-platform sponsored notes only, 0=no limit (default)
### Return:
- list[]: notes with noteId / title / imgUrl (cover) / date (publish date) / isVideo
- Metrics: readNum / likeNum / collectNum / thirdReadUserNum (off-site readers)
- Sponsorship: isAdvertise / brandName
- total: match count (varies with filters — use it to compute page count)
- Feed noteId into /get_note_detail for full body, media and engagement data
- **Note**: cover key here is `imgUrl`; `/get_blogger_notes_v2` uses `imageUrl`
### Paging:
- Change page_number only, keep other params identical; an empty array means no more data
### Note:
- This endpoint only covers native notes; a few bloggers (whose notes are mostly
  cross-platform) return an empty list (total 0). In that case use `/get_blogger_notes_v2`
  (wider coverage, different response shape).

### Response shape (two layers):
- `resp["data"]` is PGY's raw envelope (with `code`/`msg`/`success`); the payload is one level deeper
- Correct access: `data = resp["data"]["data"]` — every field listed under "Return" lives here
### Billing:
- HTTP 200 → **charged**, including "no result" (`data` is null, e.g. ID not found or filters matched
  nothing): the request did reach PGY, so retrying on empty data just burns quota
- HTTP 400 → not charged (malformed params, or upstream unavailable/error)

# [示例/Example]
```json
// ① 最近发布的全部笔记
{"user_id": "5c668b3e0000000012021605", "page_number": 1, "page_size": 8}

// ② 只看合作笔记（商单）
{"user_id": "5c668b3e0000000012021605", "page_number": 1, "page_size": 8, "note_type": 3}

// ③ 只看视频、按互动排序
{"user_id": "5c668b3e0000000012021605", "page_number": 1, "page_size": 8, "note_type": 2, "order_type": 2}

// ④ 只看广告投放过的笔记
{"user_id": "5c668b3e0000000012021605", "page_number": 1, "page_size": 8, "advertise_switch": 1}

// ⑤ 按类目过滤
{"user_id": "5c668b3e0000000012021605", "page_number": 1, "page_size": 8, "content_tag": "美妆"}
```

**返空时改用 `/get_blogger_notes_v2`**：本接口走原生 KOL 链路，对跨域博主可能返回空列表。
两个接口的返回结构不同（v2 在 `noteList[].noteInfo` 下），解析代码不能混用。

If this returns an empty list for a cross-domain blogger, switch to `/get_blogger_notes_v2`.
Their response shapes differ — do not reuse the same parser.

## Request body

- NotesReq
  - `user_id` string, required: 博主用户ID/Blogger user ID
  - `page_number` integer: 页码，从 1 开始/Page number, from 1
  - `page_size` integer: 每页数量，1-8（蒲公英网页固定 8）/Page size, 1-8 (fixed at 8 on PGY web)
  - `note_type` 1 | 2 | 3 | 4: 笔记类型 4=全部类型(默认) 3=合作笔记 1=图文 2=视频/Note type
  - `order_type` 1 | 2 | 3: 排序 1=最新发布(默认) 2=阅读最多 3=互动最多/Sort
  - `advertise_switch` 0 | 1: 流量类型 1=全部(含商业合作) 0=仅自然流量/Traffic type
  - `feature_tag` string: 按内容特征筛选，如 韩系；取值见博主详情的 featureTags/Filter by feature tag
  - `content_tag` string: 按内容类目筛选，如 美妆；取值见博主详情的 contentTags/Filter by content tag
  - `is_third_platform` 0 | 1: 1=只看跨域合作笔记 0=不限(默认)/Cross-platform notes only

## 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/xiaohongshu/pgy/get_blogger_notes/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)
