跳到主要内容
开发者门户 · 开放 API v1

把内容 Agent 接进你的系统

妙音是中国内容 Agent 基础设施:一组 REST 接口 + 一个托管 MCP Server。查询你的选题、稿件与效果数据,提交内容需求指令,或一次调用把内容生成/适配并发布到多个国内渠道。 数据严格按账号隔离,写操作计费规则全部公开。

机器可读入口:openapi.json(OpenAPI 3.1 规范)· llms.txt(给 LLM 看的能力索引)

快速开始

1

生成 API Key

登录控制台 → 左下角账户菜单 →「OpenAPI」→「开通并生成 API Key」。完整 Key 只显示这一次,请立即复制保存;丢失可在同一页面重置(旧 Key 立即失效)。发布接口要求账号处于可用状态(试用期内或认证未过期),否则返回 403。

2

发起第一次发布

一次调用完成「生成/适配 → 审核质检 → 多渠道入队」。最简形式:只给一个主题,由平台 AI 生成并发布:

curl -X POST https://sarasvati.cn/api/v1/publish \
  -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"brandId":3,"channels":["zhihu","toutiao"],"generate":true,"topic":"智慧公路的三个常见误区"}'

已有成稿就传 title + content 走自带内容模式,详见下方 POST /publish。每日前 20 个渠道发布免费。顺手验证 Key:GET /api/v1/me 返回账号概要与余额即接入成功。

3

轮询发布状态

用返回的 manuscriptId 查各平台进度,publishStatus 变为 published 且回采到 publishedUrl 即发布完成:

curl -H "Authorization: Bearer svt_你的Key" \
  https://sarasvati.cn/api/v1/manuscripts/128

AI Agent 接入

妙音的接口为 AI Agent 设计:首选托管 MCP Server(tools 化接入,无需手写 HTTP,见下一节);REST 侧一份 openapi.json 就是完整的机器可读契约,llms.txt 是给 LLM 的能力索引。REST 接法:

Claude Code / Cursor / Codex

让 Agent 先读规范再动手——直接把下面这句丢给它:

读取 https://sarasvati.cn/openapi.json 了解妙音 OpenAPI,
然后用我的 API Key(Authorization: Bearer svt_xxx)
调用接口完成:<你的任务>

Agent 会自行理解端点、参数与响应结构。写操作(提交指令)创建后为「待确认」,你在控制台确认后才计费执行。

扣子(Coze)

扣子支持基于第三方 API 创建插件:插件市场 → 创建插件 → 基于已有服务创建 → 填入 Base URL https://sarasvati.cn/api/v1 与 openapi.json 地址,鉴权方式选 Authorization Header(Bearer),把你的 Key 配进插件。之后在任何扣子 Bot / 工作流里直接引用。

n8n / 自托管工作流

用 HTTP Request 节点:Method 选 GET/POST,URL 填对应端点,Header 加 Authorization: Bearer svt_xxx。配合 Schedule Trigger 可做每日数据看板、热点触发提需求等自动化。

脚本 / 自建系统

任意语言直接调 REST:curl -H "Authorization: Bearer svt_xxx" https://sarasvati.cn/api/v1/me。Python / Node 可用 requests / fetch,分页遍历用 page + limit(单页最大 100)。

托管 MCP Server(推荐)

妙音托管了一个 MCP(Model Context Protocol)Server:第三方 AI Agent 以 tools 方式直接调用平台能力,无需手写 HTTP。 Endpoint:https://sarasvati.cn/mcp(POST,Streamable HTTP,无会话状态),认证与 OpenAPI 同一个 Key:Authorization: Bearer svt_xxx。 该 MCP Server 已上架魔搭 ModelScope、扣子(Coze)、百度千帆的 MCP 市场——在对应平台搜索「妙音」即可一键安装;手动配置方式如下。

Claude Code

一行命令挂进去(把 svt_xxx 换成你的 Key):

claude mcp add --transport http sarasvati \
  https://sarasvati.cn/mcp \
  -H "Authorization: Bearer svt_xxx"

Cursor

在 ~/.cursor/mcp.json(或项目内 .cursor/mcp.json)加一段:

{
  "mcpServers": {
    "sarasvati": {
      "url": "https://sarasvati.cn/mcp",
      "headers": {
        "Authorization": "Bearer svt_xxx"
      }
    }
  }
}

扣子(Coze)

扣子支持接入 MCP 服务:创建自定义插件时选择 MCP 方式,填入地址 https://sarasvati.cn/mcp,鉴权 Header 配 Authorization: Bearer svt_xxx,之后在任何扣子 Bot / 工作流里直接引用工具。

工具清单(13 个)

只读工具(9):数据范围与 OpenAPI 一致,严格按 Key 所属账号隔离。

