云梭发布以开放 API 为核心,提供完整的内容分发能力,让开发者将一键发布、账号托管与自定义平台反向推送直接集成进自己的业务系统。
云梭发布API基于REST架构设计,使用JSON作为数据交换格式。
https://www.yunsuofabu.com/v1
所有API响应都遵循统一的JSON格式:
{
"code": 状态,
"msg": 消息,
"time": 时间戳,
"data": 数据详情
}
访问云梭发布API需要在请求中包含有效签名。
登录云梭发布控制台,在「个人信息-开发配置」中生成API_KEY。
根据规则hex(sha512(API_KEY + 随机字符串 + USER_CODE))生成签名,将以下签名包含在http请求得header中:
Signature: 你的签名(sha512的十六进制字符串)
Nonce: 生成的随机字符串
User-Code: 在开发配置页面中获取
API使用标准HTTP状态码表示请求结果:
| 状态码 | 含义 | 说明 |
|---|---|---|
| 1 或其他大于0状态码 | 成功 | 请求成功完成 |
| -1 或其他小于0状态码 | 错误请求 | 请求错误或服务错误 |
主动发布内容到自己已配置账号池中的自媒体账号。
POST /distribution/push
| 参数 | 类型 | 验证规则 | 错误提示 | 必填 |
|---|---|---|---|---|
| type | int | 必填,只能为0(图文)、1(视频)、2(图集)、3(音频) | 类型参数有误 | 是 |
| title | string | 必填,长度 15-40 字符 | 请填写文章标题 / 标题应在15-40字符以内 | 是 |
| short_title | string | 必填,长度8-20字符 | 短标题,用于适配某些标题最大长度不足20字平台 | 是 |
| long_title | string | 必填,长度 20-60 字符 | 请填写长文章标题 / 长标题应在20-60字符以内 | 是 |
| account_ids | array | 必填,账号池 pk 数组(每个 pk 为 36 位 UUID),表示一篇内容分发至多个账号 |
请选择要发布的平台 / 账号池参数有误(pk 长度须为 36) | 是 |
| keywords | string | 必填(多个英文半角逗号分隔),最大255字符 | 请填写关键词/关键词过长 | 是 |
| description | string | 可选,最大255字符 | 描述过长 | 否 |
| categories | string | 必填,逗号分隔的分类名称,至少 5 个(入库时自动去重) | 分类选项有误 / 最少选择五个类别,更好的匹配更多平台 | 是 |
| cover | string | 可选,建议为完整可访问 URL;留空时自定义平台会自动生成封面 | (当前接口未对 cover 做强制校验) | 否 |
| html | string | 仅图文类型(type=0)必填,HTML标签剥离后内容不为空 | 注意需要完整的URL,不能是相对或绝对路径 | type=0时必填 |
| video_url | string | 仅视频类型(type=1)必填,完整的URL格式 | 注意需要完整的URL,不能是相对或绝对路径 | type=1时必填 |
| audio_url | string | 仅音频类型(type=3)必填,完整的URL格式 | 注意需要完整的URL,不能是相对或绝对路径 | type=3时必填 |
| images | array | 仅图集类型(type=2)必填,数组格式,至少4项 | 注意需要完整的URL,不能是相对或绝对路径/最少4张图片 | type=2时必填 |
| images.*.url | string | 仅图集类型必填,有效的URL格式 | 注意需要完整的URL,不能是相对或绝对路径 | type=2时必填 |
| images.*.text | string | 仅图集类型必填,最大255字符 | 请填写图片描述/图片描述文本过长 | type=2时必填 |
categories 需提供至少 5 个分类名称(校验只看数量,入库时自动去重)。分类名称建议通过 /distribution/categories 获取,也可自行传入,但是否与第三方平台匹配由您判断。
html 仅在 type=0 时生效,会剥离 HTML 标签后检查纯文本是否为空(防止仅提交空白或标签)。
type=2)需提供至少 4 张图片,每张图片须含合法 URL 与描述文本。
html 内图片、video_url、audio_url、images.*.url、cover 都必须是完整、可公网访问的 URL(不能是相对路径 / 内网地址)。参数校验阶段不一定拦截,但发布阶段会实际下载,下载失败将导致发布失败。
content_pk),真正结果需轮询 发布状态查询。账号池 pk 非本人 / 不存在会返回「账号pk有误」,余额不足会返回「云梭发布余额不足,请充值后重试」。
{
"type": 0,
"title": "测试文章标题(6-60字符)",
"keywords": "测试,API,内容发布",
"description": "这是一篇测试文章的描述(可选,最多255字符)",
"categories": "科技,互联网,教育,科普,工具", // 至少5个分类名称,逗号分隔
"account_ids": ["d9153270-94a0-abcd-b645-00163e4c8b3c", "d9153270-94a1-abcd-b645-00163e4c8b3c"], // 账号池 pk(36 位 UUID)
"cover": "https://example.com/cover.jpg", // 封面图URL
"html": "<p>这是图文内容HTML</p><img src='https://example.com/img1.jpg'>" // 剥离标签后不为空
}
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"content_pk": "d9153270-94a0-abcd-b645-00163e4c8b3c" //用于查询发布结果
}
}
// 标题长度不符
{
"code": -1,
"msg": "标题应在15-40字符以内",
"time": 1620000000,
"data": {}
}
// 分类数量不足
{
"code": -1,
"msg": "最少选择五个类别,更好的匹配更多平台",
"time": 1620000000,
"data": {}
}
// 图文内容为空
{
"code": -1,
"msg": "图文内容不能为空",
"time": 1620000000,
"data": {}
}
获取内容分类列表,用于发布内容时选择分类。
POST /distribution/categories
需要包含身份签名相关头信息,详见身份签名部分。
此接口无需额外请求参数。
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"categories": [
{
"top": "体育",
"sub": [
"体育",
"体育趣闻",
"体育教学",
"网球",
"羽毛球",
"跑步",
]
},
{
"top": "文化",
"sub": [
"文化",
"文学",
"网络小说",
"宗教",
"农人",
"收藏鉴宝"
]
},
]
}
}
获取当前系统支持分发到的所有平台列表,新增账号池时 platform_key 必须取自本接口返回的值。
POST /platforms
需要包含身份签名相关头信息,详见身份签名部分。
此接口无需额外请求参数。
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"platforms": [
{
"platform_key": "baijiahao",
"platform_name": "百家号",
"refresh_intervals": 3600,
"is_custom": false
},
{
"platform_key": "toutiao",
"platform_name": "今日头条",
"refresh_intervals": 3600,
"is_custom": false
},
{
"platform_key": "custom",
"platform_name": "自定义平台",
"refresh_intervals": 0,
"is_custom": true,
"extra_rule": {
"notice_url": "回调通知地址,由调用方提供",
"signature_key": "用于校验回调签名的密钥,由调用方提供"
}
}
]
}
}
| 字段 | 说明 |
|---|---|
| platform_key | 平台唯一标识,新增账号池时作为 platform_key 参数传入,例如 baijiahao 对应百家号 |
| platform_name | 平台展示名称 |
| refresh_intervals | 平台账号刷新间隔(秒) |
| is_custom | 是否为自定义平台:false 为系统内置平台,true 为自定义平台 |
| extra_rule | 仅 is_custom=true 时返回,说明自定义平台需要的 notice_url 与 signature_key,详见新增账号池 |
| platform_key | 平台名称 | 刷新间隔(秒) | 类型 |
|---|---|---|---|
baijiahao |
百家号 | 7200 | 内置平台 |
dayuhao |
大鱼号 | 7200 | 内置平台 |
gongzhonghao |
微信公众号 | 600 | 内置平台 |
souhuhao |
搜狐号 | 3600 | 内置平台 |
tengxun |
腾讯内容开放平台 | 3600 | 内置平台 |
toutiaohao |
头条号 | 7200 | 内置平台 |
wangyihao |
网易号 | 43200 | 内置平台 |
xiaohongshu |
小红书 | 3600 | 内置平台 |
yidianzixun |
一点资讯 | 43200 | 内置平台 |
zhihu |
知乎 | 3600 | 内置平台 |
douyin |
抖音 | 3600 | 内置平台 |
weibo |
新浪微博 | 3600 | 内置平台 |
kuaishou |
快手 | 3600 | 内置平台 |
shipinhao |
视频号 | 3600 | 内置平台 |
custom |
自定义平台 | 0 | 自定义平台(反向推送) |
获取当前用户的账号池列表,包含账号的基本信息和状态。
POST /pools
POST /distribution/account_pools 已废弃(功能与本接口一致),请统一改用 POST /pools。
需要包含身份签名相关头信息,详见身份签名部分。
此接口无需额外请求参数。
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"pools": [
{
"pk": "ap123456",
"name": "我的微信公众号",
"platform_name": "微信公众号",
"login_status": "正常/登录失败/已失效,请更新",
"publish_status": "正常",
"is_nurturing": 0,
"last_used_time": "2025-09-16 04:16:48"
},
{
"pk": "ap789012",
"name": "头条号",
"platform_name": "今日头条",
"login_status": "正常",
"publish_status": "无法发布",
"is_nurturing": 1,
"last_used_time": "2025-09-16 04:16:48"
}
]
}
}
| 字段 | 说明 |
|---|---|
| pk | 账号池唯一标识,更新/删除时作为参数传入 |
| name | 账号的展示名称 |
| login_status | 账号登录状态(接口返回为文本): 正常: 账号状态正常可以发布信息 登录失败,N/5: 账号出现登录失败(N 为累计失败次数,1~4),稍后将重新尝试 已失效,请更新: 多次登录失败,需到控制台更新账号信息 |
| publish_status | 发布状态: 正常: 账号正常发布信息 无法发布: 包括不限于账号状态异常,今日发布数到达平台限额等情况 |
| is_nurturing | 该账号最近一次发布是否被平台风控拦截(整型):0 否:账号未被风控拦截,可正常自动发布1 是:最近一次发布时平台要求短信/二维码验证,需人工养号处理(可用本地插件的 /nurturing 接口打开平台并完成验证)
|
关于 is_nurturing 的两点补充:1) 归零时机:该账号下一次发布成功时自动归 0;仅调用插件 /nurturing 完成人工操作不会立即清零,要等该账号的自动重试任务跑成功(最长约 24h × 累计失败次数)。2) 它不是停用开关: is_nurturing=1 不会把账号从分发名单中剔除,被拦截的那条发布任务会转入自动重试(见发布状态查询的 status=4),期间该账号仍会被后续任务使用;若风控未解除会再次触发验证并延长重试间隔。
|
|
| last_used_time | 最后使用时间 |
在写入账号池(新增/更新)时,登录态数据(cookies / localStorage / sessionStorage)通常需要用户在浏览器里登录后手动抓取,较为繁琐。为此我们提供了一款 Windows 桌面插件「账号池服务」:客户先在本机运行插件,由插件拉起浏览器引导用户完成登录并自动抓取登录态,再将该数据直接提交到云梭发布的账号池接口即可完成写入。整体流程为:对接插件获取登录态 → 调用账号池接口提交数据。
插件当前提供两个本地接口:POST /open_browser(打开浏览器登录并回传登录态)与 POST /nurturing(养号手动发布,注入登录态并等待人工操作)。
| 项 | 值 |
|---|---|
| 接口地址(Base URL) | http://127.0.0.1:31210 |
| 传输协议 | HTTP/1.1 |
| 字符编码 | UTF-8 |
| 请求方式 | POST(另有 OPTIONS 预检,返回 204 No Content) |
| 服务超时 | ReadTimeout = 20 分钟(浏览器登录 / 养号耗时较长,客户端请自行设置足够长的超时时间) |
跨域请求仅允许已授权的来源调用。
所有接口统一返回,HTTP 状态码固定为 200,业务状态见 status:
{
"status": 200,
"message": "success",
"data": {}
}
| 字段 | 类型 | 说明 |
|---|---|---|
| status | int | 200 成功、400 参数错误、500 处理失败 |
| message | string | 结果描述 |
| data | object | 返回数据,部分接口才有 |
127.0.0.1:31210)。前端调用插件的 /open_browser 接口并传入平台标识,插件拉起 Chrome 跳转登录页;用户完成登录后,插件自动检测登录成功标志,抓取 cookies / localStorage / sessionStorage 并返回。data_json 字段提交(结构见下文,可直接透传,无需转换)。
调用插件时 platform 参数仅接受以下值(与云梭发布 platform_key 不完全一致,需注意映射关系):
| platform(传给插件) | 对应平台 | platform_key(传给云梭发布) |
|---|---|---|
| baijiahao | 百家号 | baijiahao |
| dayuhao | 大鱼号 | dayuhao |
| souhuhao | 搜狐号 | souhuhao |
| tengxun | 腾讯内容开放平台 | tengxun |
| toutiaohao | 今日头条 | toutiaohao |
| wangyihao | 网易号 | wangyihao |
| xiaohongshu | 小红书 | xiaohongshu |
| yidianzixun | 一点资讯 | yidianzixun |
| zhihu | 知乎 | zhihu |
| 微博 | ||
| douyin | 抖音 | douyin |
| kuaishou | 快手 | kuaishou |
| gongzhonghao | 微信公众号 | gongzhonghao |
| shipinhao | 微信视频号 | shipinhao |
POST http://127.0.0.1:31210/open_browser
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| platform | string | 平台标识,取自上表「platform(传给插件)」列 | 是 |
| status | 说明 |
|---|---|
| 200 | 成功,登录态在 data.result |
| 400 | 平台不支持 |
| 500 | 处理失败 |
| 字段 | 类型 | 说明 |
|---|---|---|
| cookies | Cookie[] | Cookie 列表,字段见下方「Cookie 字段说明」 |
| local_storage | string | localStorage 内容,Base64 编码 |
| session_storage | string | sessionStorage 内容,Base64 编码 |
Base64 编码规则:btoa(unescape(encodeURIComponent(JSON.stringify(obj))))
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 名称 |
| value | string | 值 |
| domain | string | 所属域 |
| path | string | 路径 |
| expires | number | 过期时间,Unix 秒;-1 表示未设置 |
| httpOnly | bool | 是否 HttpOnly |
| secure | bool | 是否 Secure |
| session | bool | 是否会话 Cookie |
| sameSite | string | Strict / Lax / None |
platform 将返回「当前平台不支持」。platform,无需 pk、data_json 等参数(登录态由插件现场抓取)。// 1. 唤起浏览器,引导用户登录并抓取登录态
const resp = await fetch('http://127.0.0.1:31210/open_browser', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ platform: 'souhuhao' })
});
const json = await resp.json();
// json: { status: 200, message: "success", data: { result: { cookies, local_storage, session_storage } } }
if (json.status !== 200) {
alert('获取登录态失败:' + json.message);
return;
}
const { cookies, local_storage, session_storage } = json.data.result;
// 2. 将登录态写入云梭发布账号池(data_json 结构见下方说明)
await fetch('https://www.yunsuofabu.com/v1/pools/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Signature': '你的签名(sha512)',
'Nonce': '随机字符串',
'User-Code': '你的用户编码'
},
body: JSON.stringify({
name: '搜狐号-插件自动获取',
platform_key: 'souhuhao',
data_json: {
cookies: cookies,
local_storage: local_storage,
session_storage: session_storage
}
})
});
{
"status": 200,
"message": "success",
"data": {
"result": {
"cookies": [
{
"name": "t",
"value": "1777300063984",
"domain": ".sohu.com",
"path": "/",
"expires": 1779892096,
"httpOnly": false,
"secure": false,
"session": false
}
],
"local_storage": "base64编码字符串",
"session_storage": "base64编码字符串"
}
}
}
cookies:数组,每个元素含 name/value/domain/path 等字段,可直接作为云梭发布 data_json.cookies 传入;local_storage / session_storage:已是浏览器 localStorage / sessionStorage 的 JSON 经 base64 编码后的字符串,与云梭发布 data_json.local_storage / session_storage 字段格式一致,无需二次处理。{
"cookies": [ { "name": "...", "value": "...", "domain": "...", "path": "/" } ],
"local_storage": "base64字符串(插件直接返回)",
"session_storage": "base64字符串(插件直接返回)"
}
该结构即为新增账号池中 data_json 字段的要求,插件的返回可直接透传,无需字段转换。
// 平台不支持
{
"status": 400,
"message": "当前平台不支持"
}
// 登录超时或抓取失败
{
"status": 500,
"message": "cookies 获取失败(...)"
}
127.0.0.1 监听,不会对外暴露,前端页面需与本机插件在同一台电脑上访问。platform 标识与云梭发布 platform_key 可能不一致,请以本页表格为准做映射。
POST http://127.0.0.1:31210/nurturing
Content-Type: application/json(也支持表单)
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| pk | string | 任务标识,UUID 格式 | 是 |
| platform | string | 平台标识,取自上表「platform(传给插件)」列 | 是 |
| data_json | object | 需要注入的登录态,结构同 /open_browser 返回的 data.result |
否 |
pk 须为 UUID 格式、platform 不能为空,否则返回 {"status":400,"message":"..."}。接口本身即「养号模式」,无需再传 is_nurturing(/open_browser 亦无需传,两者模式由接口固定)。
| status | 说明 |
|---|---|
| 200 | 成功,返回 {"status":200,"message":"浏览器已关闭"} |
| 400 | 参数校验失败 / 平台不支持 |
该接口需等待人工在浏览器中完成操作后才返回,属于长耗时请求(插件会保持浏览器约 19.5 分钟供人工操作,服务端 ReadTimeout = 20 分钟),客户端请设置足够长的超时时间。
{
"pk": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"platform": "zhihu",
"data_json": {
"cookies": [
{
"name": "sessionid",
"value": "abc123",
"domain": ".zhihu.com",
"path": "/",
"expires": 1760000000,
"httpOnly": true,
"secure": true,
"session": false,
"sameSite": "Lax"
}
],
"local_storage": "eyJrZXkiOiJ2YWx1ZSJ9",
"session_storage": "e30="
}
}
{
"status": 200,
"message": "浏览器已关闭"
}
/nurturing 即养号模式,/open_browser 即登录模式,调用方无需传递模式参数。data_json 可直接透传 /open_browser 抓取到的登录态,避免重复扫码登录。/open_browser 一致,传入未支持的平台返回 {"status":400,"message":"当前平台不支持"}。is_nurturing 标记。标记在该账号下一次自动重试发布成功时自动归 0(触发验证的任务按 24h × 累计失败次数退避重试,故最长可能等 24h×N 才会清零)。若需及时确认结果,可调账号池列表接口轮询 is_nurturing,或调发布状态查询看 status 是否已从 4 转为 1。本页所有插件接口都监听在 http://127.0.0.1:31210,由插件与浏览器在本机完成。除登录态抓取外,插件还自带一个本机无验证正向代理,用于保证「登录账号时的出口 IP」与「云梭发布调用该账号发布内容时的出口 IP」一致,避免平台因异地 / 异常 IP 判定而掉线或封号。以下两点对开发者对接与本地调试较为重要。
插件拉起浏览器时,会统一让浏览器连接本机代理 127.0.0.1:33128,具体走哪条链路由插件托盘菜单决定(默认为 P2P 模式),一般无需在代码里干预:
| 模式 | 链路 | 说明 |
|---|---|---|
| P2P 模式 | 浏览器 → 33128 → P2P直连(33129) → 内网代理 → 目标 | 依赖插件同目录 frpc.exe;打洞成功后流量直连内网代理,出口 IP 与发布端一致 |
| 中转模式 | 浏览器 → 33128 → 中转节点 → 目标 | 中转节点列表由服务端下发并每 5 分钟刷新,节点失效自动切换其它可用节点 |
| 无代理模式 | 浏览器直连 | P2P 与中转均不可用时自动回退,或用户手动取消勾选 |
frpc.exe 易被杀毒软件误拦,部署时需引导用户将其加入白名单,否则只能降级为中转模式。从旧版本起 Chrome/Edge 引入了 Private Network Access(PNA),并在较新版本(Chrome 约 138+,2025)升级为“本地网络访问检查(Local Network Access Checks)”:当公网 HTTPS 页面(如 https://www.yunsuofabu.com)向 127.0.0.1 / 局域网地址发起请求时,浏览器会先做预检,并可能直接拦截或弹出“是否允许访问本地网络 / 其他应用”的授权。这会导致前端调用插件接口失败,典型表现:
net::ERR_BLOCKED_BY_LOCAL_NETWORK_ACCESS_CHECKS
// 或表现为 CORS 报错、请求无响应 / 一直 pending
我们已在插件侧尽量做好兼容:对 OPTIONS 预检返回 Access-Control-Allow-Private-Network: true、Access-Control-Allow-Credentials: true,并按服务端下发的来源白名单返回 Access-Control-Allow-Origin。但浏览器最终的本地网络访问授权仍由用户的 Chrome 决定,无法完全绕过。
生产环境建议:
chrome://settings/content/localNetworkAccess(站点设置 → 本地网络访问)为本站手动放行。chrome://flags/#local-network-access-check,将其设置为 Disabled,重启浏览器后再联调插件接口;
如仍被拦截,可一并关闭 chrome://flags/#block-insecure-private-network-requests。
该开关仅用于开发测试,不能要求终端用户修改浏览器 flag 上线使用。
新增一个账号到当前用户的账号池,保存登录状态数据(cookies / localStorage / sessionStorage)。
POST /pools/create
需要包含身份签名相关头信息,详见身份签名部分。
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| name | string | 账号池名称(展示用) | 是 |
| platform_key | string | 所属平台标识,须取自获取支持平台返回的 platform_key |
是 |
| data_json | object/string | 登录状态数据(cookies / localStorage / sessionStorage),自定义平台(custom)无需此参数。结构见下方说明 | 非自定义平台必填 |
| extra_json | object/string | 仅自定义平台(custom)必填,结构:{"notice_url":"合法URL","signature_key":"字符串"} |
自定义平台必填 |
{
"cookies": [
{
"name": "t",
"value": "1777300063984",
"domain": ".sohu.com",
"path": "/",
"expires": 1779892096,
"httpOnly": false,
"secure": false,
"session": false
}
],
"local_storage": "base64编码字符串",
"session_storage": "base64编码字符串"
}
cookies、local_storage、session_storage 三个字段都必须存在(缺任一即报「data_json 缺少必填字段 xxx」);cookies:数组,可为空数组 [];一旦有元素,每个元素须含 name/value/domain/path;local_storage / session_storage:须为可解码的 base64 字符串;即使该平台无对应存储,也要传合法 base64(如空对象 {} 编码为 e30=),不能传空串或省略;data_json 支持直接传 JSON 字符串或对象;插件 /open_browser 的返回可直接透传(已含上述三字段)。自定义平台(custom)无需 data_json。{
"name": "搜狐号-测试",
"platform_key": "souhuhao",
"data_json": {
"cookies": [{"name":"t","value":"1777300063984","domain":".sohu.com","path":"/"}],
"local_storage": "eyJrZXkiOiJ2YWx1ZSJ9",
"session_storage": "eyJrZXkiOiJ2YWx1ZSJ9"
}
}
{
"name": "我的自定义站点",
"platform_key": "custom",
"extra_json": {
"notice_url": "https://www.example.com/api/notice/",
"signature_key": "YunSuoFaBu@2025"
}
}
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"pk": "ap123456" // 新账号池唯一标识
}
}
// 必填参数缺失
{
"code": -1,
"msg": "name不能为空",
"time": 1620000000,
"data": {}
}
// platform_key 无效或平台已禁用
{
"code": -1,
"msg": "platform_key无效或平台已禁用",
"time": 1620000000,
"data": {}
}
// data_json 结构不合法
{
"code": -1,
"msg": "data_json.cookies[0] 缺少必要字段 name/value/domain/path",
"time": 1620000000,
"data": {}
}
// local_storage / session_storage 不是合法 base64(或字段缺失)
{
"code": -1,
"msg": "data_json.local_storage 不是合法的 base64 字符串",
"time": 1620000000,
"data": {}
}
// 自定义平台缺少 extra_json
{
"code": -1,
"msg": "自定义平台必须提供 extra_json",
"time": 1620000000,
"data": {}
}
根据 pk 更新当前用户名下账号池的名称、登录状态数据或自定义平台配置。
POST /pools/update
需要包含身份签名相关头信息,详见身份签名部分。
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| pk | string | 账号池唯一标识,由账号池列表或新增接口返回 | 是 |
| name | string | 新的账号池名称(展示用) | 否 |
| data_json | object/string | 新的登录状态数据,结构同新增账号池。仅非自定义平台可更新;更新后 login_status 重置为 0(视为可再次尝试登录) |
否 |
| extra_json | object/string | 新的自定义平台配置,结构同新增。仅自定义平台可更新 | 否 |
pk 返回「账号不存在」。data_json,系统即认为登录态已刷新,login_status 重置为 0。publish_status(每日由系统重置)。{
"pk": "ap123456",
"name": "搜狐号-已更新",
"data_json": {
"cookies": [{"name":"t","value":"1777300063984","domain":".sohu.com","path":"/"}]
}
}
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"pk": "ap123456"
}
}
// pk 为空
{
"code": -1,
"msg": "pk不能为空",
"time": 1620000000,
"data": {}
}
// 账号不存在或不属于当前用户
{
"code": -1,
"msg": "账号不存在",
"time": 1620000000,
"data": {}
}
// 自定义平台尝试更新 data_json
{
"code": -1,
"msg": "自定义平台不可更新 data_json",
"time": 1620000000,
"data": {}
}
根据 pk 删除(软删除)当前用户名下指定的账号池。
POST /pools/delete
需要包含身份签名相关头信息,详见身份签名部分。
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| pk | string | 账号池唯一标识 | 是 |
{
"pk": "ap123456"
}
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"pk": "ap123456"
}
}
// pk 为空
{
"code": -1,
"msg": "pk不能为空",
"time": 1620000000,
"data": {}
}
// 账号不存在或不属于当前用户
{
"code": -1,
"msg": "账号不存在",
"time": 1620000000,
"data": {}
}
根据内容唯一标识 content_pk 查询该内容在各账号上的发布结果明细。
POST /distribution/status
需要包含身份签名相关头信息,详见身份签名部分。
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| content_pk | string | 内容唯一标识,由/distribution/push接口返回的 content_pk 字段提供 |
是 |
content_pk 将返回「内容不存在」。
data 为发布记录数组,每条记录关联一个账号池(accountPool)。
{
"content_pk": "d9153270-94a0-abcd-b645-00163e123456"
}
{
"code": 1,
"msg": "",
"time": 1620000000,
"data": [
{
"status": 1,
"remark": "OK",
"next_retry_time": "",
"failed_count": 0,
"created_type": "api",
"accountPool": {
"pk": "ap123456-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "我的微信公众号",
"platform_name": "微信公众号",
"login_status": "正常",
"publish_status": "正常",
"is_nurturing": 0,
"last_used_time": "2025-09-16 04:16:48"
}
},
{
"status": 2,
"remark": "今日头条发布出现异常",
"next_retry_time": "2025-09-16 04:31:48",
"failed_count": 3,
"created_type": "api",
"accountPool": {
"pk": "ap789012-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "头条号",
"platform_name": "今日头条",
"login_status": "登录失败,3/5",
"publish_status": "无法发布",
"is_nurturing": 1,
"last_used_time": "2025-09-16 04:16:48"
}
}
]
}
| 字段 | 说明 |
|---|---|
| status | 发布状态(整型):0 待发布、1 发布成功、2 发布异常(将按指数退避自动重试)、3 平台不支持该内容类型、4 触发验证码需养号(自动重试);异常数据可能为 -1 |
| remark | 成功/失败的详细描述信息 |
| next_retry_time | 下次重试时间(格式化字符串);status=2/4 时有效,无需重试时为空 |
| failed_count | 累计失败次数(用于计算退避间隔) |
| created_type | 创建来源:api(接口发布)/ task(任务生成)/ user(控制台手动) |
| accountPool | 关联账号池对象,含 pk/name/platform_name/login_status/publish_status/is_nurturing/last_used_time,字段说明见账号池列表 |
// content_pk 为空
{
"code": -1,
"msg": "content_pk不能为空",
"time": 1620000000,
"data": {}
}
// 内容不存在或不属于当前用户
{
"code": -1,
"msg": "内容不存在",
"time": 1620000000,
"data": {}
}
使网站,小程序,自研系统等自定义平台接收云梭发布推送的内容。
POST /开发者配置的API
{
"type": "article",
"signature": "签名",
"nonce": "随机字符串",
"data": "结构化数据,详情见下文"
}
| 参数 | 类型 | 说明 |
|---|---|---|
| Content-Type | string | application/json; encoding=utf-8 |
| 参数 | 类型 | 说明 | 必填 |
|---|---|---|---|
| type | string | 内容类型字符串:article(图文) / video(视频) / images(图集) / audio(音频) |
是 |
| signature | string | SHA512签名,用于验证请求合法性 | 是 |
| nonce | string | 随机数,参与签名计算 | 是 |
| data | object | 具体内容数据,结构因类型而异 | 是 |
signature = hex(sha512(SIGNATURE_KEY + "&data_type=" + type + "&nonce=" + nonce))
其中 SIGNATURE_KEY 即新增账号池时 extra_json.signature_key 配置的密钥,type 为上文的字符串类型(article/video/images/audio),nonce 为本次回调随机串;结果为该串 SHA-512 摘要的十六进制小写字符串。
{
"title": "文章标题",
"keywords": "关键词",
"description": "描述",
"html": "HTML内容",
"cover": "封面图URL",
"categories": ["分类1", "分类2"]
}
{
"title": "视频标题",
"keywords": "关键词",
"description": "描述",
"video_url": "视频文件URL",
"cover": "封面图URL",
"categories": ["分类1", "分类2"]
}
{
"title": "图集标题",
"keywords": "关键词",
"description": "描述",
"images": [
{"url": "图片1URL", "text": "图片描述"},
{"url": "图片2URL", "text": "图片描述"}
],
"cover": "封面图URL",
"categories": ["分类1", "分类2"]
}
{
"title": "音频标题",
"keywords": "关键词",
"description": "描述",
"audio_url": "音频文件URL",
"cover": "封面图URL",
"categories": ["分类1", "分类2"]
}
接收方只需返回 HTTP 200 即视为推送成功;非 200 视为失败。响应体内容不参与判定(下方示例仅为参考,系统不解析其 code 字段)。
HTTP/1.1 200 OK
Content-Type: application/json
{
"code": 0,
"message": "接收成功"
}
推送失败(含返回非 200、网络异常)后,系统会按指数退避自动重试(下次重试时间随失败次数递增),并非固定次数;若账号被判定失效或触发风控,则会停止该账号的发布并通知更新。此外 notice_url 或 signature_key 缺失会直接导致该次发布失败。