API 概述
声量开放 API 让你把 GEO 监测和软文发稿接进自己的系统 —— 在你的后台里发起检测、 取回品牌在各个 AI 平台的可见度数据、提交发稿工单,不必每次都打开控制台操作。
API 和控制台是同一个账号、同一份数据:用 API 跑出来的检测,在控制台的 GEO 页面里 看得到;在控制台配好的品牌和意图词,API 也读得到。配额也共用一份,不另外计费。
第一次接入请看快速开始,五步跑通一轮检测。
服务地址
https://shengliang.cn请求与响应一律 UTF-8 JSON。机器可读的接口定义见
openapi.json,可直接导入 Postman / Swagger UI 或用来生成客户端。
认证
每个请求都要在 Header 里带上 API Key:
Authorization: Bearer sk-xxxxxxxxxxxxKey 在控制台「API Key」页创建。明文只在创建时显示一次,请当场保存 —— 我们只存 哈希值,无法帮你找回,丢了只能吊销重建。
Key 等同于你的账号凭证,不要提交到代码仓库,也不要放进浏览器或移动端代码里。
调 GET /openapi/v1/me 可以验证一把 Key 是否可用、它有哪些权限。
权限范围
创建 Key 时可以限定它能做什么。
| scope | 可以做 |
|---|---|
geo:read | 读品牌、意图词、竞品、检测轮次与分析结果 |
geo:write | 建品牌、改品牌资料、增删改话题与意图词、改竞品 |
geo:run | 发起 GEO 监测(消耗检测配额) |
media:read | 查媒体列表、详情、筛选字典、发布点数与发稿记录 |
media:order | 提交 / 撤回发稿工单(消耗发布点数) |
也可以用通配符:* 代表全部,geo:* 代表 GEO 域内全部(不跨域)。控制台新建 Key 时
默认给全部权限,切到「自定义」可逐项勾选。
权限在创建后不可修改,需要调整请重新创建一把。给第三方或自动化脚本用的 Key,
建议只勾选它实际需要的权限 —— 尤其 geo:run 和 media:order 会消耗你的配额和点数。
权限不足时返回 1002,detail.missing 会列出缺少的 scope:
{ "code": 1002, "msg": "API Key 缺少权限:geo:run",
"detail": { "required": ["geo:run"], "missing": ["geo:run"] } }可访问的数据范围
API 只能访问个人空间的数据。团队空间里的品牌、意图词、发稿记录通过 API 读不到, 即使你是该团队成员。有团队场景的需求请联系我们。
响应结构
成功和失败用同一个结构,不需要写两套解析:
{ "code": 0, "msg": "ok", "data": { } }| 字段 | 说明 |
|---|---|
code | 0 表示成功,非 0 为业务错误码。请用它做判断 |
msg | 中文提示文案,会随版本调整,不要用来做判断 |
data | 成功时的返回内容,失败时为 null |
detail | 仅失败时出现,补充信息(缺哪个权限、还差多少点数、需要等多久) |
同一个 HTTP 状态码可能对应多种原因,例如 429 既可能是请求太频繁(等几秒),也可能是
当日检测次数用完(等到明天)。请根据 code 分支处理,完整码表与排查步骤见
错误码说明。
端点总览
| 端点 | 说明 |
|---|---|
GET /me | 查看当前 Key 的身份与权限 |
| GEO 监测 | |
POST /geo/runs | 发起一轮 GEO 监测 |
GET /geo/runs/{run_id} | 查监测进度 |
GET /geo/brands/{brand_id}/overview | 结果概览(核心指标与趋势) |
GET /geo/brands/{brand_id}/visibility | 品牌可见性细分 |
GET /geo/brands/{brand_id}/sentiment | 口碑分析 |
GET /geo/brands/{brand_id}/citations | 引用来源分析 |
| GEO 配置 | |
POST /geo/brands/{brand_id}/generate | AI 生成话题与意图词 |
GET /geo/brands/{brand_id}/generate | 查生成进度 |
GET /geo/brands · POST | 品牌列表 / 新建 |
GET /geo/brands/{brand_id} · PATCH | 品牌详情 / 更新 |
GET /geo/brands/{brand_id}/prompts · POST | 意图词列表 / 新建 |
PATCH /geo/prompts/{prompt_id} · DELETE | 意图词启停改写 / 删除 |
GET /geo/brands/{brand_id}/topics · POST | 话题列表 / 新建 |
GET /geo/brands/{brand_id}/competitors · POST | 竞品列表 / 新建 |
| 软文发稿 | |
GET /media | 按条件筛选可投放媒体 |
GET /media/{media_id} | 媒体详情 |
GET /media/channels | 筛选字典(含各档位边界) |
POST /media/orders | 提交发稿 |
GET /media/orders | 发稿记录与真实状态 |
DELETE /media/orders/{order_id} | 撤回工单并退回点数 |
GET /media/publish-quota | 本月发布点数余额 |
GET /media/points-records | 点数消耗明细 |
路径均省略了 /openapi/v1 前缀。
配额与限制
API 与控制台共用同一套配额,具体额度按订阅套餐:
| 限制 | 品牌版及以下 | 超级品牌版 |
|---|---|---|
| 可检测平台 | 豆包、DeepSeek、元宝(3 个) | 再加 千问、文心、Kimi(6 个) |
| 同时启用的意图词 | 10 条 | 20 条 |
| 每日检测次数 | 1 次 | 3 次 |
| 两次检测的最小间隔 | 1 小时 | 1 小时 |
| 每月发布点数 | 300 | 1000 |
几点说明:
- 可检测平台:传入超出档位的平台会被忽略,不会报错。当前可用的平台列表见 结果概览的返回。
- 意图词上限限的是同时「启用」的条数,不限总数。一轮检测的问答次数 =
启用意图词数 × 平台数,这也是上限存在的原因。超限时启用操作返回
2002。 - 每日检测次数按北京时间自然日计算,00:00 重置;只统计你主动触发的(含 API 调用), 套餐内的定时监测不占用。
- 最小间隔是为了保证数据质量:AI 平台的回答在短时间内高度相似,间隔太近跑两次 拿到的几乎是同一份答案,反而会把趋势曲线压平。
- 发布点数按订阅周期发放,每家媒体消耗多少与其价格挂钩。撤回待审核的工单会退回点数。
请求频率
除业务配额外,还按 Key 做频率限制。超限返回 2001,detail.retry_after 给出建议
等待秒数。轮询监测进度建议 30 秒一次 —— 一轮检测以分钟计,更密的轮询拿不到更多
信息,只会更快触发限制。
接入前值得知道
用 code 判断成败 | code == 0 才是成功,不要只看 HTTP 状态码 |
| 监测是异步的 | 提交只代表受理,要轮询进度才知道跑完没有 |
| 提交发稿 ≠ 已发布 | 工单会先进入待审核队列,用发稿记录查真实状态 |
| 多值查询参数要重复传 | ?areas=a&areas=b,写成 ?areas=a,b 筛选不会生效 |
| 订阅过期后仍可读取 | 历史数据照常读,只是不能再发起检测或提交发稿 |