字段类型说明
get_account—账号概要:名称、认证档、认证到期、单元余额、账号状态
list_brands—品牌列表:id、name、enabled、行业/调性等摘要
list_topicsstatus? brandId? page? limit?选题清单(可按状态/品牌筛选、分页)
get_topicid选题详情(依据、评分、来源、产出稿件 ID)
list_manuscriptsstatus? brandId? page? limit?稿件列表(含各渠道发布状态)
get_manuscriptid稿件详情(含各渠道完整正文)
list_channels—渠道账号列表(平台、账号名、启用状态、最近错误;不含任何凭证)
get_publish_statusmanuscriptId?发布队列状态(不传稿件 ID 返回最近 20 条任务)
get_metricsdays? brandId? page? limit?效果回流:查看/点赞/回复/分享(多次回采记录即增长曲线)

写工具(4):

字段类型说明
submit_directiverawText brandId?提交内容需求指令:创建为「待确认」,控制台确认前不扣费不执行(试用账号也可用)
submit_task_packrawText brandId? platforms?端到端任务包:提交需求并返回完整工作流地图(提需求→确认→生产→手机审批→发布→回采),适合 Agent 一键跑闭环
preview_publishmanuscriptId platforms[]发布预检:逐平台校验可发性,全部通过签发 30 分钟有效的 confirmCode
confirm_publishmanuscriptId confirmCode确认发布:凭 confirmCode 把稿件入队发布(真正生效的一步)

端到端任务模板(submit_task_pack 示例)

对竞品「通用连接器」的差异:我们给的是完整内容 Agent 任务模板,而不是一个孤立的 publish 接口。 下面这段是 Claude / Cursor 里对挂好 MCP 的助手说的话,一条指令即可拿到整个闭环地图:

调用 sarasvati 的 submit_task_pack:
rawText = "给「妙音」品牌每周产出 1 篇面向中小企业主的内容 Agent 科普图文"
然后按返回的 workflow 逐步推进:
1. 我去控制台确认需求后,妙音 Agent 自动选题/生产/质检;
2. 提醒我手机审批;
3. 我通过后,对妙音频道和我的官网跑 preview_publish → confirm_publish;
4. 调 get_metrics 留下基线数据。

单元消耗只在内容生成/改写环节发生(按渠道计费的规则见上方「通用约定」);确认需求前不扣费不执行,全过程可追溯。

发布两步规则与风控

  • 先预览再确认:发布必须 preview_publish → confirm_publish 两步走;confirmCode 绑定账号、稿件与平台清单,30 分钟有效,过期需重新预览。
  • 仅限 API 直发渠道:公众号(wechat)、妙音频道(sarasvati)、我的官网(official_site)。小红书/知乎/头条等为模拟发布通道(cookie 托管),有风控风险,请登录控制台人工审批发布。
  • 认证档门槛:confirm_publish 要求账号已认证(基础版及以上且在有效期内);试用账号可用全部只读工具与 submit_directive。
  • 每日限额:同一账号 confirm_publish 每天最多成功 10 次。
  • 不产生额外扣费:发布本身不扣单元,扣费只发生在内容生成/改写/配图环节。
  • 与 REST 的分工:MCP 两步确认、每日限 10 次、仅限 3 个 API 直发渠道,适合 AI Agent 人机协作;系统间自动化建议直接用 POST /api/v1/publish——一次调用、按渠道计费(每日 20 次免费)、限流 30 次/分钟。
  • 错误处理:业务错误通过工具结果的 isError: true 返回中文说明;响应头 x-units-remaining 随时回传当前单元余额。
💡 快速自检:挂好后让 Agent「调用 sarasvati 的 get_account」,能返回你的账号概要即接入成功。

5 分钟跑通全链路(复制粘贴即可)

这几个数字都来自本页文档,可逐一验证:13 个 MCP 工具 · 一次 submit_directive 让妙音 Agent 后台完成选题/生产/质检 · 两步 preview_publish → confirm_publish 完成发布与多渠道适配 ·get_metrics 回采查看/点赞/回复/分享。把下面这段话原样发给挂好 MCP 的 Claude / Cursor,就能跑完「提需求 → 生产 → 发布 → 看数据」闭环:

1. 调用 sarasvati 的 get_account 确认接入成功,并告诉我单元余额和认证档。
2. 调用 list_brands 列出我的品牌,选第一个启用的品牌。
3. 提交一条内容需求指令(submit_directive):
   「结合我品牌的行业与调性,写一篇面向客户的科普图文,突出我们的专业能力」
4. 提示我:指令已进入控制台待确认,确认后妙音 Agent 会自动完成
   选题 → AI 生产 → 质检 → 生成多渠道适配稿件。
5. 稿件生成后:调用 list_manuscripts 找到最新稿件,跑 preview_publish
   预检 API 直发渠道,把预检结果和各平台适配情况汇报给我,等我确认。
6. 我确认后调用 confirm_publish 完成发布,再调 get_metrics 留下本次基线数据。

