先看懂

API 可以理解成:把“发布按钮”开放给你的系统

如果你已经有文章来源,比如 AI 写作工具、CMS、表格系统、采编系统,或者自己的内容后台,就不用再让人一篇篇复制到公众号、头条、百家、知乎。你的系统把文章交给颜小二,颜小二负责把它送进发布流程,并把结果返回给你。

1

你把文章交过来

标题、正文、封面、要发到哪一组账号,这些信息由你的系统一次性提交。

2

颜小二去执行发布

系统按账号分组排队发布,不需要运营反复切平台、切账号、复制粘贴。

3

结果回到你这里

成功链接、失败原因、是否需要重新登录,都可以回传,也能在后台看板查看。

适合谁用

不是只有技术公司才需要 API

内容运营团队

每天要发多篇文章、多平台、多账号,想减少复制粘贴和漏发。

AI 写作工具

文章已经能自动生成,但还差最后一步“自动发出去”。

矩阵号团队

公众号、头条、百家、知乎等账号多,需要一个统一发布出口。

怎么跑起来

小白版接入流程:只需要盯住 5 件事

1. 先把账号接好

在颜小二里把要发布的自媒体账号登录好,并按业务分组,例如“品牌号”“测评号”“本地号”。

2. 拿到一把接口钥匙

这把钥匙叫 Token,只给你的系统服务端使用,不要发到群里,也不要放到网页前端。

3. 告诉系统发到哪组账号

每组账号有一个分组编码,比如 brand_main。你的系统提交文章时带上这个编码。

4. 配一个结果接收地址

发布成功还是失败,颜小二会通知你的系统。这个接收地址一般由技术同事提供。

5. 在看板里查结果

不会看代码也没关系,后台会展示 API 调用、发布任务、失败原因和回调日志。

一句话总结

运营只管准备账号和内容,技术只管接一个接口,颜小二负责把发布执行层跑起来。

交给技术

你可以把这一段直接发给技术同事

我们要把内容系统里的文章自动推给颜小二发布。需要技术同事做三件事:保存颜小二提供的 Token;调用 POST /api/v1/articles/publish 提交文章;提供一个 callback_url 接收发布结果。必填字段是 external_article_idgroup_codetitlecontent_html

接口地址:POST /api/v1/articles/publish
必须带:Authorization: Bearer 平台提供的Token
必须传:文章ID、账号分组、标题、正文
发布结果:颜小二会回调到你们配置的 callback_url
不会看代码的人:只需要在看板里看成功、失败、需要重新登录
准备清单

正式接入前,老板和运营先确认这些

业务侧准备

确认要发哪些平台、哪些账号、分成几个账号组、谁负责处理失败和重新登录。

技术侧准备

保存 Token、写入文章推送接口、配置结果接收地址 callback_url,并在测试账号上先跑通。

技术鉴权

Token 是接口钥匙,必须放在服务端

这一段给技术同事看。所有 API 请求都要带 Token,可以理解成“接口钥匙”。它只能放在你们自己的服务器里,不能放到网页、客户端安装包、公开文档或微信群截图里。

Authorization: Bearer yxe_live_xxxxxxxxxxxxx
Content-Type: application/json

安全约束

当前每个租户只有一个有效 API Token;颜小二服务端只保存 Token Hash,不保存明文 Token。Token 泄露后应在租户控制台立即重置。

技术接口

文章发布接口 · POST /api/v1/articles/publish

POST https://yanxiaoer.openclawcn.com.cn/api/v1/articles/publish

这是技术真正要调用的接口。简单说:把一篇文章和一个账号分组交给颜小二,颜小二就按这组账号去创建发布任务。

字段说明:哪些必须填,哪些可选

字段类型必填说明
external_article_idstring第三方文章 ID,同租户唯一,用于幂等去重。
group_codestring账号分组编码,颜小二按该分组找到发布账号。
titlestring文章标题,最长 255 字符。
content_htmlstring正文 HTML,用于图文发布。
cover_urlstring封面图 URL,必须公网可访问。
summarystring摘要,不同平台是否使用以适配器能力为准。
tagsstring[]标签数组。
categorystring分类名称,按平台规则映射。
publish_typestringpublishdraft,默认 publish
dedupe_keystring额外幂等键,便于调用方追踪。
extraobject扩展字段,进入原始 payload。

V1.1 不接收调用方自传 callback_url,也不接收 scheduled_at。callback_url 统一在租户控制台配置。

cURL

curl -X POST "https://yanxiaoer.openclawcn.com.cn/api/v1/articles/publish" \
  -H "Authorization: Bearer yxe_live_xxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "external_article_id": "cms_20260508_0001",
    "group_code": "brand_main",
    "title": "AI 内容系统为什么需要自动发布层",
    "content_html": "<p>这是一篇由内容系统生成并推送到颜小二的文章。</p>",
    "cover_url": "https://cdn.example.com/covers/ai-publish.jpg",
    "summary": "让内容从生成走到真实发布。",
    "tags": ["AI", "自媒体", "自动发布"],
    "category": "科技",
    "publish_type": "publish"
  }'

