开发者 · OpenAPI v1

把内容 Agent 接进你的系统

一组 REST 接口,查询你的选题、稿件、发布状态与效果数据,也可以直接提交内容需求指令。 数据严格按账号隔离,指令经控制台确认后才计费执行。

快速开始

1

生成 API Key

登录控制台 → 左侧栏底部「我的」→「OpenAPI(开发者)」卡片 →「开通并生成 API Key」。完整 Key 只显示这一次,请立即复制保存;丢失可在同一卡片重置(旧 Key 立即失效)。

2

验证 Key 是否生效

所有请求通过 Authorization 请求头携带 Key:

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

返回你的账号信息(如下)即接入成功:

{
  "ok": true,
  "data": {
    "tenantId": 5,
    "name": "路信通",
    "plan": "pro",
    "certifiedUntil": "2027-09-01T00:00:00.000Z",
    "balanceUnits": 2000,
    "status": "active",
    "unitCosts": { "rewritePerArticle": 20, "imagePerPiece": 5, "eoReport": 30 }
  }
}
3

开始调用

拉稿件、拉效果、提需求——参考下方接口文档。所有接口只返回你自己账号的数据。

通用约定

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

响应格式

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

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

分页

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

错误码

字段类型说明
400参数错误请求参数不合法,error 里有具体说明(如 rawText 长度不符、brandId 不属于当前账号)
401未认证API Key 缺失、格式不对、已吊销,或账号已停用
404不存在资源不存在,或不属于当前账号(出于隔离考虑不区分这两种情况)

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 不属于当前账号、该品牌已暂停,请先在控制台恢复。

典型场景

数据看板(BI 汇总)

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

稿件归档(内容资产库)

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

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

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

安全与配额

  • Key 只存哈希:服务端只保存 Key 的 SHA-256,完整 Key 无法被找回——生成时务必立即保存,丢失请重置。
  • 数据隔离:每个 Key 只能访问所属账号的数据;跨账号资源一律返回 404,不暴露存在性。
  • 停用即失效:账号停用(如到期未续费)后 Key 同步失效,恢复后无需重新生成。
  • 吊销与重置:怀疑泄露时在「我的」页点「吊销」立即失效;「重置」生成新 Key 同时作废旧 Key。
  • 写操作保护:目前唯一的写接口(提交指令)创建后仍为「待确认」,不会产生任何扣费,杜绝程序异常刷量。
  • 频率建议:常规轮询建议不低于 1 分钟一次;列表接口单页最大 100 条,请用分页遍历。

常见问题

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

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

brandId 在哪里查?

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

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

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

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

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

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

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

有调用频率限制吗?

目前没有硬性限流,但请遵守常规节奏:轮询不低于 1 分钟一次,列表单页最大 100 条用分页遍历。后续会上线用量统计与配额,提前在公告里说明,不会突然限制。

开发者支持

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

🛠 工单(推荐)

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

去提工单 →

📚 帮助与更新

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

OpenAPI 上线公告 →

🔑 Key 管理

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

管理 API Key →

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

路线图

  • 发布操作类接口:指定渠道直接发布 / 失败稿件重新发布
  • Webhook 回调:稿件待审批、发布完成、效果更新时主动推送到你的服务
  • 细粒度 Key 权限:只读 / 读写分离,多 Key 管理
  • API 用量统计:控制台可视化的调用量与错误率

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

现在就把 Agent 接进你的系统

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