以上每一步都是真实的工具调用,没有任何演示模拟。第 4 步的生产由妙音 Agent 在平台内完成(约几分钟),你会在控制台和手机上收到审批提醒——人只拍板,Agent 干活。

通用约定

Base URL 与认证

字段类型说明
Base URL—https://sarasvati.cn/api/v1
认证方式请求头Authorization: Bearer svt_xxx(Key 为 svt_ + 48 位十六进制)
请求编码—POST body 为 JSON(Content-Type: application/json)
数据范围—严格按 Key 所属账号(租户)隔离,跨账号数据一律 404

响应格式

成功统一返回 &lbrace; "ok": true, "data": … &rbrace;;列表接口额外带分页字段;失败统一返回 &lbrace; "ok": false, "error": "错误说明" &rbrace; 并配对应 HTTP 状态码。

字段类型说明
okboolean请求是否成功
dataarray | object业务数据(列表接口为数组)
page / limitnumber列表接口:当前页码 / 每页条数
totalnumber列表接口:符合条件的总条数
hasNextboolean列表接口:是否还有下一页
errorstring失败时的中文错误说明

分页

列表接口统一支持 page(从 1 开始)与 limit(默认 20,最大 100)两个 query 参数。

错误码

字段类型说明
400参数错误请求参数不合法,error 里有具体说明(如 rawText 长度不符、brandId 不属于当前账号、渠道不合法)
401未认证API Key 缺失、格式不对、已吊销,或账号已停用
402单元不足发布计费时余额不足,响应带 rechargeUrl 引导充值(控制台「计费」页)
403账号不可用试用期已结束且未完成认证/续费,响应带 upgradeUrl 引导处理
404不存在资源不存在,或不属于当前账号(出于隔离考虑不区分这两种情况)
429请求过于频繁触发限流(发布接口同一 Key 30 次/分钟),error 里给出需等待的秒数

POST/api/v1/publish

发布即服务:一次调用完成「内容生成/平台适配 → 审核质检 → 多渠道入队发布」,支持图文(article,默认)与视频(video)两种内容形态。每日前 20 个渠道发布免费(图视共享额度),超出按图文 0.5 / 视频 1.5 单元/渠道计费(详见计费与额度)。支持 Idempotency-Key 幂等重试。

内容形态与模式

字段类型说明
图文 · 自带内容title + content(+ images?)已有成稿直接发:正文保持原文核心内容不变,仅按各平台格式与风格做适配
图文 · 代为生成generate: true + topic(+ requirement?)只给一个主题,由平台 AI 生产全文并发布
视频 · 自带内容contentType: "video" + videoUrl + title(+ content?)已有成片(mp4 直链)直接发:content 作为视频简介/文案,按各视频平台简介格式适配;可发好看视频、AcFun 等纯视频渠道
视频 · 代为生成contentType: "video" + generate: true + topic走图文成片管线(分镜脚本 → 配音合成):接口立即返回 manuscriptId,合成完成后自动发布,用 GET /manuscripts/{id} 轮询 video.status 与各渠道进度;合成失败发布费自动全额退还

请求体(JSON)

参数位置/类型必填说明
brandIdbody · number是品牌 ID;必须属于当前账号且品牌启用中
channelsbody · string[]是渠道 key 数组,1–20 个(自动去重);按内容形态收口:video 可发视频渠道(含纯视频渠道),不合法的渠道会在 400 里逐个报出并附当前可用清单
contentTypebody · string否article(图文,默认)/ video(视频)
videoUrlbody · string视频·自带内容必填成片 URL(http/https,mp4,≤200MB);与 generate 互斥
titlebody · string自带内容必填稿件标题,≤200 字;generate 模式可省略(由 AI 拟定)
contentbody · string图文自带内容必填Markdown 正文,≤50000 字;视频模式下选填,作为视频简介/文案
imagesbody · string[]否配图 URL 数组(http/https),≤9 张;仅图文模式
generatebody · boolean代为生成必填传 true 进入代为生成模式
topicbody · string代为生成必填主题/素材描述,≤2000 字
requirementbody · string否附加要求,≤1000 字(调性、字数、必须提到的点等)
Idempotency-Keyheader · string否幂等键(≤128 字符):同一账号同一 Key 重试不会重复产稿/扣费/入队,直接返回首次的响应(带 idempotentReplay: true);处理中重复提交返回 409

响应字段

字段类型说明
manuscriptIdnumber生成的稿件 ID,用它调 GET /manuscripts/{id} 跟踪进度
taskIdsnumber[]本次创建的发布任务 ID 列表
perPlatformobject逐渠道结果:成功 { taskId, status: "queued" };失败 { status: "failed", error }
chargedUnitsnumber本次实扣单元(失败渠道的费用已自动退还)
freeQuotaUsednumber本次用掉的免费渠道发布数
freeQuotaRemainingnumber今日剩余免费额度
unitsRemainingnumber当前单元余额
statusstringqueued(已入队)/ pending_review(内容安全防线降级,转人工审批,本次不计费)
notestring视频·代为生成时返回:提示合成为异步,轮询 GET /manuscripts/{id} 跟踪
idempotentReplayboolean仅幂等重放时出现:true = 本次是 Idempotency-Key 命中返回的首次响应副本,未重复执行

