云梭发布以开放 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 | 必填,长度21-40字符 | 请填写文章标题/标题过长/标题过短 | 是 |
| short_title | string | 必填,长度8-20字符 | 短标题,用于适配某些标题最大长度不足20字平台 | 是 |
| long_title | string | 必填,长度41-60字符 | 长标题,用于适配某些标题最大长度60字以上平台 | 是 |
| account_ids | array | 必填,数组格式,元素为36位字符串 | 请选择要发布的平台/账号池参数有误 | 是 |
| keywords | string | 必填(多个英文半角逗号分隔),最大255字符 | 请填写关键词/关键词过长 | 是 |
| description | string | 可选,最大255字符 | 描述过长 | 否 |
| categories | string | 必填,逗号分隔的分类名称,至少5个且去重 | 分类选项有误/最少选择五个类别 | 是 |
| cover | string | 必填,有效的完整URL格式 | 封面图URL格式错误 | 是 |
| 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": 0,
"title": "测试文章标题(6-60字符)",
"keywords": "测试,API,内容发布",
"description": "这是一篇测试文章的描述(可选,最多255字符)",
"categories": "科技,互联网,教育,科普,工具", // 至少5个分类ID,逗号分隔
"account_ids": ["d9153270-94a0-abcd-b645-00163e4c8b3c", "d9153270-94a1-abcd-b645-00163e4c8b3c"], // 账号uuid
"cover": "https://example.com/cover.jpg", // 封面图URL
"html": "<p>这是图文内容HTML</p><img src='https://example.com/img1.jpg'>" // 剥离标签后不为空
}
{
"code": 1,
"msg": "success",
"time": 1620000000,
"data": {
"content_pk": "d9153270-94a0-abcd-b645-00163e4c8b3c" //用于查询发布结果
}
}
// 标题过短
{
"code": -1,
"msg": "标题过短,请增加标题长度",
"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,详见新增账号池 |
获取当前用户的账号池列表,包含账号的基本信息和状态。
POST /pools
需要包含身份签名相关头信息,详见身份签名部分。
此接口无需额外请求参数。
{
"code": 1,
"msg": "ok",
"time": 1620000000,
"data": {
"pools": [
{
"pk": "ap123456",
"name": "我的微信公众号",
"platform_name": "微信公众号",
"login_status": "正常/登录失败/已失效,请更新",
"publish_status": "正常",
"last_used_time": "2025-09-16 04:16:48"
},
{
"pk": "ap789012",
"name": "头条号",
"platform_name": "今日头条",
"login_status": "正常",
"publish_status": "无法发布",
"last_used_time": "2025-09-16 04:16:48"
}
]
}
}
| 字段 | 说明 |
|---|---|
| pk | 账号池唯一标识,更新/删除时作为参数传入 |
| name | 账号的展示名称 |
| login_status | 账号登录状态: 正常: 账号状态正常可以发布信息 登录失败: 账号出现登录失败,但稍后将重新尝试 已失效,请更新: 多次出现登录失败,需要访问控制台更新账号信息 |
| publish_status | 发布状态: 正常: 账号正常发布信息 无法发布: 包括不限于账号状态异常,今日发布数到达平台限额等情况 |
| last_used_time | 最后使用时间 |
新增一个账号到当前用户的账号池,保存登录状态数据(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:可选,数组,每个元素须包含 name/value/domain/path 字段;local_storage / session_storage:可选,为浏览器 localStorage / sessionStorage 的 JSON 经过 base64 编码后的字符串;data_json 支持直接传 JSON 字符串或对象,系统会做结构合法性校验。{
"name": "搜狐号-测试",
"platform_key": "sohu",
"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": {}
}
// 自定义平台缺少 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": "success",
"time": 1620000000,
"data": [
{
"pk": "cp123456-xxxxxx-xxxxxxx",
"status": 1,
"platform_name": "微信公众号",
"publish_time": "2025-09-16 04:20:11",
"remark": "OK",
"accountPool": {
"pk": "ap123456",
"name": "我的微信公众号",
"platform_name": "微信公众号",
"login_status": "正常",
"publish_status": "正常"
}
},
{
"pk": "cp789012-xxxxxx-xxxxxxx",
"status": 0,
"platform_name": "今日头条",
"publish_time": "",
"remark": "发布失败,请稍后重试",
"accountPool": {
"pk": "ap789012",
"name": "头条号",
"platform_name": "今日头条",
"login_status": "正常",
"publish_status": "无法发布"
}
}
]
}
| 字段 | 说明 |
|---|---|
| pk | 发布记录唯一标识 |
| status | 发布状态:0(待发布),1(成功),2(失败),3(平台不支持) 具体以实际枚举为准 |
| platform_name | 目标发布平台名称 |
| publish_time | 发布完成时间,未发布成功时为空 |
| failed_count | 重试次数 |
| remark | 成功/失败详细描述信息 |
| accountPool | 关联账号池信息,字段说明见账号池列表 |
// 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 | 内容类型: 0(图文), 1(视频), 2(图集), 3(音频) | 是 |
| signature | string | SHA512签名,用于验证请求合法性 | 是 |
| nonce | string | 随机数,参与签名计算 | 是 |
| data | object | 具体内容数据,结构因类型而异 | 是 |
signature = sha512(POOL_KEY + "&data_type=" + type + "&nonce=" + nonce)
其中POOL_KEY为账号池自定义平台下配置的签名密钥
{
"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状态码将被视为推送失败。
HTTP/1.1 200 OK
Content-Type: application/json
{
"code": 0,
"message": "接收成功"
}
如果推送失败,系统会自动重试,最多重试3次。