API 接入说明 V1.1:先看懂,再交给技术接入
发布日期:2026-05-08。这里不是只写给程序员看的接口表,而是给老板、运营、内容团队和技术同事共用的接入说明:先讲清楚 API 能帮你做什么,再把技术细节放到后面。
API 可以理解成:把“发布按钮”开放给你的系统
如果你已经有文章来源,比如 AI 写作工具、CMS、表格系统、采编系统,或者自己的内容后台,就不用再让人一篇篇复制到公众号、头条、百家、知乎。你的系统把文章交给颜小二,颜小二负责把它送进发布流程,并把结果返回给你。
你把文章交过来
标题、正文、封面、要发到哪一组账号,这些信息由你的系统一次性提交。
颜小二去执行发布
系统按账号分组排队发布,不需要运营反复切平台、切账号、复制粘贴。
结果回到你这里
成功链接、失败原因、是否需要重新登录,都可以回传,也能在后台看板查看。
不是只有技术公司才需要 API
内容运营团队
每天要发多篇文章、多平台、多账号,想减少复制粘贴和漏发。
AI 写作工具
文章已经能自动生成,但还差最后一步“自动发出去”。
矩阵号团队
公众号、头条、百家、知乎等账号多,需要一个统一发布出口。
小白版接入流程:只需要盯住 5 件事
1. 先把账号接好
在颜小二里把要发布的自媒体账号登录好,并按业务分组,例如“品牌号”“测评号”“本地号”。
2. 拿到一把接口钥匙
这把钥匙叫 Token,只给你的系统服务端使用,不要发到群里,也不要放到网页前端。
3. 告诉系统发到哪组账号
每组账号有一个分组编码,比如 brand_main。你的系统提交文章时带上这个编码。
4. 配一个结果接收地址
发布成功还是失败,颜小二会通知你的系统。这个接收地址一般由技术同事提供。
5. 在看板里查结果
不会看代码也没关系,后台会展示 API 调用、发布任务、失败原因和回调日志。
一句话总结
运营只管准备账号和内容,技术只管接一个接口,颜小二负责把发布执行层跑起来。
你可以把这一段直接发给技术同事
我们要把内容系统里的文章自动推给颜小二发布。需要技术同事做三件事:保存颜小二提供的 Token;调用 POST /api/v1/articles/publish 提交文章;提供一个 callback_url 接收发布结果。必填字段是 external_article_id、group_code、title、content_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_id | string | 是 | 第三方文章 ID,同租户唯一,用于幂等去重。 |
| group_code | string | 是 | 账号分组编码,颜小二按该分组找到发布账号。 |
| title | string | 是 | 文章标题,最长 255 字符。 |
| content_html | string | 是 | 正文 HTML,用于图文发布。 |
| cover_url | string | 否 | 封面图 URL,必须公网可访问。 |
| summary | string | 否 | 摘要,不同平台是否使用以适配器能力为准。 |
| tags | string[] | 否 | 标签数组。 |
| category | string | 否 | 分类名称,按平台规则映射。 |
| publish_type | string | 否 | publish 或 draft,默认 publish。 |
| dedupe_key | string | 否 | 额外幂等键,便于调用方追踪。 |
| extra | object | 否 | 扩展字段,进入原始 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 次,同时可在控制台手动重推。
失败时不要慌,先看是哪一类问题
| HTTP | message / error_code | 说明 | 处理建议 |
|---|---|---|---|
| 400 | INVALID_PARAMS | 字段缺失或格式错误 | 按 detail 修正后重试 |
| 401 | UNAUTHORIZED | Token 缺失或无效 | 检查 Header 或重置 Token |
| 404 | GROUP_NOT_FOUND | 分组不存在或无可用账号 | 核对 group_code 和账号状态 |
| 429 | TENANT_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 状态、响应体、是否成功和错误信息,失败可手动重推。
V1.1 版本说明
- 正式明确对外文章接收接口为
/api/v1/articles/publish。 - 明确 callback_url 由租户控制台固定配置,调用方请求体不传 callback_url。
- 明确第三方不通过公开查询接口轮询任务,状态通过回调与控制台看板获得。
- 新增 API 调用记录可视化、发布任务状态看板、回调日志看板说明。
- 明确回调失败基础自动重试:约 2 分钟间隔,最多 5 次。
- 明确当前 V1.1 不接收
scheduled_at。