示例 · 自带内容

curl -X POST https://sarasvati.cn/api/v1/publish \
  -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"brandId":3,"channels":["zhihu","toutiao","wechat"],"title":"智慧公路的三个常见误区","content":"## 误区一……","images":["https://example.com/cover.png"]}'

示例 · 代为生成

curl -X POST https://sarasvati.cn/api/v1/publish \
  -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"brandId":3,"channels":["zhihu","toutiao"],"generate":true,"topic":"智慧公路的三个常见误区","requirement":"1500 字左右,举 2 个真实项目例子"}'

示例 · 视频(自带成片 / 代为生成)

# 自带成片:发好看视频 + AcFun + 抖音
curl -X POST https://sarasvati.cn/api/v1/publish \
  -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"brandId":3,"channels":["haokan","acfun","douyin"],"contentType":"video","videoUrl":"https://example.com/intro.mp4","title":"3 分钟看懂智慧公路","content":"视频简介/文案(选填)"}'

# 代为生成:AI 出分镜脚本并合成(异步,立即返回 manuscriptId)
curl -X POST https://sarasvati.cn/api/v1/publish \
  -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"brandId":3,"channels":["douyin","bilibili"],"contentType":"video","generate":true,"topic":"智慧公路的三个常见误区"}'

示例 · 幂等重试

curl -X POST https://sarasvati.cn/api/v1/publish \
  -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-20261017-001" \
  -d '{"brandId":3,"channels":["zhihu","toutiao"],"generate":true,"topic":"智慧公路的三个常见误区"}'
# 超时/断网后用同一 Key 原样重发:命中返回首次响应(带 idempotentReplay: true),不重复扣费
{
  "ok": true,
  "data": {
    "manuscriptId": 128,
    "taskIds": [901, 902],
    "perPlatform": {
      "zhihu": { "taskId": 901, "status": "queued" },
      "toutiao": { "taskId": 902, "status": "queued" }
    },
    "chargedUnits": 0,
    "freeQuotaUsed": 2,
    "freeQuotaRemaining": 18,
    "unitsRemaining": 2000,
    "status": "queued"
  }
}
⚠️ 前置条件:账号处于可用状态(试用期内或认证未过期,否则 403 且响应带 upgradeUrl);目标渠道已在控制台「渠道」页接入,否则 400 报出未接入清单。内容未通过审核时不扣发布费用;某渠道入队失败只退该渠道的费用/免费额度,其余渠道不受影响。视频·代为生成的合成费由合成环节另行扣减(失败全额退还,含已收的发布费)。

GET/api/v1/me

验证 Key 并返回账号概要:名称、认证档位、到期时间、单元余额与各项单元单价。

响应字段

字段类型说明
tenantIdnumber账号(租户)ID
namestring账号名称
planstring认证档位:trial(试用)/ standard(基础版)/ pro(专业版)/ premium(高级版)
certifiedUntilstring | null认证到期时间(ISO 8601)
balanceUnitsnumber当前单元余额
statusstring账号状态(active 为正常)
unitCostsobject单元单价参考:rewritePerArticle(改写/篇)、imagePerPiece(配图/张)、eoReport(EO 报告/份)

示例

curl -H "Authorization: Bearer svt_你的Key" \
  https://sarasvati.cn/api/v1/me

GET/api/v1/topics

选题清单:Agent 根据你的信源与品牌综合研判后产出的选题,按创建时间倒序。

请求参数

参数位置/类型必填说明
statusquery · string否按状态筛选:proposed(待审批)/ approved(已通过)/ auto_approved(自动通过)/ rejected(已拒绝)/ producing(生产中)/ produced(已产出)/ expired(已过期);不传返回全部
brandIdquery · number否按品牌筛选(品牌 ID 见控制台「品牌管理」)
pagequery · number否页码,从 1 开始,默认 1
limitquery · number否每页条数,默认 20,最大 100

响应字段(data 数组项)

字段类型说明
idnumber选题 ID
titlestring选题标题
statusstring选题状态(枚举同上)
scorenumber选题评分(Agent 综合热点度与品牌匹配度给出)
sourcestring选题来源(信源 / 数据分析建议等)
brandobject | null所属品牌:{ id, name }
manuscriptIdnumber | null该选题产出的稿件 ID(未产出为 null)
createdAt / updatedAtstring创建 / 更新时间(ISO 8601)

示例

