# Payload
Source: https://blume.ndjp.net/docs/content/sources/payload/
English: https://useblume.dev/docs/content/sources/payload

内建的 `payload()` 适配器通过 Payload REST API（`/api/<collection>`）读取一个集合，并把每个文档的 Lexical 正文降级为 Markdown：段落、标题、项目符号列表、编号列表、勾选列表、引用、链接、上传文件和水平分隔线。放在文本字段里的正文会按 Markdown 原样透传，只有一点例外：不是网页、邮件、电话或相对地址的链接只保留它的文字。无需安装任何东西。

```ts blume.config.ts
import { defineConfig } from "blume";
import { filesystem, payload } from "blume/sources";

export default defineConfig({
  content: {
    sources: [
      filesystem({ root: "docs" }),
      payload({
        prefix: "handbook",
        url: "https://cms.example.com",
        collection: "docs",
        // 字段路径默认为 title / description / slug / content / updatedAt
        fields: { body: "richText" },
        // 额外的查询参数：where[...], sort
        params: { sort: "title" },
      }),
    ],
  },
});
```

API key 来自 `PAYLOAD_API_KEY` 环境变量，并以 `users API-Key <key>` 的形式发送；当这个 key 属于另一个启用了认证的集合时，设置 `authCollection`。只有已发布的文档会被导入 —— `--preview` 会请求草稿并以 `draft: true` 暂存它们。文档以 `depth: 1` 抓取，因此上传文件会带上自己的 URL，而相对的上传路径（`/media/x.png`）会相对于 `url` 解析。`block` 或 `inlineBlock` 节点通过引擎的 `serializers` 选项（以 `blockType` 为键）映射为 Blume 组件，前提是你直接构造 `payloadSource` 并把它传给 [`custom()`](/docs/content/sources/custom/)。设置 `serializers` 会以 MDX 写出该来源的页面，让返回的组件得以渲染；放在 Markdown 文本字段里的正文则仍是 Markdown。