云梭发布 API 文档

云梭发布以开放 API 为核心,提供完整的内容分发能力,让开发者将一键发布、账号托管与自定义平台反向推送直接集成进自己的业务系统。

API介绍

云梭发布API基于REST架构设计,使用JSON作为数据交换格式。

基础URL
https://www.yunsuofabu.com/v1
响应格式

所有API响应都遵循统一的JSON格式:

{
    "code": 状态,
    "msg": 消息,
    "time": 时间戳,
    "data": 数据详情
}

身份签名

访问云梭发布API需要在请求中包含有效签名。

配置API_KEY

登录云梭发布控制台,在「个人信息-开发配置」中生成API_KEY。

使用签名

根据规则hex(sha512(API_KEY + 随机字符串 + USER_CODE))生成签名,将以下签名包含在http请求得header中:


Signature: 你的签名(sha512的十六进制字符串)
Nonce: 生成的随机字符串
User-Code: 在开发配置页面中获取

重要提示:
请妥善保管您的API_KEY,不要在前端代码或公开存储库中暴露它。
自定义平台(反向推送)使用其他方式验证身份,请参考具体接口文档。

错误代码

API使用标准HTTP状态码表示请求结果:

状态码 含义 说明
1 或其他大于0状态码 成功 请求成功完成
-1 或其他小于0状态码 错误请求 请求错误或服务错误

内容发布

主动发布内容到自己已配置账号池中的自媒体账号。

POST发布内容
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获取分类列表
POST /distribution/categories
请求头

需要包含身份签名相关头信息,详见身份签名部分。

请求参数

此接口无需额外请求参数。

关于分类匹配规则:
我们对支持的平台分类进行了整理和归纳,每个平台分类各不相同,但是发布时又是必选项,针对这种情况做出以下规则:
1 由用户提供几个分类供我们优先顺序匹配选择
2 如果因平台无此分类无法匹配成功,则根据不同平台做出不同决策,包括不限于:使用第三方平台智能推荐分类、使用其他分类、使用互联网分类、使用任意分类等。
响应示例
{
    "code": 1,
    "msg": "ok",
    "time": 1620000000,
    "data": {
        "categories": [
            {
                "top": "体育",
                "sub": [
                    "体育",
                    "体育趣闻",
                    "体育教学",
                    "网球",
                    "羽毛球",
                    "跑步",
                ]
            },
            {
                "top": "文化",
                "sub": [
                    "文化",
                    "文学",
                    "网络小说",
                    "宗教",
                    "农人",
                    "收藏鉴宝"
                ]
            },
        ]
    }
}

获取支持平台

获取当前系统支持分发到的所有平台列表,新增账号池时 platform_key 必须取自本接口返回的值。