curl -H "Authorization: Bearer svt_你的Key" \
  "https://sarasvati.cn/api/v1/topics?status=proposed&limit=10"
{
  "ok": true,
  "data": [
    {
      "id": 128,
      "title": "国庆假期高速出行预测与避堵指南",
      "status": "proposed",
      "score": 86,
      "source": "tavily-hot",
      "brand": { "id": 3, "name": "路信通" },
      "manuscriptId": null,
      "createdAt": "2026-09-25T09:12:00.000Z",
      "updatedAt": "2026-09-25T09:12:00.000Z"
    }
  ],
  "page": 1, "limit": 10, "total": 1, "hasNext": false
}

GET/api/v1/manuscripts

稿件列表:一篇稿件含多个平台适配版本,每个版本的发布状态、作品链接、失败原因都独立返回。

请求参数

参数位置/类型必填说明
statusquery · string否按稿件状态筛选:draft(草稿)/ pending_review(待审批)/ approved(已通过)/ rejected(已拒绝)/ cancelled(已取消)/ published(已发布)/ failed(发布失败);不传返回全部
brandIdquery · number否按品牌筛选
pagequery · number否页码,默认 1
limitquery · number否每页条数,默认 20,最大 100

响应字段(data 数组项)

字段类型说明
idnumber稿件 ID
titlestring稿件标题
statusstring稿件状态(枚举同上)
contentTypestringarticle(图文)/ video(视频)
brandobject | null所属品牌:{ id, name }
videoobject视频稿件才有:{ status, durationSec }
platformsarray各平台版本(见下表)
publishedCountnumber已成功发布的平台数
createdAt / updatedAtstring创建 / 更新时间

platforms 数组项

字段类型说明
platformstring平台标识(如 zhihu / mp / toutiao / xiaohongshu …)
titlestring该平台版本的标题(各平台自动改写)
publishStatusstringdraft(未发布)/ queued(已入队)/ publishing(发布中)/ published(已发布)/ drafted(已入平台草稿箱,需人工点发布)/ failed(失败)/ skipped(跳过)
publishedUrlstring | null作品链接(已发布且成功回采到链接时)
publishedAtstring | null发布时间
lastErrorstring | null最近一次发布失败原因

示例

curl -H "Authorization: Bearer svt_你的Key" \
  "https://sarasvati.cn/api/v1/manuscripts?status=published&limit=5"

GET/api/v1/manuscripts/{id}

稿件详情:字段与列表一致,额外返回摘要与各平台版本的完整正文。稿件不存在或不属于当前账号时返回 404。

额外返回字段

字段类型说明
summarystring稿件摘要
platforms[].contentstring该平台版本的完整正文
platforms[].summarystring该平台版本的摘要

示例

curl -H "Authorization: Bearer svt_你的Key" \
  https://sarasvati.cn/api/v1/manuscripts/57

GET/api/v1/effects

效果回采数据:已发布作品的查看、点赞、回复、分享。同一作品会被定期多次回采,每次回采一条记录——按时间排起来就是增长曲线。

请求参数

参数位置/类型必填说明
daysquery · number否回采时间范围(最近 N 天),默认 7,最大 90
brandIdquery · number否按品牌筛选
pagequery · number否页码,默认 1
limitquery · number否每页条数,默认 20,最大 100

响应字段(data 数组项)

字段类型说明
manuscriptId / manuscriptTitlenumber / string对应稿件的 ID 与标题
brandobject | null所属品牌:{ id, name }
platformstring平台标识
publishedUrlstring | null作品链接
views / likes / comments / sharesnumber本次回采的查看 / 点赞 / 回复 / 分享数
fetchedAtstring本次回采时间(ISO 8601)
errorstring | null本次回采失败原因(成功为 null)

示例

curl -H "Authorization: Bearer svt_你的Key" \
  "https://sarasvati.cn/api/v1/effects?days=30&limit=50"
{
  "ok": true,
  "data": [
    {
      "manuscriptId": 57,
      "manuscriptTitle": "智慧公路的三个误区",
      "brand": { "id": 3, "name": "路信通" },
      "platform": "zhihu",
      "publishedUrl": "https://zhuanlan.zhihu.com/p/…",
      "views": 1286, "likes": 45, "comments": 7, "shares": 3,
      "fetchedAt": "2026-09-26T02:00:00.000Z",
      "error": null
    }
  ],
  "page": 1, "limit": 50, "total": 1, "hasNext": false, "days": 30
}

POST/api/v1/directives

提交内容需求指令。指令创建为「待确认」状态——本接口不扣单元,你在控制台「指令」页确认后,才按与手动创建完全相同的流程解析、计费、执行。

请求体(JSON)

参数位置/类型必填说明
rawTextbody · string是10–500 字的大白话需求,如「每天给路信通产出 1 篇智慧公路主题的图文,发知乎和头条」
brandIdbody · number否指定品牌;必须属于当前账号且未暂停

响应字段

字段类型说明
directiveIdnumber指令 ID
statusstring固定为 pending_confirm(待确认)
confirmUrlstring控制台指令页地址,登录后确认即开始执行

示例

