Open API 接入列表
接入
- 通过 AnswerBit 服务人员申请 Open API Key。
- 在 HTTP Header 中携带
X-API-Key:
Header 举例:
X-API-Key: xxxxxxx- 外网用户:base_url:
https://answerbit.qq.com
- TeamID、BrandID 由 AnswerBit 服务人员提供,也可从控制台页面 URL 中获取。

- Key 的可访问团队、品牌及读写能力以申请时开通的权限为准。
团队、品牌与竞品管理
获取团队下的所有品牌
- 请求方法:POST
- 请求路径:
/geo/query/brand
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 品牌ID |
| brand_name | string | 品牌名称 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"id": "brand_test_001",
"brand_name": "测试品牌A"
}
]
}新建品牌
- 请求方法:POST
- 请求路径:
/geo/brand/create
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand | string | 品牌名称 | 是 |
| alias | string | 品牌别名 | 否 |
| team_id | string | 团队ID | 是 |
| website | string | 品牌官网 | 否 |
| description | string | 品牌描述 | 否 |
| icon_mime_type | string | 品牌 logo 的 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 否 |
| icon_data | string | 品牌 logo 内容,二进制字节流;最大 2MB | 否 |
| note | string | 品牌备注 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的品牌ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "brand_test_001"
}
}新建品牌(可同时初始化品牌基础信息、竞品、用户提问)
- 请求方法:POST
- 请求路径:
/geo/brand/bundle/create
说明:
- 当传入
team_id时,表示在已有团队下新建品牌。 - 当未传
team_id且传入team时,表示先创建团队,再在该团队下创建品牌。 user_prompts为品牌初始化时要创建的用户提问列表。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID;已有团队下创建品牌时传入 | 否 |
| team | object | 团队信息;未传 team_id 时需传入 | 否 |
| team.name | string | 团队名称 | 条件必填 |
| team.description | string | 团队描述 | 否 |
| team.icon_mime_type | string | 团队 logo 的 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 否 |
| team.icon_data | string | 团队 logo 内容,二进制字节流;最大 2MB | 否 |
| brand | object | 品牌信息 | 是 |
| brand.brand_name | string | 品牌名称 | 是 |
| brand.alias | string | 品牌别名 | 否 |
| brand.website | string | 品牌官网 | 否 |
| brand.description | string | 品牌描述 | 否 |
| brand.note | string | 品牌备注 | 否 |
| brand.icon_mime_type | string | 品牌 logo 的 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 否 |
| brand.icon_data | string | 品牌 logo 内容,二进制字节流;最大 2MB | 否 |
| user_prompts | object 数组 | 初始化创建的用户提问列表 | 是 |
| user_prompts.question | string | 用户提问内容 | 是 |
| competitors | object 数组 | 竞品列表 | 否 |
| competitors.name | string | 竞品名称 | 否 |
| competitors.alias | string | 竞品别名 | 否 |
| competitors.description | string | 竞品描述 | 否 |
| competitors.website | string | 竞品官网 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| brand | object | 新建后的品牌信息 |
| brand.id | string | 品牌ID |
| brand.brand_name | string | 品牌名称 |
| brand.alias | string | 品牌别名 |
| brand.website | string | 品牌官网 |
| brand.description | string | 品牌描述 |
| brand.note | string | 品牌备注 |
| prompts | object 数组 | 初始化创建的用户提问列表 |
| prompts.prompt_id | string | 用户提问ID |
| prompts.question | string | 用户提问内容 |
| competitors | object 数组 | 新建后的竞品列表 |
| competitors.competitor_id | string | 竞品ID |
| competitors.name | string | 竞品名称 |
| competitors.alias | string | 竞品别名 |
| competitors.description | string | 竞品描述 |
| competitors.website | string | 竞品官网 |
| team | object | 团队信息 |
| team.team_id | string | 团队ID |
| team.name | string | 团队名称 |
| team.description | string | 团队描述 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"brand": {
"id": "brand_test_001",
"brand_name": "测试品牌A",
"alias": "品牌A",
"website": "https://brand-a.example.com",
"description": "这是一个用于接口演示的测试品牌",
"note": "测试备注"
},
"prompts": [
{
"prompt_id": "prompt_test_001",
"question": "测试品牌A适合哪些业务场景?"
}
],
"competitors": [
{
"competitor_id": "competitor_test_001",
"name": "测试竞品A",
"alias": "竞品A",
"description": "这是一个用于接口演示的测试竞品",
"website": "https://competitor-a.example.com"
}
],
"team": {
"team_id": "team_test_001",
"name": "测试团队A",
"description": "用于接口演示的测试团队"
}
}
}编辑品牌基础信息
- 请求方法:POST
- 请求路径:
/geo/brand/update
说明:更新时请一并传入全部可编辑字段,未传字段可能被置空。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | 品牌ID | 是 |
| brand_name | string | 品牌名称 | 是 |
| brand_alias | string | 品牌别名 | 是 |
| website | string | 品牌官网 | 是 |
| description | string | 品牌描述 | 是 |
| note | string | 品牌备注 | 是 |
| website_auto_trace | bool | 是否自动追踪官网内容:true-开启,false-关闭 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}更新品牌 logo
- 请求方法:POST
- 请求路径:
/geo/brand/update/icon
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| mime_type | string | 图片 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 是 |
| data | string | 图片内容,二进制字节流;最大 2MB | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| icon_url | string | 更新后的品牌 logo 地址 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"icon_url": "https://static.example.com/brand/logo-test.png"
}
}获取竞品列表
- 请求方法:POST
- 请求路径:
/geo/competitor/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| competitor_id | string | 竞品ID |
| competitor_name | string | 竞品名称 |
| competitor_alias | string | 竞品别名 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"competitor_id": "competitor_test_001",
"competitor_name": "测试竞品A",
"competitor_alias": "竞品A"
}
]
}新建竞品
- 请求方法:POST
- 请求路径:
/geo/competitor/create
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| competitor_name | string | 竞品名称 | 是 |
| competitor_alias | string | 竞品别名 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的竞品ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "competitor_test_001"
}
}编辑竞品
- 请求方法:POST
- 请求路径:
/geo/competitor/update
说明:更新时请一并传入全部可编辑字段,未传字段可能被置空。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| competitor_id | string | 竞品ID | 是 |
| competitor_name | string | 竞品名称 | 是 |
| competitor_alias | string | 竞品别名 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}删除竞品
- 请求方法:POST
- 请求路径:
/geo/competitor/delete
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| competitor_id | string | 竞品ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}内容管理
获取团队下的所有标签
- 请求方法:POST
- 请求路径:
/geo/article/tag/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| tag_type | int | 标签类型:1-用户标签,2-系统标签 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| tag_id | string | 标签ID |
| team_id | string | 团队ID |
| name | string | 标签名称 |
| note | string | 标签备注 |
| tag_type | int | 标签类型:1-用户标签,2-系统标签 |
| status | int | 标签状态:1-启用,2-禁用 |
| created_by | string | 创建人 |
| article_count | int | 标签关联的文章数 |
| created_time | int64 | 创建时间 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"tag_id": "tag_test_001",
"team_id": "team_test_001",
"name": "测试标签A",
"note": "测试标签备注",
"tag_type": 1,
"status": 1,
"created_by": "test_user",
"article_count": 10,
"created_time": "1735689600000"
}
]
}新建文章并加入追踪
- 请求方法:POST
- 请求路径:
/geo/article/trace/save
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title | string | 文章标题 | 是 |
| urls | string 数组 | 文章的各个发布链接 | 是 |
| tag_ids | string 数组 | 文章需要关联的标签ID | 否 |
| language | string | 文章语言,使用 BCP 47 语言码;默认 zh-CN。支持:zh-CN、zh-SG、zh-TW、zh-HK、zh-MO、en-US、en-GB、ja-JP、ko-KR、fr-FR、de-DE、es-ES、pt-BR、pt-PT、it-IT、th-TH、vi-VN、id-ID、ar-SA、ru-RU、ms-MY | 否 |
返回参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| article_id | string | 文章ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": "article_test_001"
}获取文章列表
- 请求方法:POST
- 请求路径:
/geo/article/query
说明:
- 该接口用于获取品牌下的文章列表,并返回文章维度的汇总引用数据。
- 如果只需要导出文章维度的引用总数、引用趋势、已发布平台等信息,该接口可以直接满足。
- 如果需要按 AI 平台拆分的引用明细,需要先通过该接口获取
article_id,再调用「获取文章追踪详情」。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| limit | int | 每次返回数量;不传默认 20 | 否 |
| scroll_id | string | 游标;翻页时传上一次响应中的 scroll_id | 否 |
| start_time | int64 | 引用统计开始时间,毫秒时间戳 | 否 |
| end_time | int64 | 引用统计结束时间,毫秒时间戳 | 否 |
| title | string | 文章标题关键字 | 否 |
| status | int 数组 | 文章状态列表 | 否 |
| source | int 数组 | 文章来源列表 | 否 |
| template_type | int 数组 | 文章模板类型列表 | 否 |
| tag_ids | string 数组 | 标签ID列表 | 否 |
| ref_order_type | int | 引用数排序:1-升序,2-降序 | 否 |
| language | string 数组 | 文章语言列表,使用 BCP 47 语言码 | 否 |
| has_video | bool | 是否筛选已生成视频的文章 | 否 |
| has_video_generating | bool | 是否筛选视频生成中的文章 | 否 |
响应参数:
| 返回值 | 类型 | 含义 | |
|---|---|---|---|
| list | object 数组 | 文章列表 | |
| list.id | string | 文章ID | |
| list.brand_id | string | 品牌ID | |
| list.title | string | 文章标题 | |
| list.status | int | 文章状态 | |
| list.source | int | 文章来源 | |
| list.template_type | int | 文章模板类型 | |
| list.ref_count | int | 当前筛选时间范围内的文章引用总数 | |
| list.fluctuation | float | 引用数变化值 | |
| list.ref_trends | object 数组 | 文章引用趋势 | |
| list.ref_trends.date | string | 日期,格式:YYYY-MM-DD | |
| list.ref_trends.count | int | 当日引用数 | |
| list.published_platforms | object 数组 | 文章已发布平台 | |
| list.published_platforms.platform | string | 发布平台标识 | |
| list.published_platforms.display_name | string | 发布平台展示名 | |
| list.published_platforms.icon_url | string | 发布平台图标 | |
| list.published_platforms.publish_url | string | 发布链接 | |
| scroll_id | string | 下一页游标;为空表示没有更多数据 | |
| total | int | 匹配文章总数 | |
| total_links | int | 匹配文章的发布链接总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"list": [
{
"id": "article_test_001",
"brand_id": "brand_test_001",
"title": "测试文章A",
"status": 1,
"source": 1,
"template_type": 1,
"ref_count": 12,
"fluctuation": 3,
"ref_trends": [
{
"date": "2026-01-15",
"count": 4
}
],
"published_platforms": [
{
"platform": "wechat",
"display_name": "微信公众号",
"icon_url": "https://static.example.com/platform/wechat.png",
"publish_url": "https://example.com/article/a"
}
]
}
],
"scroll_id": "12:article_test_001",
"total": 1,
"total_links": 1
}
}获取文章追踪详情
- 请求方法:POST
- 请求路径:
/geo/article/trace/detail
说明:
- 该接口用于获取单篇追踪文章的引用详情,包含按 AI 平台拆分的引用次数和趋势。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| article_id | string | 文章ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD;不传则按系统默认统计范围 | 否 |
| end_date | string | 结束日期,格式:YYYY-MM-DD;传入时需与 begin_date 同时传入 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| trace_info | object 数组 | 文章追踪记录列表;一篇文章可对应多个发布链接 |
| trace_info.trace_id | string | 追踪记录ID |
| trace_info.article_id | string | 文章ID |
| trace_info.url | string | 追踪链接 |
| trace_info.platform | string | 发布平台 |
| trace_info.icon | string | 发布平台图标 |
| trace_info.title | string | 文章标题 |
| trace_info.can_edit | bool | 当前追踪链接是否允许编辑 |
| trace_info.stats | object | 当前追踪链接的引用统计 |
| stats | object | 文章整体引用统计 |
| stats.ref_count | object | 按 AI 平台统计的引用次数,key 为平台标识,value 为引用次数 |
| stats.total_count | int | 引用总数 |
| stats.ref_count_increase | int | 引用增长数 |
| stats.ref_trends | object 数组 | 按 AI 平台拆分的引用趋势 |
| stats.ref_trends.platform | string | AI 平台标识 |
| stats.ref_trends.ref_trends | object 数组 | 该平台下的每日引用趋势 |
| stats.ref_trends.ref_trends.date | string | 日期,格式:YYYY-MM-DD |
| stats.ref_trends.ref_trends.ref_count | int | 当日引用数 |
| stats.ref_trends.ref_trends.prompts | object 数组 | 产生引用的用户提问列表 |
| stats.ref_trends.ref_trends.prompts.prompt_id | string | 用户提问ID |
| stats.ref_trends.ref_trends.prompts.prompt_content | string | 用户提问内容 |
| stats.ref_trends.ref_trends.prompts.title_name | string | 用户提问分类名称 |
| stats.ref_trends.ref_trends.prompts.ref_count | int | 该用户提问产生的引用数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"trace_info": [
{
"trace_id": "trace_test_001",
"article_id": "article_test_001",
"url": "https://example.com/article/a",
"platform": "wechat",
"icon": "https://static.example.com/platform/wechat.png",
"title": "测试文章A",
"can_edit": false,
"stats": {
"ref_count": {
"deepseek": 4,
"yuanbao": 2
},
"total_count": 6
}
}
],
"stats": {
"ref_count": {
"deepseek": 8,
"yuanbao": 4
},
"total_count": 12,
"ref_count_increase": 3,
"ref_trends": [
{
"platform": "deepseek",
"ref_trends": [
{
"date": "2026-01-15",
"ref_count": 4,
"prompts": [
{
"prompt_id": "prompt_test_001",
"prompt_content": "测试品牌A适合哪些业务场景?",
"title_name": "测试分类A",
"ref_count": 2
}
]
}
]
}
]
}
}
}用户提问与分类管理
新建用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/create
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_id | string | 用户提问分类ID | 是 |
| query_str | string | 用户提问内容 | 是 |
| recommend_id | string | 关联推荐记录ID | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的 query ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "prompt_test_001"
}
}更新用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/update
说明:该接口为局部更新(patch)语义。id、brand_id 必传;query_str 与 status 按传入内容更新,未传则不更新。注意:query_str 不能更新为空字符串,status=0 不表示更新。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | query ID | 是 |
| brand_id | string | 品牌ID | 是 |
| query_str | string | 用户提问内容;传入时更新 | 否 |
| status | int | 用户提问状态;传入时更新,支持:1-启用,2-禁用。0 不表示有效状态,仅表示不更新 | 否 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}批量新建用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/create/batch
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_id | string | 用户提问分类ID | 是 |
| prompts | string 数组 | 用户提问内容列表 | 是 |
| recommend_ids | string 数组 | 关联推荐记录ID列表,与 prompts 一一对应;无关联时可填 -1 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| prompt_ids | string 数组 | 新建的用户提问ID 列表 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"prompt_ids": [
"prompt_test_001",
"prompt_test_002"
]
}
}获取品牌下的用户提问列表(分组)
- 请求方法:POST
- 请求路径:
/geo/prompt/get/group
说明:
- 该接口用于获取品牌下的用户提问列表,按用户提问分类分组。
- 不传
begin_date和end_date时,默认查询最近 7 天;只传其中一个会返回参数错误。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| group_type | int | 分组类型:1-按用户提问分类 | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 否 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 否 |
| page | int | 页码 | 否 |
| page_size | int | 每页数量 | 否 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| tag_ids | string 数组 | 标签ID列表 | 否 |
| query_str | string | 用户提问关键字 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| titles | object 数组 | 按分类分组的结果 |
| titles.title_id | string | 分类ID |
| titles.title_name | string | 分类名称 |
| titles.title_desc | string | 分类描述 |
| titles.prompt_count | int | 分类下的用户提问数量 |
| titles.exposure | float | 曝光率 |
| titles.fluctuation | float | 曝光率变化值 |
| titles.avg_rank | float | 平均排名 |
| titles.daily_avg_score | object 数组 | 每日平均分 |
| titles.prompts | object 数组 | 分类下的用户提问列表 |
| prompts.id | string | 用户提问ID |
| prompts.query_str | string | 用户提问内容 |
| prompts.status | int | 用户提问状态:1-启用,2-禁用 |
| prompts.exposure | float | 曝光率 |
| prompts.avg_rank | float | 平均排名 |
| prompts.daily_avg_score | object 数组 | 每日平均分 |
| prompts.title_id | string | 分类ID |
| prompts.title_name | string | 分类名称 |
| prompts.creator_name | string | 创建人名称 |
| prompts.created_time | int64 | 创建时间 |
| prompts.fluctuation | float | 曝光率变化值 |
| prompts.trace_article_cnt | int | 关联追踪文章数量 |
| prompts.tags | object 数组 | 用户提问关联标签 |
| total | int | 分组总数 |
| total_prompts | int | 用户提问总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"titles": [
{
"title_id": "title_test_001",
"title_name": "测试分类A",
"title_desc": "用于演示的用户提问分类",
"prompt_count": 1,
"exposure": 0.8,
"fluctuation": 0.1,
"avg_rank": 2.5,
"daily_avg_score": [
{
"date": "2026-01-15",
"score": 86
}
],
"prompts": [
{
"id": "prompt_test_001",
"query_str": "测试品牌A适合哪些业务场景?",
"status": 1,
"exposure": 0.8,
"avg_rank": 2.5,
"title_id": "title_test_001",
"title_name": "测试分类A",
"creator_name": "test_user",
"created_time": "1735689600000",
"trace_article_cnt": 3
}
]
}
],
"total": 1,
"total_prompts": 1
}
}获取用户提问分类列表
- 请求方法:POST
- 请求路径:
/geo/title/get
说明:这里的“分类”对应系统中的 title。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| id | string | 分类ID | 否 |
| title_name | string | 分类名称,支持按名称过滤 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 分类ID |
| brand_id | string | 品牌ID |
| title_name | string | 分类名称 |
| title_desc | string | 分类描述 |
| count | int | 该分类下的用户提问数量 |
| created_time | string | 创建时间 |
| updated_time | string | 更新时间 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"id": "title_test_001",
"brand_id": "brand_test_001",
"title_name": "测试分类A",
"title_desc": "用于演示的用户提问分类",
"count": 12,
"created_time": "2026-01-01",
"updated_time": "2026-01-15"
}
]
}新建用户提问 分类
- 请求方法:POST
- 请求路径:
/geo/title/create
说明:这里的“分类”对应系统中的 title。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_name | string | 分类名称 | 是 |
| title_desc | string | 分类描述 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的分类ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "title_test_001"
}
}更新用户提问 分类
- 请求方法:POST
- 请求路径:
/geo/title/update
说明:这里的“分类”对应系统中的 title。该接口为部分更新语义:id、brand_id、title_name 必传;title_desc 传入时才更新,未传则不更新。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | 分类ID | 是 |
| brand_id | string | 品牌ID | 是 |
| title_name | string | 分类名称 | 是 |
| title_desc | string | 分类描述;传入时更新 | 否 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}更新用户提问 所属分类
- 请求方法:POST
- 请求路径:
/geo/prompt/relation/update
说明:该接口不是局部更新,而是替换关联语义,用于将指定用户提问重新归类到新的分类下。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| title_id | string | 目标分类ID | 是 |
| prompt_id | string | 用户提问ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}删除用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/delete
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | query ID | 是 |
| brand_id | string | 品牌ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}批量删除用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/delete/batch
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| prompt_ids | string 数组 | 用户提问ID 列表 | 是 |
| brand_id | string | 品牌ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}删除用户提问分类
- 请求方法:POST
- 请求路径:
/geo/title/delete
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | 分类ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}大模型回答
获取大模型回答记录列表
- 请求方法:POST
- 请求路径:
/geo/task/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| include | int | 提示词筛选方式:0-不包含,1-包含 | 否 |
| prompt | string | 用户提问关键字 | 否 |
| title_id | string 数组 | 提示词标题ID列表 | 否 |
| prompt_ids | string 数组 | 提示词ID列表 | 否 |
| tag_ids | string 数组 | 标签ID列表 | 否 |
| task_ids | string 数组 | 任务ID列表 | 否 |
| platforms | string 数组 | 大模型平台列表 | 否 |
| language | string 数组 | 语言列表 | 否 |
| mention_brand | int | 是否提及品牌筛选:-1-全部,0-未提及,1-提及 | 否 |
| min_score | int | 最小分数 | 否 |
| max_score | int | 最大分数 | 否 |
| url | string | 引用链接URL过滤 | 否 |
| ref_platform | string | 引用来源域名过滤(兼容旧参数) | 否 |
| article_id | string | 文章ID过滤 | 否 |
| page | int | 页码 | 否 |
| page_size | int | 每页数量 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| scores | object 数组 | 大模型回答记录列表 |
| scores.task_id | string | 任务ID |
| scores.query_id | string | 提示词ID |
| scores.query_str | string | 提示词内容 |
| scores.platform | string | 大模型平台 |
| scores.language | string | 语言 |
| scores.zone | string | 地区 |
| scores.date | string | 任务日期 |
| scores.exposure | int | 是否提及品牌:0-未提及,1-提及 |
| scores.score | int | 品牌曝光度评分 |
| scores.avg_rank | int | 品牌排名,0 表示未提及 |
| scores.title_id | string | 提示词标题ID |
| scores.title_name | string | 提示词标题名称 |
| scores.trace_article_cnt | int | 追踪文章引用数量 |
| scores.tags | object 数组 | 提示词关联标签 |
| scores.tags.tag_id | string | 标签ID |
| scores.tags.tag_name | string | 标签名称 |
| scores.tags.tag_type | int | 标签类型:1-用户,2-系统,3-大模型 |
| total | int | 总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"scores": [
{
"task_id": "task_test_001",
"prompt_id": "prompt_test_001",
"query_str": "测试品牌A适合哪些业务场景?",
"platform": "test-llm",
"language": "zh",
"zone": "CN",
"date": "2026-01-15",
"exposure": 1,
"score": 86,
"avg_rank": 2,
"title_id": "title_test_001",
"title_name": "测试分类A",
"trace_article_cnt": 3,
"tags": [
{
"tag_id": "tag_test_001",
"tag_name": "测试标签A",
"tag_type": 1
}
]
}
],
"total": 1
}
}获取大模型回答记录详情
- 请求方法:POST
- 请求路径:
/geo/task/detail/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| task_id | string | 任务ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| query | string | 提示词内容 |
| query_id | string | 提示词ID |
| score | int | 品牌曝光度评分 |
| zone | string | 地区 |
| language | string | 语言 |
| exposure | int | 是否提及品牌:0-未提及,1-提及 |
| rank | int | 品牌排名,0 表示未提及 |
| exposure_cnt | int | 品牌提及次数 |
| llm_output | string | 大模型回答原文 |
| platform | string | 大模型平台 |
| date | string | 任务日期 |
| links | object 数组 | 引用链接列表 |
| links.index | int | 引用序号 |
| links.url | string | 引用链接URL |
| links.title | string | 引用链接标题 |
| links.source | int | 引用来源类型:0-未关联追踪文章/未知,1-平台创作,2-用户创作,3-官网文章 |
| links.article_id | string | 关联追踪文章ID |
| pic | string 数组 | 图片链接列表 |
| fanout | object 数组 | 扩展信息列表 |
| recommend_queries | string 数组 | 推荐提示词列表 |
| video_cards | object 数组 | 视频卡片列表 |
| video_cards.id | string | 视频卡片ID |
| video_cards.video_title | string | 视频标题 |
| video_cards.source_name | string | 来源名称 |
| video_cards.video_description | string | 视频描述 |
| video_cards.video_link | string | 视频链接 |
| video_cards.sort_index | int | 排序序号 |
| video_cards.cover_url | string | 封面图链接 |
| product_cards | object 数组 | 商品卡片列表 |
| product_cards.id | string | 商品卡片ID |
| product_cards.product_name | string | 商品名称 |
| product_cards.product_price | string | 商品价格 |
| product_cards.product_image | string | 商品图片 |
| product_cards.product_link | string | 商品链接 |
| product_cards.product_description | string | 商品描述 |
| product_cards.platform | string | 商品平台 |
| product_cards.sort_index | int | 排序序号 |
| title_name | string | 提示词标题名称 |
| title_id | string | 提示词标题ID |
| tags | object 数组 | 提示词关联标签 |
| tags.tag_id | string | 标签ID |
| tags.tag_name | string | 标签名称 |
| tags.tag_type | int | 标签类型:1-用户,2-系统,3-大模型 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"prompt": "测试品牌A适合哪些业务场景?",
"prompt_id": "prompt_test_001",
"score": 86,
"zone": "CN",
"language": "zh",
"exposure": 1,
"rank": 2,
"exposure_cnt": 1,
"llm_output": "测试品牌A适用于场景一、场景二与场景三。",
"platform": "test-llm",
"date": "2026-01-15",
"links": [
{
"index": 1,
"url": "https://example.com/articles/test-article-1",
"title": "测试文章一",
"source": 1,
"article_id": "article_test_001"
}
],
"pic": [
"https://example.com/images/test-image-1.png"
],
"fanout": [],
"recommend_queries": [
"测试品牌A的核心优势是什么?"
],
"video_cards": [
{
"id": "video_card_test_001",
"video_title": "测试视频一",
"source_name": "测试来源",
"video_description": "测试视频描述",
"video_link": "https://example.com/videos/test-video-1",
"sort_index": 1,
"cover_url": "https://example.com/images/video-cover-1.png"
}
],
"product_cards": [
{
"id": "product_card_test_001",
"product_name": "测试商品一",
"product_price": "99.00",
"product_image": "https://example.com/images/product-1.png",
"product_link": "https://example.com/products/test-product-1",
"product_description": "测试商品描述",
"platform": "test-platform",
"sort_index": 1
}
],
"title_name": "测试分类A",
"title_id": "title_test_001",
"tags": [
{
"tag_id": "tag_test_001",
"tag_name": "测试标签A",
"tag_type": 1
}
]
}
}AI 文章生成与外部发布
获取文章模板
- 请求方法:POST
- 请求路径:
/geo/article/template/get
说明:
- 该接口用于获取当前可用的文章模板列表,建议在调用「生成文章」前使用。
template_id即创建文章时的template_type。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| local_code | string | 模板说明语言,使用 BCP 47 语言码;默认 zh-CN | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| template_id | int | 模板类型ID |
| template_name | string | 模板名称 |
| description | string | 模板描述 |
| is_high_ref | int | 是否高引用模板:0-否,1-是。为 1 时,生成文章需传入 high_ref |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"template_id": 1,
"template_name": "品牌介绍",
"description": "适用于品牌与产品介绍",
"is_high_ref": 0
}
]
}生成文章
- 请求方法:POST
- 请求路径:
/geo/article/create
说明:
- 该接口用于提交文章生成任务。接口返回成功仅表示任务已受理,不表示正文已生成完成。
- 如需在平台内持续追踪发布后的引用效果,可继续调用「新建文章并加入追踪」。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| template_type | int | 文章模板类型,可通过「获取文章模板」取得 | 是 |
| prompt_ids | string 数组 | 用户提问ID列表,最多 20 个 | 是 |
| knowledge_ids | string 数组 | 参考素材ID列表,最多 20 个 | 否 |
| once_knowledge | string | 本次生成使用的补充资料 | 否 |
| high_ref | object | 高引用模板的参考文章;is_high_ref=1 时必填 | 条件必填 |
| high_ref.url | string | 参考文章链接;填写后无需再传标题和正文 | 否 |
| high_ref.title | string | 参考文章标题;未传链接时需与正文同时传入 | 否 |
| high_ref.content | string | 参考文章正文;未传链接时需与标题同时传入 | 否 |
| tag_ids | string 数组 | 文章需要关联的标签ID | 否 |
| language | string | 文章语言,使用 BCP 47 语言码;默认 zh-CN。支持:zh-CN、zh-SG、zh-TW、zh-HK、zh-MO、en-US、en-GB、ja-JP、ko-KR、fr-FR、de-DE、es-ES、pt-BR、pt-PT、it-IT、th-TH、vi-VN、id-ID、ar-SA、ru-RU、ms-MY | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 文章ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "article_test_001"
}
}获取文章内容
- 请求方法:POST
- 请求路径:
/geo/article/get
说明:
- 该接口用于获取单篇文章的标题和正文。
status=0表示仍在生成;status=1表示已生成、待发布。生成完成后,title与main_body可供自行发布。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| article_id | string | 文章ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| article_id | string | 文章ID |
| brand_id | string | 品牌ID |
| title | string | 文章标题 |
| main_body | string | 文章正文 |
| status | int | 文章状态:0-生成中,1-待发布,2-发布中,3-追踪中 |
| template_type | int | 文章模板类型 |
| source | int | 文章来源:1-平台创作,2-用户创作 |
| language | string | 文章语言,使用 BCP 47 语言码 |
| tags | object 数组 | 文章关联标签 |
| tags.tag_id | string | 标签ID |
| tags.tag_name | string | 标签名称 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"article_id": "article_test_001",
"brand_id": "brand_test_001",
"title": "测试品牌A的核心能力与适用场景",
"main_body": "这里是生成完成的文章正文。",
"status": 1,
"template_type": 1,
"source": 1,
"language": "zh-CN",
"tags": [
{
"tag_id": "tag_test_001",
"tag_name": "产品介绍"
}
]
}
}计量中心
说明:
- 以下接口对应控制台「计量中心」:订阅与额度、积分消耗、操作记录。
- 品牌消耗详情页复用积分消耗与记录接口,传入
brand_id即可按品牌查询。
用量类型 quota_type 说明:
| quota_type | 含义 |
|---|---|
| article_generate | AI文章生成 |
| article_publish | 辅助发文 |
| content_tracking | 内容追踪 |
| task_run | AI回答采集 |
| task_scoring | AI回答分析 |
| prompt_recommend | 用户提问智能推荐 |
| video_generate | AI视频生成 |
| max_brand | 品牌数量 |
| max_member | 团队成员数量 |
| max_prompt | 用户提问数量 |
| max_competitor | 竞品数量 |
实际返回的用量类型以当前套餐及已开通能力为准。
获取当前周期用量
- 请求方法:POST
- 请求路径:
/geo/billing/report/usage
说明:
- 该接口用于获取计量中心顶部的额度卡片:品牌、成员、提问、竞品等容量,以及当前周期用量。
- 不传
brand_id或传入0时查询团队范围;传入品牌ID时查询该品牌相关用量。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| brand_id | string | 品牌ID;不传或传 0 表示团队范围 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| plan | object | 当前周期用量 |
| plan.valid_from | int64 | 当前周期开始时间,Unix秒时间戳 |
| plan.valid_until | int64 | 当前周期结束时间,Unix秒时间戳 |
| plan.quotas | object 数组 | 各类用量汇总 |
| plan.quotas.quota_type | string | 用量类型 |
| plan.quotas.total_amount | int | 当前额度 |
| plan.quotas.used_amount | int | 当前已使用量 |
| plan.quotas.reset_time | int64 | 下次重置时间,Unix秒时间戳 |
| credit | object | 积分概况 |
| credit.team_id | string | 团队ID |
| credit.total_amount | int | 当前可用积分 |
| credit.used_amount | int | 已确认消耗的积分 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"plan": {
"valid_from": "1780243200",
"valid_until": "1782835199",
"quotas": [
{
"quota_type": "article_generate",
"total_amount": 800,
"used_amount": 126,
"reset_time": "1782835199"
},
{
"quota_type": "content_tracking",
"total_amount": 500,
"used_amount": 42,
"reset_time": "1782835199"
}
]
},
"credit": {
"team_id": "team_test_001",
"total_amount": 13300,
"used_amount": 1700
}
}
}获取订阅信息
- 请求方法:POST
- 请求路径:
/geo/billing/subscription/get
说明:
- 该接口用于获取计量中心顶部的套餐名称、订阅状态、计费周期和到期时间。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| plan_id | string | 套餐ID |
| plan_name | string | 套餐名称 |
| tier | string | 套餐等级 |
| status | int | 订阅状态:1-生效中,2-资源超限暂停,3-已过期,4-已取消 |
| started_at | int64 | 订阅开始时间,Unix秒时间戳 |
| expired_at | int64 | 订阅到期时间,Unix秒时间戳 |
| billing_period | int | 计费周期:1-月付,2-年付 |
| billing_amount | int | 计费时长,配合 billing_period 使用 |
| current_cycle_start | int64 | 当前计费周期开始时间,Unix秒时间戳 |
| current_cycle_end | int64 | 当前计费周期结束时间,Unix秒时间戳 |
| is_trial | bool | 是否试用:true-是,false-否 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"plan_id": "plan_test_001",
"plan_name": "专业版",
"tier": "pro",
"status": 1,
"started_at": "1780243200",
"expired_at": "1811779199",
"billing_period": 1,
"billing_amount": 1,
"current_cycle_start": "1780243200",
"current_cycle_end": "1782835199",
"is_trial": false
}
}获取积分状态
- 请求方法:POST
- 请求路径:
/geo/billing/credit/status
说明:
- 该接口用于获取计量中心积分卡的当前可用积分、已确认消耗及积分明细。
credit_details.status=5的积分会出现在明细中,但不计入顶层total_amount。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| team_id | string | 团队ID |
| total_amount | int | 当前可用积分总量 |
| used_amount | int | 已确认消耗的积分 |
| credit_details | object 数组 | 积分明细 |
| credit_details.credit_id | string | 积分记录ID |
| credit_details.source_type | int | 积分来源:1-套餐发放,2-充值,3-人工调整 |
| credit_details.total_amount | int | 该笔积分当前可用数量 |
| credit_details.used_amount | int | 该笔积分已确认消耗 |
| credit_details.expire_time | int64 | 过期时间,Unix秒时间戳 |
| credit_details.status | int | 积分状态:1-可用,2-已用完,3-已过期,4-已关闭,5-冻结中 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"team_id": "team_test_001",
"total_amount": 13290,
"used_amount": 1710,
"credit_details": [
{
"credit_id": "credit_test_001",
"source_type": 1,
"total_amount": 10000,
"used_amount": 1200,
"expire_time": "1811779200",
"status": 1
}
]
}
}获取积分消耗占比
- 请求方法:POST
- 请求路径:
/geo/billing/credit/usage
说明:
- 该接口用于获取计量中心「积分消耗」中的类型占比。
- 不传
start_unix、end_unix时,默认查询当前计费周期。 - 不传
brand_id或传入0时查询团队范围;传入品牌ID时查询该品牌相关消耗。 - 不传
quota_types或传空数组时,查询全部用量类型。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| brand_id | string | 品牌ID;不传或传 0 表示团队范围 | 否 |
| start_unix | int64 | 开始时间,Unix秒时间戳 | 否 |
| end_unix | int64 | 结束时间,Unix秒时间戳 | 否 |
| quota_types | string 数组 | 用量类型列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| period_start | int64 | 统计开始时间,Unix秒时间戳 |
| period_end | int64 | 统计结束时间,Unix秒时间戳 |
| total_credit_used | int | 积分消耗总量 |
| total_quota_amount | int | 资源消耗总量 |
| usages | object 数组 | 按用量类型汇总的消耗列表 |
| usages.quota_type | string | 用量类型 |
| usages.quota_amount | int | 该类型资源消耗量 |
| usages.credit_used | int | 该类型积分消耗量 |
| usages.percent | float | 占积分消耗总量的百分比 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"period_start": "1780243200",
"period_end": "1782835199",
"total_credit_used": 1100,
"total_quota_amount": 83,
"usages": [
{
"quota_type": "article_generate",
"quota_amount": 80,
"credit_used": 800,
"percent": 72.73
},
{
"quota_type": "video_generate",
"quota_amount": 3,
"credit_used": 300,
"percent": 27.27
}
]
}
}获取积分消耗趋势
- 请求方法:POST
- 请求路径:
/geo/billing/credit/trend
说明:
- 该接口用于获取计量中心「积分消耗」中的按日趋势。
- 不传
start_unix、end_unix时,默认查询当前计费周期。 - 不传
brand_id或传入0时查询团队范围;传入品牌ID时查询该品牌相关消耗。 - 不传
quota_types或传空数组时,查询全部用量类型。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| brand_id | string | 品牌ID;不传或传 0 表示团队范围 | 否 |
| start_unix | int64 | 开始时间,Unix秒时间戳 | 否 |
| end_unix | int64 | 结束时间,Unix秒时间戳 | 否 |
| quota_types | string 数组 | 用量类型列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| period_start | int64 | 统计开始时间,Unix秒时间戳 |
| period_end | int64 | 统计结束时间,Unix秒时间戳 |
| trends | object 数组 | 每日消耗趋势 |
| trends.date | string | 日期,格式:YYYY-MM-DD |
| trends.quota_type | string | 用量类型 |
| trends.quota_amount | int | 当日资源消耗量 |
| trends.credit_used | int | 当日积分消耗量 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"period_start": "1780243200",
"period_end": "1782835199",
"trends": [
{
"date": "2026-08-30",
"quota_type": "article_generate",
"quota_amount": 5,
"credit_used": 50
}
]
}
}获取品牌积分消耗排行
- 请求方法:POST
- 请求路径:
/geo/billing/credit/rank
说明:
- 该接口用于获取计量中心积分卡「品牌消耗」下拉中的品牌排行。按消耗量从高到低返回,仅统计有品牌归属的消耗记录。
- 不传
start_unix、end_unix时,默认查询当前计费周期。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| start_unix | int64 | 开始时间,Unix秒时间戳 | 否 |
| end_unix | int64 | 结束时间,Unix秒时间戳 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| brand_id | string | 品牌ID |
| brand_name | string | 品牌名称 |
| credit_used | int | 积分消耗量 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"brand_id": "brand_test_001",
"brand_name": "测试品牌A",
"credit_used": 1200
},
{
"brand_id": "brand_test_002",
"brand_name": "测试品牌B",
"credit_used": 860
}
]
}获取积分流水
- 请求方法:POST
- 请求路径:
/geo/billing/credit/bills
说明:
- 该接口用于获取计量中心「操作记录」中的积分流水。
- 不传
start_time、end_time时,默认查询当前计费周期。 - 不传
brand_id或传入0时查询团队范围;传入品牌ID时查询该品牌相关流水。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| brand_id | string | 品牌ID;不传或传 0 表示团队范围 | 否 |
| page | int | 页码;不传默认 1 | 否 |
| page_size | int | 每页数量 | 否 |
| start_time | int64 | 开始时间,Unix秒时间戳 | 否 |
| end_time | int64 | 结束时间,Unix秒时间戳 | 否 |
| keyword | string | 按操作人或事件名称搜索 | 否 |
| status | int | 流水状态:0-不筛选,1-冻结中,2-已确认 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| bills | object 数组 | 积分流水列表 |
| bills.bill_id | string | 流水ID |
| bills.team_id | string | 团队ID |
| bills.bill_type | string | 事件类型展示文案 |
| bills.credit_change | int | 积分变动值 |
| bills.is_pending | bool | 是否冻结中:true-冻结中,false-已确认 |
| bills.created_time | int64 | 创建时间,Unix秒时间戳 |
| bills.operator_name | string | 操作人名称 |
| bills.brand_name | string | 品牌名称 |
| total | int | 流水总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"bills": [
{
"bill_id": "bill_test_001",
"team_id": "team_test_001",
"bill_type": "文章生成",
"credit_change": -10,
"is_pending": false,
"created_time": "1780012800",
"operator_name": "test_user",
"brand_name": "测试品牌A"
}
],
"total": 1
}
}获取订阅日志
- 请求方法:POST
- 请求路径:
/geo/billing/logs/list
说明:
- 该接口用于获取计量中心「操作记录」中的订阅日志。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| page | int | 页码;不传默认 1 | 否 |
| page_size | int | 每页数量 | 否 |
| keyword | string | 按操作人或事件名称搜索 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| list | object 数组 | 订阅日志列表 |
| list.log_id | string | 日志ID |
| list.action | string | 事件标识 |
| list.action_text | string | 事件名称 |
| list.message | string | 事件说明 |
| list.operator_name | string | 操作人名称 |
| list.created_at | int64 | 创建时间,Unix秒时间戳 |
| total | int | 日志总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"list": [
{
"log_id": "log_test_001",
"action": "purchase",
"action_text": "分配套餐",
"message": "分配了专业版,有效期 30 天",
"operator_name": "test_user",
"created_at": "1780012800"
}
],
"total": 1
}
}获取配额记录
- 请求方法:POST
- 请求路径:
/geo/billing/quota/override/list
说明:
- 该接口用于获取计量中心「操作记录」中的配额记录。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
| page | int | 页码;不传默认 1 | 否 |
| page_size | int | 每页数量 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| list | object 数组 | 配额记录列表 |
| list.quota_type | string | 用量类型 |
| list.quota_limit | int | 调整后的额度 |
| list.reason | string | 调整原因 |
| list.created_at | int64 | 创建时间,Unix秒时间戳 |
| list.is_effective | bool | 当前是否生效:true-已生效,false-未生效 |
| total | int | 记录总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"list": [
{
"quota_type": "max_brand",
"quota_limit": 5,
"reason": "扩容品牌数量",
"created_at": "1780012800",
"is_effective": true
}
],
"total": 1
}
}概览页数据
说明:
- 以下接口对应控制台品牌首页「概览」:顶部指标卡、品牌趋势、竞品对比、分组明细、引用域名排行、引用文章排行。
- 筛选条件与页面顶部一致:时间范围、大模型、用户提问分类、提问标签。未传
platforms、title_ids、tag_ids时表示不限制。 - 带
fluctuation的指标中,value为当前值,fluctuation为相对上一同等长度周期的变化值。 - 品牌提及率为百分比;平均排名仅统计已提及品牌的回答,数值越小表示排名越靠前。
- 用户提问分类ID可通过「获取用户提问分类列表」取得;竞品ID可通过「获取竞品列表」取得。
获取概览指标
- 请求方法:POST
- 请求路径:
/geo/base/dashboard
说明:
- 该接口用于获取首页顶部的品牌提及率、平均排名、曝光效果分数。
brand_id、begin_date、end_date必填。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| exposure.value | float | 品牌提及率 |
| exposure.fluctuation | float | 品牌提及率变化值 |
| avg_rank.value | float | 平均排名 |
| avg_rank.fluctuation | float | 平均排名变化值 |
| score.value | float | 曝光效果分数 |
| score.fluctuation | float | 曝光效果分数变化值 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"exposure": {
"value": 8.5,
"fluctuation": -0.2
},
"avg_rank": {
"value": 5.2,
"fluctuation": 2.62
},
"score": {
"value": 6,
"fluctuation": -1.1
}
}
}获取监控用户提问
- 请求方法:POST
- 请求路径:
/geo/prompt/trends
说明:
- 该接口用于获取首页顶部的监控用户提问数量、变化值,以及按日变化趋势。
brand_id、begin_date、end_date必填。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| prompt_count | int | 当前监控用户提问数 |
| fluctuation | int | 监控用户提问数变化值 |
| prompt_trends | object 数组 | 按日变化趋势 |
| prompt_trends.date | string | 日期,格式:YYYY-MM-DD |
| prompt_trends.prompt_count | int | 当日监控用户提问数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"prompt_count": 46,
"fluctuation": 2,
"prompt_trends": [
{
"date": "2026-08-25",
"prompt_count": 44
},
{
"date": "2026-08-31",
"prompt_count": 46
}
]
}
}获取品牌提及率趋势
- 请求方法:POST
- 请求路径:
/geo/exposure/trends
说明:
- 该接口用于获取首页「品牌趋势」中的品牌提及率、平均排名按日数据,以及已选竞品的同期数据。
brand_id、begin_date、end_date必填。- 未传
competitor_ids时,仅返回本品牌趋势。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| competitor_ids | string 数组 | 竞品ID列表 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| brand_statistics | object 数组 | 本品牌按日统计 |
| brand_statistics.date | string | 日期,格式:YYYY-MM-DD |
| brand_statistics.name | string | 品牌名称 |
| brand_statistics.exposure | float | 品牌提及率 |
| brand_statistics.avg_rank | float | 平均排名 |
| brand_statistics.task_count | int | 当日监测回答数 |
| competitor_statistics | object 数组 | 竞品按日统计 |
| competitor_statistics.competitor_id | string | 竞品ID |
| competitor_statistics.name | string | 竞品名称 |
| competitor_statistics.statistics | object 数组 | 该竞品按日统计 |
| competitor_statistics.statistics.date | string | 日期,格式:YYYY-MM-DD |
| competitor_statistics.statistics.exposure | float | 竞品提及率 |
| competitor_statistics.statistics.avg_rank | float | 竞品平均排名 |
| competitor_statistics.statistics.task_count | int | 当日监测回答数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"brand_statistics": [
{
"date": "2026-08-25",
"name": "测试品牌A",
"exposure": 8.7,
"avg_rank": 5.1,
"task_count": 46
},
{
"date": "2026-08-31",
"name": "测试品牌A",
"exposure": 8.5,
"avg_rank": 5.2,
"task_count": 46
}
],
"competitor_statistics": [
{
"competitor_id": "competitor_test_001",
"name": "测试竞品A",
"statistics": [
{
"date": "2026-08-25",
"exposure": 2.1,
"avg_rank": 7.4,
"task_count": 46
},
{
"date": "2026-08-31",
"exposure": 1.98,
"avg_rank": 7.6,
"task_count": 46
}
]
}
]
}
}获取曝光效果分数趋势
- 请求方法:POST
- 请求路径:
/geo/score/trends
说明:
- 该接口用于获取首页「品牌趋势」切换为曝光效果分数时的按日数据,以及已选竞品的同期数据。
brand_id、begin_date、end_date必填。- 未传
competitor_ids时,仅返回本品牌趋势。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| competitor_ids | string 数组 | 竞品ID列表 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| brand_statistics | object 数组 | 本品牌按日统计 |
| brand_statistics.date | string | 日期,格式:YYYY-MM-DD |
| brand_statistics.name | string | 品牌名称 |
| brand_statistics.score | float | 曝光效果分数 |
| brand_statistics.task_count | int | 当日监测回答数 |
| competitor_statistics | object 数组 | 竞品按日统计 |
| competitor_statistics.competitor_id | string | 竞品ID |
| competitor_statistics.name | string | 竞品名称 |
| competitor_statistics.statistics | object 数组 | 该竞品按日统计 |
| competitor_statistics.statistics.date | string | 日期,格式:YYYY-MM-DD |
| competitor_statistics.statistics.score | float | 竞品曝光效果分数 |
| competitor_statistics.statistics.task_count | int | 当日监测回答数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"brand_statistics": [
{
"date": "2026-08-25",
"name": "测试品牌A",
"score": 7.1,
"task_count": 46
},
{
"date": "2026-08-31",
"name": "测试品牌A",
"score": 6,
"task_count": 46
}
],
"competitor_statistics": [
{
"competitor_id": "competitor_test_001",
"name": "测试竞品A",
"statistics": [
{
"date": "2026-08-25",
"score": 3.2,
"task_count": 46
},
{
"date": "2026-08-31",
"score": 2.8,
"task_count": 46
}
]
}
]
}
}获取品牌与竞品提及率对比
- 请求方法:POST
- 请求路径:
/geo/exposure/rank
说明:
- 该接口用于获取首页「竞品对比」中的品牌提及率、平均排名对比结果。
brand_id、begin_date、end_date必填。competitor_id为0表示当前品牌,其余为竞品。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| competitor_ids | string 数组 | 竞品ID列表;不传时返回本品牌及全部竞品 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| competitor_id | string | 对比对象ID;0 表示当前品牌 |
| competitor_name | string | 对比对象名称 |
| exposure | float | 品牌提及率 |
| fluctuation | float | 品牌提及率变化值 |
| avg_rank.value | float | 平均排名 |
| avg_rank.fluctuation | float | 平均排名变化值 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"competitor_id": "0",
"competitor_name": "测试品牌A",
"exposure": 8.5,
"fluctuation": -0.2,
"avg_rank": {
"value": 5.2,
"fluctuation": 2.62
}
},
{
"competitor_id": "competitor_test_001",
"competitor_name": "测试竞品A",
"exposure": 1.98,
"fluctuation": 0.1,
"avg_rank": {
"value": 7.6,
"fluctuation": 0.2
}
}
]
}获取品牌与竞品曝光效果分数对比
- 请求方法:POST
- 请求路径:
/geo/score/rank
说明:
- 该接口用于获取首页「竞品对比」切换为曝光效果分数时的对比结果。
brand_id、begin_date、end_date必填。competitor_id为0表示当前品牌,其余为竞品。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| competitor_ids | string 数组 | 竞品ID列表;不传时返回本品牌及全部竞品 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| competitor_id | string | 对比对象ID;0 表示当前品牌 |
| competitor_name | string | 对比对象名称 |
| score | float | 曝光效果分数 |
| fluctuation | float | 曝光效果分数变化值 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"competitor_id": "0",
"competitor_name": "测试品牌A",
"score": 6,
"fluctuation": -1.1
},
{
"competitor_id": "competitor_test_001",
"competitor_name": "测试竞品A",
"score": 2.8,
"fluctuation": -0.4
}
]
}获取分组指标
- 请求方法:POST
- 请求路径:
/geo/title/rank
说明:
- 该接口用于获取首页底部按用户提问分类汇总的提及率、平均排名、曝光效果分数。
brand_id、begin_date、end_date必填。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| exposure | object 数组 | 按分类汇总的品牌提及率 |
| exposure.title_id | string | 用户提问分类ID |
| exposure.title_name | string | 用户提问分类名称 |
| exposure.exposure | float | 品牌提及率 |
| exposure.fluctuation | float | 品牌提及率变化值 |
| avg_rank | object 数组 | 按分类汇总的平均排名 |
| avg_rank.title_id | string | 用户提问分类ID |
| avg_rank.title_name | string | 用户提问分类名称 |
| avg_rank.avg_rank | float | 平均排名 |
| avg_rank.fluctuation | float | 平均排名变化值 |
| score | object 数组 | 按分类汇总的曝光效果分数 |
| score.title_id | string | 用户提问分类ID |
| score.title_name | string | 用户提问分类名称 |
| score.score | float | 曝光效果分数 |
| score.fluctuation | float | 曝光效果分数变化值 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"exposure": [
{
"title_id": "title_test_001",
"title_name": "产品选型",
"exposure": 12.5,
"fluctuation": 1.2
}
],
"avg_rank": [
{
"title_id": "title_test_001",
"title_name": "产品选型",
"avg_rank": 4.8,
"fluctuation": -0.3
}
],
"score": [
{
"title_id": "title_test_001",
"title_name": "产品选型",
"score": 7,
"fluctuation": 0.5
}
]
}
}获取引用域名排行
- 请求方法:POST
- 请求路径:
/geo/domain/rank
说明:
- 该接口用于获取首页「引用域名排行榜」。按引用次数降序返回大模型回答中引用过的域名。
brand_id、begin_date、end_date必填。- 首页预览通常传
page=1、page_size=5;查看全部时按分页拉取,total为符合条件的域名总数。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| prompt_ids | string 数组 | 用户提问ID列表 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
| domain | string | 域名关键字,按域名模糊匹配 | 否 |
| page | int | 页码,从 1 开始 | 否 |
| page_size | int | 每页数量 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| reference_count | object 数组 | 引用域名列表,按引用次数降序 |
| reference_count.domain | string | 引用域名 |
| reference_count.count | int | 引用次数 |
| reference_count.is_own | bool | 是否为当前品牌官网域名 |
| total | int | 符合条件的域名总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"reference_count": [
{
"domain": "www.iesdouyin.com",
"count": 829,
"is_own": false
},
{
"domain": "blog.csdn.net",
"count": 252,
"is_own": false
}
],
"total": 347
}
}获取引用文章排行
- 请求方法:POST
- 请求路径:
/geo/article/rank
说明:
- 该接口用于获取首页「引用文章排行榜」。按引用次数降序返回大模型回答中引用过的文章。
brand_id、begin_date、end_date必填。- 首页预览通常传
page=1、page_size=5;查看全部时按分页拉取,total为符合条件的文章总数。 - 未纳入平台追踪的文章,
article_id为空,source为0。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| begin_date | string | 开始日期,格式:YYYY-MM-DD | 是 |
| end_date | string | 结束日期,格式:YYYY-MM-DD | 是 |
| title_ids | string 数组 | 用户提问分类ID列表 | 否 |
| prompt_ids | string 数组 | 用户提问ID列表 | 否 |
| platforms | string 数组 | 大模型平台筛选;空数组或不传表示全部平台 | 否 |
| tag_ids | string 数组 | 提问标签ID列表 | 否 |
| keyword | string | 关键字,按文章标题或域名模糊匹配 | 否 |
| page | int | 页码,从 1 开始 | 否 |
| page_size | int | 每页数量 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| reference_count | object 数组 | 引用文章列表,按引用次数降序 |
| reference_count.article | string | 文章标题 |
| reference_count.url | string | 文章链接 |
| reference_count.domain | string | 文章所属域名 |
| reference_count.count | int | 引用次数 |
| reference_count.source | int | 文章来源:0-未关联追踪文章,1-平台创作,2-用户创作,3-官网文章 |
| reference_count.article_id | string | 已追踪文章的文章ID;未追踪时为空 |
| total | int | 符合条件的文章总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"reference_count": [
{
"article": "谁说20岁的女生要用贵价护肤品",
"url": "https://www.iesdouyin.com/share/video/example",
"domain": "www.iesdouyin.com",
"count": 38,
"source": 0,
"article_id": ""
},
{
"article": "新手护肤入门看这一篇就够",
"url": "https://blog.csdn.net/example/article",
"domain": "blog.csdn.net",
"count": 38,
"source": 2,
"article_id": "article_test_001"
}
],
"total": 1052
}
}获取可筛选的大模型平台
- 请求方法:POST
- 请求路径:
/geo/team/get/filter_platforms
说明:
- 该接口用于获取当前团队可用的大模型平台列表,作为概览页
platforms入参使用。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| data | object | 平台映射;key 为平台展示名,value 为平台标识 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"DEEPSEEK": "deepseek",
"DOUBAO": "doubao",
"YUANBAO": "yuanbao",
"KIMI": "kimi",
"CHATGPT": "chatgpt"
}
}