POST获取支持平台列表
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获取账号池列表
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 返回数据,部分接口才有
对接流程总览:
第一步(对接插件):插件以系统托盘(Tray)常驻运行,启动后自动开启本地 HTTP 服务(默认监听 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
weibo微博weibo
douyin抖音douyin
kuaishou快手kuaishou
gongzhonghao微信公众号gongzhonghao
shipinhao微信视频号shipinhao
POST 唤起浏览器并抓取登录态(插件本地接口)
POST http://127.0.0.1:31210/open_browser
请求参数
参数 类型 说明 必填
platform string 平台标识,取自上表「platform(传给插件)」列 是
返回值
status 说明
200 成功,登录态在 data.result
400 平台不支持
500 处理失败
data.result 字段说明
字段 类型 说明
cookies Cookie[] Cookie 列表,字段见下方「Cookie 字段说明」
local_storage string localStorage 内容,Base64 编码
session_storage string sessionStorage 内容,Base64 编码

Base64 编码规则:btoa(unescape(encodeURIComponent(JSON.stringify(obj))))

Cookie 字段说明
字段 类型 说明
namestring名称
valuestring值
domainstring所属域
pathstring路径
expiresnumber过期时间,Unix 秒;-1 表示未设置
httpOnlybool是否 HttpOnly
securebool是否 Secure
sessionbool是否会话 Cookie
sameSitestringStrict / Lax / None
更多逻辑说明
  • 前置条件:插件需已在客户本机运行(系统托盘可见「账号池服务」图标),否则请求会连接失败。
  • 登录等待:接口会一直阻塞直到用户完成登录(插件检测到登录成功标志)或超时(最长约 20 分钟),请勿设置过短的 HTTP 超时。
  • 跨域:插件支持 CORS 预检(OPTIONS 返回 204 No Content),但跨域请求仅允许已授权的来源调用。
  • 只支持已配置平台:传入上表以外的 platform 将返回「当前平台不支持」。
  • 参数极简:仅需 platform,无需 pk、data_json 等参数(登录态由插件现场抓取)。
前端调用示例(JavaScript / Fetch)
// 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 字段格式一致,无需二次处理。
写入云梭发布账号池时 data_json 结构
{
    "cookies": [ { "name": "...", "value": "...", "domain": "...", "path": "/" } ],
    "local_storage": "base64字符串(插件直接返回)",
    "session_storage": "base64字符串(插件直接返回)"
}

该结构即为新增账号池中 data_json 字段的要求,插件的返回可直接透传,无需字段转换。

插件返回错误示例
// 平台不支持
{
    "status": 400,
    "message": "当前平台不支持"
}

// 登录超时或抓取失败
{
    "status": 500,
    "message": "cookies 获取失败(...)"
}
重要提示:
1. 插件仅在客户本机 127.0.0.1 监听,不会对外暴露,前端页面需与本机插件在同一台电脑上访问。
2. 调用云梭发布写入接口时仍需携带有效的身份签名(详见身份签名),请勿在前端暴露 API_KEY,建议由你的后端服务中转签名。
3. 不同平台的 platform 标识与云梭发布 platform_key 可能不一致,请以本页表格为准做映射。
POST 养号手动发布(插件本地接口)
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": "浏览器已关闭"
}
更多逻辑说明
  • 手动操作:插件注入登录态并打开对应平台页面,由人工完成发布等操作,浏览器关闭后接口才返回,请勿设置过短的 HTTP 超时。
  • 模式固定:/nurturing 即养号模式,/open_browser 即登录模式,调用方无需传递模式参数。
  • 登录态可复用:data_json 可直接透传 /open_browser 抓取到的登录态,避免重复扫码登录。
  • 平台校验:与 /open_browser 一致,传入未支持的平台返回 {"status":400,"message":"当前平台不支持"}。
  • 养号标记不会立即清零:本接口只负责拉起浏览器供人工完成验证/发布,不会直接修改账号池的 is_nurturing 标记。标记在该账号下一次自动重试发布成功时自动归 0(触发验证的任务按 24h × 累计失败次数退避重试,故最长可能等 24h×N 才会清零)。若需及时确认结果,可调账号池列表接口轮询 is_nurturing,或调发布状态查询看 status 是否已从 4 转为 1。

出网代理(P2P / 中转模式)与 Chrome 本地网络访问限制

本页所有插件接口都监听在 http://127.0.0.1:31210,由插件与浏览器在本机完成。除登录态抓取外,插件还自带一个本机无验证正向代理,用于保证「登录账号时的出口 IP」与「云梭发布调用该账号发布内容时的出口 IP」一致,避免平台因异地 / 异常 IP 判定而掉线或封号。以下两点对开发者对接与本地调试较为重要。

一、出网代理:P2P 直连 / 中转模式

插件拉起浏览器时,会统一让浏览器连接本机代理 127.0.0.1:33128,具体走哪条链路由插件托盘菜单决定(默认为 P2P 模式),一般无需在代码里干预:

模式 链路 说明
P2P 模式 浏览器 → 33128 → P2P直连(33129) → 内网代理 → 目标 依赖插件同目录 frpc.exe;打洞成功后流量直连内网代理,出口 IP 与发布端一致
中转模式 浏览器 → 33128 → 中转节点 → 目标 中转节点列表由服务端下发并每 5 分钟刷新,节点失效自动切换其它可用节点
无代理模式 浏览器直连 P2P 与中转均不可用时自动回退,或用户手动取消勾选
  • 自动降级 / 恢复:P2P 不通→中转;中转也不可用→无代理;任一链路恢复后自动切回用户最后选择的模式。
  • 端口仅监听回环:本机端口 31210 / 33128 / 33129 均只监听 127.0.0.1,不对局域网或公网开放;若首选端口被占用,33128 / 33129 会自动改用随机端口,对外接口 31210 保持不变。
  • 杀软误拦:P2P 组件 frpc.exe 易被杀毒软件误拦,部署时需引导用户将其加入白名单,否则只能降级为中转模式。
