> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aibase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GEO 推广链接检测

> 检测指定推广网页在多个 AI 平台回答中的引用情况、同源引用率、来源文章与域名聚合表现。

GEO 推广链接检测用于检测指定网页链接（URL）在主流大模型（AI 平台）回答中的被引用情况。接口支持检测 URL 是否被 AI 平台作为可信来源链接推荐引用（同源引用）、引用的频次、来源文章及域名聚合分析。

<Info>
  **执行模式：ASYNC · 异步。**
  本接口采用异步任务模式：向统一入口提交请求后，平台返回 `requestId` 和 `taskId`；随后使用 `taskId` 轮询 [异步任务查询接口](/api-reference/tasks)（建议每隔 10 秒查询一次）获取最终结果。
</Info>

## 接口速查

| 项目   | 当前接口约定                                   |
| ---- | ---------------------------------------- |
| 接口状态 | 已上线                                      |
| 请求方式 | `POST`                                   |
| 请求地址 | `https://api.aibase.cn/v1/openapi/tasks` |
| 业务标识 | `geo.checker`                            |
| 执行模式 | **ASYNC · 异步**（需轮询结果）                    |
| 身份认证 | Header `AIBase-API-Key`                  |
| 请求格式 | `application/json`                       |

## 请求头

<ParamField header="AIBase-API-Key" type="string" required>
  AIBase 开放平台 API Key，例如 `AIBase_xxx`。请仅在服务端保存和使用。
</ParamField>

<ParamField header="Content-Type" type="string" required>
  固定为 `application/json`。
</ParamField>

<ParamField header="AIBase-Request-Id" type="string">
  可选的客户端请求追踪标识。
</ParamField>

## 请求体

<ParamField body="apiCode" type="string" required>
  固定为 `geo.checker`。
</ParamField>

<ParamField body="data" type="object" required>
  当前业务接口的参数对象。
</ParamField>

<ParamField body="data.url" type="string" required>
  待检测的目标网页 URL。必须是以 `http://` 或 `https://` 开头且能合法解析出 host 的完整链接。
</ParamField>

<ParamField body="data.title" type="string" required>
  检测标题或品牌词，不能为空。注意：不能是合法 URL 格式，也不能直接包含前面提交的 `url`，否则接口会返回参数校验错误（错误码 4002）。
</ParamField>

<ParamField body="data.platforms" type="string" required>
  参与检测的 AI 平台标识，为英文逗号分隔的字符串，例如 `"deepseek,aliyun"`。
</ParamField>

<ParamField body="data.questions" type="string">
  自定义检测问题列表。**注意参数类型为字符串**，内容必须为 JSON 字符串数组格式，例如 `"[\"示例品牌怎么样\",\"示例品牌官网是哪个\"]"`。不传时系统将自动生成对应问题。
</ParamField>

<RequestExample>
  ```bash cURL (第一步：提交任务) theme={null}
  curl --request POST \
    --url https://api.aibase.cn/v1/openapi/tasks \
    --header "AIBase-API-Key: ${AIBASE_API_KEY}" \
    --header 'Content-Type: application/json' \
    --data '{
      "apiCode": "geo.checker",
      "data": {
        "url": "https://www.example.com/product",
        "title": "示例品牌官网",
        "platforms": "deepseek,aliyun",
        "questions": "[\"示例品牌怎么样\",\"示例品牌官网是哪个\",\"示例品牌有什么优势\"]"
      }
    }'
  ```

  ```python Python (提交并轮询) theme={null}
  import os
  import time
  import requests

  api_key = os.environ["AIBASE_API_KEY"]
  headers = {
      "AIBase-API-Key": api_key,
      "Content-Type": "application/json",
  }

  # 1. 提交任务
  res = requests.post(
      "https://api.aibase.cn/v1/openapi/tasks",
      headers=headers,
      json={
          "apiCode": "geo.checker",
          "data": {
              "url": "https://www.example.com/product",
              "title": "示例品牌官网",
              "platforms": "deepseek,aliyun",
              "questions": '["示例品牌怎么样", "示例品牌优势有哪些"]',
          },
      },
      timeout=30,
  )
  res.raise_for_status()
  task_id = res.json()["data"]["taskId"]
  print("任务已提交，taskId:", task_id)

  # 2. 轮询获取结果
  while True:
      time.sleep(10)
      query_res = requests.get(
          f"https://api.aibase.cn/v1/openapi/tasks/{task_id}",
          headers={"AIBase-API-Key": api_key},
          timeout=30,
      )
      payload = query_res.json()
      status = payload["data"]["status"]
      if status == 2:
          print("检测成功！推广链接被引用结果:")
          print(payload["data"]["result"])
          break
      elif status != 1:
          raise RuntimeError(f"任务异常终止，status: {status}")
  ```
