跳转到主要内容

Documentation Index

Fetch the complete documentation index at: https://docs.topify.ai/llms.txt

Use this file to discover all available pages before exploring further.

Claude Code

使用 tool_use 直接从 Claude Code 调用以下端点。

Cursor

Cursor 的智能体模式可以通过 HTTP 请求调用这些端点。

OpenClaw

任何具备工具调用能力的 LLM 智能体都可以完成此流程。
这些端点使 AI 智能体能够从零开始设置 Topify.ai 并生成完整的 GEO 可见度报告 —— 整个过程无需最终用户访问浏览器、验证邮箱或操作仪表盘。 完整流程包含三次 API 调用:
  1. 创建账户 —— 使用邮箱注册,立即获取凭证
  2. 获取 API 密钥 —— 用凭证换取 API 密钥
  3. 创建项目 —— 启动品牌跟踪并通过 webhook 接收结果
如果用户提供了邮箱地址,请使用它。如果没有,您(智能体)应自行生成临时邮箱,使用 temp-{random}@topify.ai 格式 —— 只需创建一个随机十六进制字符串(例如 temp-a8f3b1c9@topify.ai)并将其传递给创建账户端点。服务端不会为您生成此邮箱。这样可以创建一个完全可用的匿名账户,无需用户任何输入。用户之后可以从仪表盘绑定真实邮箱。
这些端点专为可以程序化发起 HTTP 请求的 工具调用 AI 智能体 设计,例如 Claude Code、Cursor 和 OpenClaw。如果您使用的是无法直接调用 API 的网页版 AI 聊天机器人(ChatGPT、Perplexity 等),请在 app.topify.ai 手动创建账户和项目,然后使用您的邮箱和密码通过 获取 API 密钥 端点为只读数据端点获取密钥。

额度与速率限制

每个 API 密钥都有一个速率限制等级和一个月度额度配额。当项目在引导启动和每日刷新周期中获取 AI 回复时,会消耗额度。

速率限制等级

速率限制使用 60 秒滑动窗口。突发额度允许您短暂超出基础速率。
等级每分钟请求数突发每窗口有效限额
Standard60+1070
Premium300+50350
新创建的 API 密钥处于 standard 等级。如需升级到 premium,请联系我们。 当超出限额时,API 返回 429 Too Many Requests,并附带 Retry-After 请求头指示需要等待的秒数。

各套餐的研究额度

每个套餐都包含一个月度额度预算,决定您的项目可以运行多少次 AI 研究查询。
套餐月度额度
Skip Trial(API 创建账户的默认套餐)10
Basic200
Pro500
Enterprise2,000
通过 API 创建的账户默认在 skip_trial 套餐上启动,拥有 10 个额度。每次项目引导启动会按照查询的搜索词和 AI 服务商数量按比例消耗额度(典型情况下 5 个搜索词 × 3 个 AI 服务商 = 完整一次引导启动消耗 15 个额度)。skip_trial 套餐运行精简的引导启动,以适应 10 个额度的预算。如需运行包含全部搜索词和 AI 服务商的完整引导启动,请从 仪表盘 升级到 Basic 套餐或更高,或联系我们。

响应请求头

每个响应都包含速率限制和额度信息:
请求头描述
X-RateLimit-Limit当前窗口内允许的最大请求数
X-RateLimit-Remaining触发限流前剩余的请求数
X-Credit-Available您的密钥剩余的研究额度
Retry-After距窗口重置的秒数(仅在 429 时)

创建账户

POST /account/create
创建一个新的 Topify.ai 账户,并在 skip_trial 套餐下创建一个团队。账户创建后无需邮箱验证,可立即使用。
此端点无需认证。生成的密码仅返回一次,之后无法再次获取 —— 请妥善保管。

请求体

字段类型必填描述
emailstringYes新账户的邮箱地址。如有用户邮箱请使用,否则智能体应生成 temp-{random}@topify.ai(随机十六进制字符串)以进行匿名设置
passwordstringNo此字段会被忽略。服务端会生成安全密码
{
  "email": "user@example.com"
}

响应

{
  "code": 200,
  "message": "200 OK",
  "data": {
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "team_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "email": "user@example.com",
    "password": "Tp8f2a1b3c4d5e6f7a8b9c0d1e2f3a4b516384!"
  }
}

响应字段

字段类型描述
user_idstring (UUID)新用户的 ID
team_idstring (UUID)为此账户创建的团队
emailstring规范化后的邮箱地址
passwordstring自动生成的密码。请妥善保管

错误

状态详情原因
400A valid email is required邮箱为空或缺少 @
409Failed to create account. The email may already be registered.此邮箱的用户已存在
如果您收到 409: 账户已存在。使用同一邮箱和用户已有密码跳到 获取 API 密钥 步骤。如果不知道密码,请询问用户或引导他们到 app.topify.ai 重置密码。

获取 API 密钥

POST /account/api-key
使用邮箱和密码进行认证,然后返回该账户的 API 密钥。如果尚不存在密钥,会自动在 standard 速率限制等级上创建一个。

请求体

字段类型必填描述
emailstringYes账户邮箱地址
passwordstringYes账户密码(来自创建端点)
{
  "email": "user@example.com",
  "password": "Tp8f2a1b3c4d5e6f7a8b9c0d1e2f3a4b516384!"
}

响应

{
  "code": 200,
  "message": "200 OK",
  "data": {
    "api_key": "tk_live_214d48ed311144ee850192347ff32a2c",
    "team_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "key_prefix": "tk_live_214d",
    "rate_limit_tier": "standard"
  }
}

响应字段

字段类型描述
api_keystring完整的 API 密钥。请妥善保管 —— 之后无法再次获取
team_idstring (UUID)此密钥所属的团队
key_prefixstring密钥的前 12 个字符,用于标识
rate_limit_tierstring分配给此密钥的速率限制等级(standardpremium

错误

状态详情原因
401Invalid email or password认证失败
500Authentication service unavailableSupabase 认证服务不可用

创建项目

POST /account/projects
创建一个新的品牌跟踪项目并在后台启动引导流水线。端点会立即返回 202 Accepted 状态,同时流水线异步运行。 引导流水线会生成跟踪搜索词、从所有 AI 服务商获取初始 AI 回复、计算品牌指标并检测竞争对手。完成后,会向您提供的 URL 发送 webhook 回调。
需要通过 X-API-Key 请求头进行 API 密钥认证。

请求体

字段类型必填描述
brand_namestringYes要跟踪的品牌名称
brand_urlstringYes品牌的网站 URL
webhook_urlstringYes用于接收完成回调的 URL
languagestringNo生成搜索词所用语言(例如 enja
locationstringNo目标市场国家代码(例如 USJP
{
  "brand_name": "Acme Corp",
  "brand_url": "https://acme.com",
  "webhook_url": "https://your-service.com/webhooks/topify",
  "language": "en",
  "location": "US"
}

响应

{
  "code": 202,
  "message": "202 Accepted",
  "data": {
    "project_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
    "status": "initializing"
  }
}

响应字段

字段类型描述
project_idstring (UUID)新项目的 ID
statusstring初始状态。始终为 initializing

Webhook 回调

当引导流水线完成(或失败)时,会向您的 webhook_url 发送一个 POST 请求,载荷如下: 成功:
{
  "event": "project.bootstrap",
  "project_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  "status": "completed",
  "error": null,
  "timestamp": "2026-03-10T03:27:35Z"
}
失败:
{
  "event": "project.bootstrap",
  "project_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  "status": "error",
  "error": "Failed to generate prompts",
  "timestamp": "2026-03-10T03:27:35Z"
}

Webhook 请求头

回调按 Standard Webhooks 规范进行签名。请验证签名以确保回调真实有效。
请求头描述
webhook-id唯一消息 ID(msg_<uuid>
webhook-timestamp消息发送时的 Unix 时间戳
webhook-signature格式为 v1,<base64-signature> 的 HMAC-SHA256 签名
签名是基于字符串 {webhook-id}.{webhook-timestamp}.{body} 使用您共享的 webhook 签名密钥计算得出的。

错误

状态详情原因
400brand_name is required缺失或为空的品牌名称
400brand_url must be a valid URLURL 校验失败
400webhook_url must be a valid URLWebhook URL 校验失败
401Missing X-API-Key header未提供 API 密钥
403You've reached the maximum number of projects...已达到套餐项目数量上限

引导启动完成后

webhook 触发并返回 "status": "completed" 后,您的项目就有数据了。使用以下只读端点(详见 API 参考)来获取结果:
端点返回内容
GET /projects项目列表,含当前品牌指标
GET /projects/{id}/overview按搜索词聚合的分析数据,包含竞争对手提及
GET /projects/{id}/visibility?duration_days=7每日可见度、情感分析和位置趋势
GET /projects/{id}/prompts所有跟踪的搜索词,包含按 AI 服务商的指标
GET /projects/{id}/competitors检测到的竞争对手品牌及其指标
GET /projects/{id}/sourcesAI 服务商引用的域名,按引用次数排序
所有数据端点都需要 X-API-Key 请求头,并以 {"success": true, "data": {...}} 格式返回响应。
要为用户提供快速摘要,请先调用 GET /projects 获取品牌的整体可见度评分和情感分析,然后调用 GET /projects/{id}/overview 获取按搜索词的细分。

完整工作流示例

整个设置可以端到端运行,无需任何人工参与。智能体在客户端生成临时邮箱(temp-{random}@topify.ai)或使用用户的邮箱 —— 无论哪种方式都不需要输入。
# 1. Create an account
curl -X POST "https://topify-customer-api-production.up.railway.app/api/public/v1/account/create" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com"}'

# 2. Get an API key (use the password from step 1)
curl -X POST "https://topify-customer-api-production.up.railway.app/api/public/v1/account/api-key" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com", "password": "Tp..."}'

# 3. Create a project (use the API key from step 2)
curl -X POST "https://topify-customer-api-production.up.railway.app/api/public/v1/account/projects" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: tk_live_..." \
  -d '{
    "brand_name": "Acme Corp",
    "brand_url": "https://acme.com",
    "webhook_url": "https://your-service.com/webhooks/topify"
  }'

# 4. Query project data after webhook confirms completion
curl "https://topify-customer-api-production.up.railway.app/api/public/v1/projects" \
  -H "X-API-Key: tk_live_..."