curl -X POST -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"rawText":"本周给路信通出 3 篇行业热点图文,发知乎和公众号","brandId":3}' \
  https://sarasvati.cn/api/v1/directives
{
  "ok": true,
  "data": {
    "directiveId": 42,
    "status": "pending_confirm",
    "confirmUrl": "https://sarasvati.cn/console/directives"
  }
}
⚠️ 可能的 400 错误:rawText 需为 10-500 字的大白话需求、brandId 不属于当前账号、该品牌已暂停,请先在控制台恢复。

POST/api/v1/leads

线索推入:已有自己的表单/CRM(金数据、问卷星、麦客、自有官网表单 webhook)时,把线索直接推进妙音线索库——与官网嵌入表单同口径校验、24h 去重、实时通知,控制台「销售线索」页统一跟进。不扣单元。

请求体(JSON)

参数位置/类型必填说明
namebody · string是称呼,最长 60 字
contactbody · string是联系方式:手机号 / 邮箱 / 微信号 / 座机(格式白名单校验,脏数据 400)
emailbody · string否邮箱(填了就必须合法,独立落库便于导出触达)
notebody · string否需求描述,最长 500 字
brandIdbody · number否归属品牌,必须属于当前账号
utmCampaignbody · string否归因标记(如来源活动/内容标识)

响应字段

字段类型说明
duplicatebooleantrue = 24 小时内已存在同联系方式线索,未重复创建(不重复通知)
messagestring结果说明

示例

curl -X POST -H "Authorization: Bearer svt_你的Key" \
  -H "Content-Type: application/json" \
  -d '{"name":"王先生","contact":"13800138000","note":"想了解飞轮套餐","brandId":3}' \
  https://sarasvati.cn/api/v1/leads
{
  "ok": true,
  "data": { "duplicate": false },
  "message": "线索已录入,控制台「销售线索」页可跟进"
}
💡 表单工具对接:金数据「设置 → 数据推送 → Webhook」、问卷星「发送数据 → 推送到指定接口」,地址填本接口、请求头加 Authorization,字段映射 name/contact/note 即可。控制台「线索 → 接入指引」有图文步骤。

Webhook 回调

不想轮询?在控制台「OpenAPI」页的「Webhook 回调」卡片里配置你自己的接收地址(可配多个,各自勾选订阅事件), 事件发生时妙音会主动 POST 推送到你的服务。每个端点创建时生成独立的签名 Secret(只完整显示一次,请立即保存)。 回调地址仅支持 http/https 公网地址(内网地址会被拒绝)。

事件清单

字段类型说明
manuscript.pending_review稿件待审批产稿完成进入审批队列(含发布 API 防线降级转人工审批)。data:{ manuscriptId, title, brandName?, versionsCount?, status }
manuscript.published渠道发布成功某渠道版本发布成功回写时触发(每渠道各一条)。data:{ manuscriptId, title, platform, publishedUrl, externalId?, publishedAt }
manuscript.failed渠道发布失败某渠道发布失败终态(自动重试耗尽后)触发。data:{ manuscriptId, title, platform, error, attempts? }

投递格式

POST JSON 到你的回调地址;id 每条投递唯一,你的服务可据此去重(重试会复用同一 id 对应的新报文,同一事件以 data 内容为准)。

字段类型说明
X-Sarasvati-Event请求头事件名(如 manuscript.published)
X-Sarasvati-Signature请求头签名:sha256= + HMAC-SHA256(secret, 原始请求体) 的 hex
idbody · string投递唯一 ID(evt_ 前缀)
eventbody · string事件名(同 X-Sarasvati-Event)
createdAtbody · string事件发生时间(ISO 8601)
databody · object事件数据(字段见上方事件清单)
POST /webhooks/sarasvati HTTP/1.1
Content-Type: application/json
X-Sarasvati-Event: manuscript.published
X-Sarasvati-Signature: sha256=9f86d08…

{
  "id": "evt_3f9a1c…",
  "event": "manuscript.published",
  "createdAt": "2026-10-17T08:00:00.000Z",
  "data": {
    "manuscriptId": 128,
    "title": "智慧公路的三个常见误区",
    "platform": "zhihu",
    "publishedUrl": "https://zhuanlan.zhihu.com/p/…",
    "publishedAt": "2026-10-17T08:00:00.000Z"
  }
}

验签示例(Node.js)

import crypto from 'node:crypto'

function verifySarasvatiWebhook(secret, rawBody, signature) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody, 'utf8').digest('hex')
  const a = Buffer.from(expected), b = Buffer.from(String(signature || ''))
  return a.length === b.length && crypto.timingSafeEqual(a, b)
}

// 在你的 HTTP 服务里(注意用原始请求体字符串,不要重新序列化 JSON):
// const ok = verifySarasvatiWebhook(SECRET, rawBody, req.headers['x-sarasvati-signature'])
// if (!ok) return res.status(401).end()

重试策略与约定

  • 成功判定:你的服务返回 2xx 即视为送达;其他状态码、连接失败、超时(10 秒)都会进入重试。
  • 重试:失败后自动重试 3 次,间隔 1 分钟 / 5 分钟 / 15 分钟(指数退避);仍失败则标记终态,不再投递。
  • 超时:单次投递 10 秒超时——你的接收端应尽快返回 2xx,耗时处理请异步化。
  • 投递日志:控制台「OpenAPI」页可查看每个端点最近投递的成功率与最近 20 条投递记录(状态 / 次数 / 错误原因)。

计费与额度

发布 API 的计费规则很简单:每日免费额度先用,超出按渠道计费,失败全退。

字段类型说明
每日免费额度20 个渠道发布 / 天每账号每日前 20 个「渠道发布」免费(1 篇发 N 个渠道 = N 个渠道发布,图文/视频共享额度),次日零点重置
超出后单价图文 0.5 / 视频 1.5 单元 / 渠道按 contentType 区分;视频·代为生成的合成费由合成环节另行扣减(失败全额退还)
余额不足402响应带 rechargeUrl;充值在控制台「计费」页,阶梯价见定价页
调用限流30 次 / 分钟 / Key超出返回 429,error 里给出需等待的秒数
幂等重试Idempotency-Key请求头传幂等键(≤128 字符):同一 Key 重试返回首次响应,不重复产稿/扣费;处理中重复提交返回 409
渠道范围国内渠道图文与视频渠道均已开放(video 可发好看视频/AcFun 等纯视频渠道);海外渠道择期开放
失败退款自动只对成功入队的渠道计费;审核未通过、防线降级转人工、入队失败、视频合成失败——相关费用与免费额度自动全额退回

单元充值阶梯与消耗单价全表见 定价页;每笔扣费/退费在控制台「计费」页逐条可查。

💡 费用构成:本接口响应里的 chargedUnits 只含发布费(超出免费额度的部分)。「代为生成」模式的内容生产费(改写、配图等)由内容管线按与控制台相同的标准另行扣减,单价可用 GET /api/v1/me 的 unitCosts 字段查询;内容未通过审核时生产费与发布费都全额退还。

典型场景

数据看板(BI 汇总)

定时任务每天拉 /effects?days=1,把各平台阅读、点赞、回复写进你自己的数据库或 BI,做多品牌横向对比。同一作品的多次回采记录可直接画增长曲线。

稿件归档(内容资产库)

稿件发布后,用 /manuscripts 筛 status=published 增量拉取,再按 ID 调详情接口取各平台完整正文,归档进你的 CMS 或知识库。

外部触发(事件驱动内容)

你的监控系统发现行业热点 → 自动 POST /directives 提交需求 → 运营在控制台一键确认 → Agent 开始生产 → 审批短信直达手机。机器发现机会,人只做决策。

一键分发(自有内容中台)

你的 CMS 审核通过的稿件,自动 POST /api/v1/publish 走自带内容模式分发到国内渠道——每日前 20 个渠道发布免费;perPlatform 逐渠道返回入队结果,失败渠道自动退费。

安全与配额

  • Key 只存哈希:服务端只保存 Key 的 SHA-256,完整 Key 无法被找回——生成时务必立即保存,丢失请重置。
  • 数据隔离:每个 Key 只能访问所属账号的数据;跨账号资源一律返回 404,不暴露存在性。
  • 停用即失效:账号停用(如到期未续费)后 Key 同步失效,恢复后无需重新生成。
  • 吊销与重置:怀疑泄露时在控制台「OpenAPI」页点「吊销」立即失效;「重置」生成新 Key 同时作废旧 Key。
  • 写操作保护:提交指令创建后为「待确认」,控制台确认前不扣费不执行;发布接口只对成功入队的渠道计费,失败自动退还,杜绝程序异常刷量。
  • 频率限制:发布接口同一 Key 30 次/分钟(超出 429);查询类接口建议轮询不低于 1 分钟一次,列表单页最大 100 条,请用分页遍历。

常见问题

API Key 在哪里生成和管理?

控制台左下角账户菜单 →「OpenAPI」页(计费中心下面):生成 / 重置 / 吊销 Key,看今日 API 发布用量与免费额度。完整 Key 只在生成时显示一次,请立即保存;丢失只能重置,旧 Key 即刻失效。

调接口返回 401「API Key 无效或账号已停用」怎么办?

按顺序排查:① 请求头格式是否为 Authorization: Bearer svt_xxx(注意 Bearer 后有空格);② Key 是否被重置或吊销过——控制台「OpenAPI」页只能看到 Key 前缀,对不上就是旧 Key;③ 账号是否到期停用(先用同一账号登录控制台确认能正常使用)。都排除后仍 401,提工单我们查。

brandId 在哪里查?

控制台「品牌管理」里每个品牌的 ID;也可以调 /topics 或 /manuscripts,返回里的 brand.id 就是。注意 brandId 必须属于你自己的账号,且品牌处于启用状态。

为什么 /effects 里同一篇作品有很多条记录?

这是设计如此:作品发布后会被定期多次回采,每次回采生成一条记录(带 fetchedAt 时间戳)。要最新数据就按 fetchedAt 取每个作品的最后一条;要增长曲线就把同一作品(manuscriptId + platform)的记录按时间排列。

稿件显示「已发布」但没有 publishedUrl?

两类情况:① 作品进了平台草稿箱(publishStatus=drafted,如公众号、搜狐号),需要你或我们在平台后台点最终发布,作品链接产生后才会回采到;② 链接回采有延迟,一般发布后 24–48 小时内补齐。超过 48 小时仍没有,提工单。

POST /directives 提交后什么都没发生?

这是正常的保护设计:API 提交的指令是「待确认」状态,不扣单元、不执行。登录控制台「指令」页确认后才会解析、计费并进入生产流水线——防止程序异常把你的单元刷光。

调用发布 API(POST /api/v1/publish)需要什么条件?

三个条件:① 控制台「OpenAPI」页生成 API Key(左下角账户菜单进入);② 账号处于可用状态(试用期内或认证未过期),否则返回 403 并附 upgradeUrl;③ 目标渠道已在控制台「渠道」页接入,未接入的渠道会在 400 里逐个报出。返回的 manuscriptId 可配合 GET /manuscripts/{id} 轮询发布进度。

发布 API 怎么计费?免费额度是多少?

每账号每日前 20 个「渠道发布」免费(1 篇发 N 个渠道 = N 个渠道发布,图文/视频共享额度),次日零点重置;超出部分图文 0.5 单元/渠道、视频 1.5 单元/渠道。只对成功入队的渠道计费:审核未通过、入队失败、视频合成失败的相关费用与免费额度自动全额退回。余额不足返回 402 并附 rechargeUrl。

发布 API 支持哪些渠道?

国内图文与视频渠道均已开放:图文渠道发知乎/公众号/头条等;contentType=video 可发抖音/B站/快手等双形态渠道与好看视频/AcFun 等纯视频渠道。海外渠道暂不开放——请求里带了不合法渠道会在 400 错误中逐个报出并附当前可用清单。

API 发布的内容安全怎么保证?

所有内容(包括自带原文)都走与控制台完全相同的审核 + AI 质检管线。若审核/质检防线未完整执行,稿件不会自动发布,而是转人工审批(响应 status=pending_review),本次不产生任何发布费用。

MCP 发布和 REST 发布 API 有什么区别?

同一套 Key、同一个发布队列,两种接法:MCP 走 preview_publish → confirm_publish 两步确认,仅限公众号/妙音频道/官网三个 API 直发渠道,需已认证账号(基础版及以上且在有效期内),每日限 10 次、发布本身不扣费,适合 AI Agent 人机协作;REST 的 POST /api/v1/publish 一次调用完成生成/适配与多渠道入队,限流 30 次/分钟、按渠道计费(每日 20 次免费),适合系统间自动化。

发布完成后能主动推送到我的系统吗?

可以,用 Webhook:在控制台「OpenAPI」页配置回调地址,稿件待审批(manuscript.pending_review)、发布成功(published)、发布失败(failed)三类事件会主动 POST 推送,请求带 HMAC-SHA256 签名可验真伪;推送失败按 1/5/15 分钟退避自动重试,不用自己轮询接口。

有调用频率限制吗?

查询类接口目前没有硬性限流,但请遵守常规节奏:轮询不低于 1 分钟一次,列表单页最大 100 条用分页遍历。发布接口 POST /api/v1/publish 有硬性限流:同一 Key 30 次/分钟,超出返回 429 并提示需等待的秒数。后续用量配额调整会提前公告,不会突然限制。

开发者支持

接入中遇到任何问题,有三条通道——优先提工单,响应最快:

🛠 工单(推荐)

控制台「工单」页提交:接口需求、API Bug、数据异常都走这里。Bug 确认后 24 小时内修复并给单元奖励;接口需求被采纳同样有奖。

去提工单 →

📚 帮助与更新

接口变更、新端点上线会发在资讯中心;控制台每个页面右上角都有「使用说明」。上线公告里有 3 分钟上手指引。

OpenAPI 上线公告 →

🔑 Key 管理

生成、重置、吊销都在控制台「OpenAPI」页。怀疑泄露立即吊销;重置后记得同步更新你系统里的配置。

管理 API Key →

💡 提工单时带上这些信息能加快定位:调用的接口路径、完整请求(Key 请打码,只留 svt_ 后前 6 位)、返回的错误内容、发生时间。

路线图

  • 视频发布失败渠道一键重发;数字人口播成片
  • 细粒度 Key 权限:只读 / 读写分离,多 Key 管理

有接口需求?在控制台「工单」里提,被采纳有单元奖励。

现在就把 Agent 接进你的系统

生成 Key 只要 10 秒,第一条 curl 只要 1 分钟。