</RequestExample>

## 第一步：提交任务响应

提交后服务端即时返回任务标识：

<ResponseExample>
  ```json 200 (提交任务响应) theme={null}
  {
    "code": 200,
    "msg": "成功",
    "data": {
      "requestId": "599b2f8f39078d",
      "taskId": "task_d77143abc87642d4842ff588197faa89"
    },
    "timeStamp": 1789550182642
  }
  ```
</ResponseExample>

## 第二步：最终结果字段说明（GET 查询返回）

轮询任务查询接口，当 `status = 2` 时，`data.result` 包含以下推广链接检测结果结构：

<ResponseField name="baseData" type="object" required>
  任务基础信息对象。
</ResponseField>

<ResponseField name="baseData.id" type="string" required>
  检测记录 ID。
</ResponseField>

<ResponseField name="baseData.url" type="string" required>
  标准化后的检测目标 URL。
</ResponseField>

<ResponseField name="baseData.title" type="string" required>
  提交的检测标题或品牌词。
</ResponseField>

<ResponseField name="baseData.rank" type="integer">
  百度 PC 权重（BR 值），未获取到时为 `null`。
</ResponseField>

<ResponseField name="baseData.urlInclude" type="integer">
  百度收录状态：`1` 已收录、`2` 未收录、`null` 未获取到。
</ResponseField>

<ResponseField name="baseData.createTime" type="string" required>
  任务提交创建时间。
</ResponseField>

<ResponseField name="baseData.updateTime" type="string" required>
  最近更新时间。
</ResponseField>

<ResponseField name="baseData.status" type="integer" required>
  检测处理状态。
</ResponseField>

<ResponseField name="baseData.mentionNum" type="integer" required>
  该 URL 被各 AI 回答引用的总次数（同源引用总计）。
</ResponseField>

<ResponseField name="baseData.sourceNum" type="integer" required>
  引用来源出现的总次数。
</ResponseField>

<ResponseField name="baseData.questionNum" type="integer" required>
  参与检测的问题总数。
</ResponseField>

<ResponseField name="baseData.userId" type="string" required>
  用户 ID。
</ResponseField>

<ResponseField name="baseData.platforms" type="string" required>
  实际完成检测的平台列表（JSON 数组字符串，例如 `"[\"deepseek\",\"aliyun\"]"`）。
</ResponseField>

<ResponseField name="baseData.type" type="integer" required>
  问题生成类型：`2` 系统默认生成问题、`3` 用户自定义问题。
</ResponseField>

<ResponseField name="baseData.score" type="integer">
  综合评分（未产出时为 `null`）。
</ResponseField>

<ResponseField name="platformList" type="object[]" required>
  平台维度统计结果列表，按 `mentions` 倒序排列。
</ResponseField>

<ResponseField name="platformList[].platform" type="string" required>
  大模型平台编码。
</ResponseField>

<ResponseField name="platformList[].status" type="string" required>
  平台处理状态：`pending`、`completed`、`failed`。
</ResponseField>

<ResponseField name="platformList[].mentions" type="integer" required>
  该平台下命中同源引用的次数合计。
</ResponseField>

<ResponseField name="platformList[].source" type="integer" required>
  该平台下全部引用来源出现次数合计。
</ResponseField>

<ResponseField name="platformList[].questions" type="object[]" required>
  该平台下各问题的详细检测结果。
</ResponseField>

<ResponseField name="platformList[].questions[].question" type="string" required>
  检测问题文本。
</ResponseField>

<ResponseField name="platformList[].questions[].status" type="string" required>
  问题处理状态：`completed`、`processing`、`pending` 等。
</ResponseField>

<ResponseField name="platformList[].questions[].mentions" type="integer" required>
  该问题下同源来源的出现个数。
</ResponseField>

<ResponseField name="platformList[].questions[].source" type="integer" required>
  该问题下所有引用来源出现次数。
</ResponseField>

<ResponseField name="platformList[].questions[].sources" type="object[]" required>
  引用来源明细列表（仅在问题 `status = "completed"` 时返回；未完成时为空数组）。