二、Chrome 对访问 127.0.0.1 的限制(重要)

从旧版本起 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(站点设置 → 本地网络访问)为本站手动放行。
  • 保持网页端为 HTTPS 访问,并将调用方域名加入插件的来源白名单(非白名单来源会被插件拒绝)。
临时开发 / 本地联调:调试阶段可关闭 Chrome 的该检查以免除授权拦截——打开 chrome://flags/#local-network-access-check,将其设置为 Disabled,重启浏览器后再联调插件接口; 如仍被拦截,可一并关闭 chrome://flags/#block-insecure-private-network-requests。 该开关仅用于开发测试,不能要求终端用户修改浏览器 flag 上线使用。

新增账号池

新增一个账号到当前用户的账号池,保存登录状态数据(cookies / localStorage / sessionStorage)。

POST新增账号池
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":"字符串"} 自定义平台必填
data_json 结构说明
{
    "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更新账号池
POST /pools/update
请求头

需要包含身份签名相关头信息,详见身份签名部分。

请求参数
参数 类型 说明 必填
pk string 账号池唯一标识,由账号池列表或新增接口返回 是
name string 新的账号池名称(展示用) 否
data_json object/string 新的登录状态数据,结构同新增账号池。仅非自定义平台可更新;更新后 login_status 重置为 0(视为可再次尝试登录) 否
extra_json object/string 新的自定义平台配置,结构同新增。仅自定义平台可更新 否
更多逻辑说明
  • 权限校验:仅可更新当前用户本人名下的账号池,传入不存在的 pk 返回「账号不存在」。
  • login_status 重置:只要传入了 data_json,系统即认为登录态已刷新,login_status 重置为 0。
  • publish_status 不变:本接口不会修改 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删除账号池
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查询发布状态
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 开发者在账号池中配置接收推送的HTTP地址
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 摘要的十六进制小写字符串。

安全提示:
务必验证签名确保信息来自云梭发布官方,防止被他人仿冒推送垃圾信息!
data数据结构
图文类型 (article)
{
  "title": "文章标题",
  "keywords": "关键词",
  "description": "描述",
  "html": "HTML内容",
  "cover": "封面图URL",
  "categories": ["分类1", "分类2"]
}
视频类型 (video)
{
  "title": "视频标题",
  "keywords": "关键词",
  "description": "描述",
  "video_url": "视频文件URL",
  "cover": "封面图URL",
  "categories": ["分类1", "分类2"]
}
图集类型 (images)
{
  "title": "图集标题",
  "keywords": "关键词",
  "description": "描述",
  "images": [
    {"url": "图片1URL", "text": "图片描述"},
    {"url": "图片2URL", "text": "图片描述"}
  ],
  "cover": "封面图URL",
  "categories": ["分类1", "分类2"]
}
音频类型 (audio)
{
  "title": "音频标题",
  "keywords": "关键词",
  "description": "描述",
  "audio_url": "音频文件URL",
  "cover": "封面图URL",
  "categories": ["分类1", "分类2"]
}
响应要求

接收方只需返回 HTTP 200 即视为推送成功;非 200 视为失败。响应体内容不参与判定(下方示例仅为参考,系统不解析其 code 字段)。

注意:请将视频、封面,文章插图保存至你的本地,不要直接引用云梭发布的URL,超过三天的资源会逐步清理。
响应示例
HTTP/1.1 200 OK
Content-Type: application/json

{
  "code": 0,
  "message": "接收成功"
}
错误处理

推送失败(含返回非 200、网络异常)后,系统会按指数退避自动重试(下次重试时间随失败次数递增),并非固定次数;若账号被判定失效或触发风控,则会停止该账号的发布并通知更新。此外 notice_url 或 signature_key 缺失会直接导致该次发布失败。

技术支持

如果您在使用API过程中遇到问题,可以通过以下方式获取帮助:

  • 帮助:查看详细的控制台使用指南
  • 工单:通过控制台提交技术支持工单
  • 公众号:
  • QQ群: