WHRCT22 · 开放写作接口

让工具接入你的写作流程。

先登录后台,在「API 授权」中创建密钥。把密钥交给你信任的 AI 工具,使用 Bearer 授权调用以下接口。所有示例中的域名可以替换为当前网站域名。

打开 OpenAPI 说明 ↗

1. 上传图片

需要 media:write 权限。支持 JPG、PNG、静态 WebP,最大 3 MB、2400 万像素。服务端转换为 WebP、移除图片元数据,返回 media.url 和可插入正文的 markdown。

curl 'https://me.aichaln.one/api/cms/media'   -H "Authorization: Bearer $WHR_API_KEY"   -F 'file=@cover.png'

2. 提交文章

需要 articles:write 权限。默认保存为草稿。明确将 status 设为 published,且密钥具有 articles:publish 权限时,文章才会公开并出现在首页。

curl 'https://me.aichaln.one/api/cms/articles'   -H "Authorization: Bearer $WHR_API_KEY"   -H 'Content-Type: application/json'   --data '{
    "slug": "my-first-post",
    "title": "我的第一篇文章",
    "excerpt": "关于一次新尝试的记录。",
    "body": "## 从一个想法开始\n\n这里是 Markdown 正文。",
    "tags": ["技术"],
    "status": "draft"
  }'

添加封面时,将 coverImage 设为上传接口返回的 media.url,并填写 coverAlt 描述图片内容。正文图片同样使用本站上传的地址。原始 HTML 不会执行或渲染。

3. 读取与修改

GET /api/cms/articles 返回公开文章列表。查询参数 limit 为 1–50,offset 为偏移量。加入 all=true 并提供 articles:read 权限,可读取草稿列表。GET /api/cms/articles/文章链接 返回完整文章。

PUT /api/cms/articles/文章链接 完整替换文章:提交与创建相同的字段,并附上最新 article.revision。文章链接创建后不可修改。修改或撤回已经发布的文章同样需要 articles:publish 权限。

// 读取返回 { article: { ..., revision: 1 } }
// 更新时只提交可编辑字段及 revision,不要提交服务器时间字段:
{
  "slug": "my-first-post",
  "title": "修改后的标题",
  "excerpt": "更新后的摘要",
  "body": "更新后的 Markdown 正文。",
  "coverImage": "",
  "coverAlt": "",
  "tags": ["技术"],
  "status": "published",
  "revision": 1
}

4. 给文章分类

GET /api/cms/categories 获取可用类目,每项包含 id 和 name。提交或修改文章时,将 categoryId 设为对应 id;空字符串表示未分类。旧客户端更新时省略 categoryId,会保留文章当前类目。

// 先读取类目:GET /api/cms/categories
// 然后在文章 JSON 中附上:
"categoryId": "类目列表返回的 UUID"

// 按类目分页读取公开文章:
GET /api/cms/articles?category=类目UUID&limit=12&offset=0

每篇文章选择一个类目,tags 标签可同时保留多个。新增、改名和删除类目由管理员在后台操作;改名不会改变 id。非空类目不能删除,请先将文章移到其他类目或设为未分类。

失败时如何处理

  • 400:字段或图片格式有误,检查返回的 error。
  • 401 / 403:密钥无效、过期、被撤销,或缺少对应权限。
  • 404:文章不存在,或你没有读取草稿的权限。
  • 409:链接重复或版本冲突。先重新读取文章,合并修改后使用最新 revision 提交,不要直接覆盖。
  • 413:内容过大。正文最多 100,000 字符,图片最大 3 MB。
  • 429:每个密钥每分钟最多 120 次请求,上传每小时最多 30 次。稍后再试。
  • 503:存储服务暂不可用,保留输入内容后重试。若创建请求中断,先按 slug 查询是否已保存,再决定重试。

API 密钥只在创建时显示完整内容,可在后台随时撤销。删除文章和管理 API 密钥只允许管理员登录操作。