</ResponseField>

<ResponseField name="platformList[].questions[].sources[].title" type="string" required>
  来源文章标题。
</ResponseField>

<ResponseField name="platformList[].questions[].sources[].url" type="string" required>
  来源文章网页链接。
</ResponseField>

<ResponseField name="platformList[].questions[].sources[].urlSame" type="boolean" required>
  是否为被检测 URL 自身（同源命中）：`true` 表示同源命中。
</ResponseField>

<ResponseField name="urlCountList" type="object[]" required>
  被引用来源文章聚合排行，按 `count` 倒序排列。
</ResponseField>

<ResponseField name="urlCountList[].title" type="string" required>
  来源文章标题。
</ResponseField>

<ResponseField name="urlCountList[].url" type="string" required>
  来源文章 URL。
</ResponseField>

<ResponseField name="urlCountList[].count" type="integer" required>
  被各大模型引用的总次数。
</ResponseField>

<ResponseField name="urlCountList[].websiteName" type="string">
  来源站点名称。
</ResponseField>

<ResponseField name="urlCountList[].websiteType" type="string">
  站点类型（如官网、权威媒体、百科等）。
</ResponseField>

<ResponseField name="domainCountList" type="object[]" required>
  被引用来源域名聚合排行，按 `count` 倒序排列。
</ResponseField>

<ResponseField name="domainCountList[].domain" type="string" required>
  来源域名。
</ResponseField>

<ResponseField name="domainCountList[].mainDomain" type="string" required>
  主域名。
</ResponseField>

<ResponseField name="domainCountList[].rank" type="integer">
  域名百度权重（BR 值），可能为 `null`。
</ResponseField>

<ResponseField name="domainCountList[].count" type="integer" required>
  该域名下所有来源页面被引用的总次数合计。
</ResponseField>

<ResponseExample>
  ```json 200 (最终成功 result 结构) theme={null}
  {
    "baseData": {
      "id": "123456789",
      "url": "https://www.example.com/product",
      "title": "示例品牌官网",
      "rank": null,
      "urlInclude": 1,
      "createTime": "2026-09-15 10:00:00",
      "updateTime": "2026-09-15 10:30:00",
      "status": 1,
      "mentionNum": 8,
      "sourceNum": 12,
      "questionNum": 10,
      "userId": "10001",
      "platforms": "[\"deepseek\",\"aliyun\"]",
      "type": 3,
      "score": 80
    },
    "platformList": [
      {
        "status": "completed",
        "platform": "deepseek",
        "mentions": 5,
        "source": 7,
        "questions": [
          {
            "question": "示例品牌怎么样",
            "status": "completed",
            "mentions": 2,
            "source": 3,
            "sources": [
              {
                "title": "示例品牌产品介绍",
                "url": "https://www.example.com/product",
                "urlSame": true
              }
            ]
          }
        ]
      }
    ],
    "urlCountList": [
      {
        "title": "示例品牌产品介绍",
        "url": "https://www.example.com/product",
        "count": 2,
        "websiteName": "示例品牌官网",
        "websiteType": "官网"
      }
    ],
    "domainCountList": [
      {
        "domain": "example.com",
        "mainDomain": "example.com",
        "rank": null,
        "count": 2
      }
    ]
  }
  ```
</ResponseExample>

## 接入注意事项

1. **固定业务标识**：`apiCode` 必须固定为 `geo.checker`。
2. **URL 与 Title 校验规则**：
   * `url` 必须是以 `http://` 或 `https://` 开头且能合法解析出 host 的完整链接。
   * `title` 不能为空，不能是合法 URL 格式，且**不能包含已提交的 url**，否则校验失败并返回错误码 4002。
3. **参数格式注意**：
   * `platforms` 为英文逗号分隔的字符串（如 `"deepseek,aliyun"`），非数组对象。
   * `questions` 为**字符串类型**，其内容必须是 JSON 格式的字符串数组（如 `"[\"问题1\",\"问题2\"]"`），不可直接传入原生 JSON Array。
4. **两阶段轮询**：接口为 ASYNC 异步模式，提交后请保存 `taskId`，并建议间隔 10 秒轮询任务查询接口。
5. **来源明细可用性**：`platformList[].questions[].sources` 仅在问题状态为 `completed` 时返回明细，其余状态下均为空数组。