JavaScript

const response = await fetch('https://yanxiaoer.openclawcn.com.cn/api/v1/articles/publish', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.YANXIAOER_API_TOKEN}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    external_article_id: 'cms_20260508_0001',
    group_code: 'brand_main',
    title: 'AI 内容系统为什么需要自动发布层',
    content_html: '<p>这是一篇由内容系统生成并推送到颜小二的文章。</p>',
    publish_type: 'publish'
  })
});
const result = await response.json();
提交结果

接口返回 accepted,表示“已经收下并开始排队”

提交成功不等于已经发到平台,而是颜小二已经收下文章并创建发布任务。真正发布成功或失败,会通过回调和看板继续查看。

{
  "code": 0,
  "message": "accepted",
  "data": {
    "job_id": "job_f4b6d7c2a9c0410eb6c2c4d6e2f6a001",
    "article_id": 1024,
    "external_article_id": "cms_20260508_0001",
    "created_tasks": 4
  }
}

同一租户下 external_article_id 唯一。重复提交不会重复创建任务:

{
  "code": 0,
  "message": "duplicate_article",
  "data": {
    "job_id": "job_f4b6d7c2a9c0410eb6c2c4d6e2f6a001",
    "external_article_id": "cms_20260508_0001",
    "created_tasks": 0
  }
}
结果通知

回调就是:发布完以后通知你的系统

如果发布成功,回调里会带上文章链接;如果失败,会告诉你失败原因,比如账号需要重新登录、平台风控、电脑端 Agent 离线。不会看技术日志的人,也可以直接在看板里看。

POST {callback_url}
Content-Type: application/json
X-Callback-Source: media-publisher

成功回调

{
  "job_id": "job_f4b6d7...",
  "external_article_id": "cms_20260508_0001",
  "platform": "toutiao",
  "account_code": "toutiao_main",
  "status": "success",
  "published_url": "https://www.toutiao.com/article/1234567890/",
  "error_code": null,
  "error_message": null,
  "status_note": null,
  "finished_at": "2026-05-08T12:30:00.000Z"
}

失败回调

{
  "job_id": "job_f4b6d7...",
  "external_article_id": "cms_20260508_0001",
  "platform": "baijiahao",
  "account_code": "baijiahao_main",
  "status": "need_login",
  "published_url": null,
  "error_code": "ACCOUNT_NEED_LOGIN",
  "error_message": "账号登录失效,需要重新登录",
  "status_note": null,
  "finished_at": "2026-05-08T12:35:00.000Z"
}

回调成功判定

HTTP 2xx 默认视为成功。如果响应体是 JSON 且包含 code 字段,则 code = 0 视为成功。失败回调会进入基础自动重试:约 2 分钟间隔,最多 5 次,同时可在控制台手动重推。

常见问题

失败时不要慌,先看是哪一类问题

HTTPmessage / error_code说明处理建议
400INVALID_PARAMS字段缺失或格式错误按 detail 修正后重试
401UNAUTHORIZEDToken 缺失或无效检查 Header 或重置 Token
404GROUP_NOT_FOUND分组不存在或无可用账号核对 group_code 和账号状态
429TENANT_RATE_LIMITED租户分钟级频率超限降低频率,稍后重试
回调ACCOUNT_NEED_LOGIN账号需要重新登录站长在电脑端 Agent 重新登录
回调PLATFORM_RISK_CONTROL平台风控或安全验证降低频率,处理平台验证
回调AGENT_OFFLINE电脑端 Agent 离线启动 Agent 并保持在线
看板

运营不用看代码,也能查发布进度

颜小二不是把接口丢给你就结束。后台会把 API 调用、文章、任务、回调和 Agent 状态集中展示,运营能看懂,技术也能排查。

API 调用记录

查看请求路径、方法、请求体、响应体、HTTP 状态、调用时间、IP 与 User-Agent。

发布任务看板

查看 pending、waiting_agent、running、success、failed、need_login、risk_control 等状态。

回调日志

查看 callback_url、请求体、HTTP 状态、响应体、是否成功和错误信息,失败可手动重推。

Versioning

V1.1 版本说明

  • 正式明确对外文章接收接口为 /api/v1/articles/publish
  • 明确 callback_url 由租户控制台固定配置,调用方请求体不传 callback_url。
  • 明确第三方不通过公开查询接口轮询任务,状态通过回调与控制台看板获得。
  • 新增 API 调用记录可视化、发布任务状态看板、回调日志看板说明。
  • 明确回调失败基础自动重试:约 2 分钟间隔,最多 5 次。
  • 明确当前 V1.1 不接收 scheduled_at