REST API
在你自己的代码中发起扫描。该 API 面向 Pro 及以上套餐开放,使用 bearer 密钥认证,并以积分计费。
最后更新:2026 年 9 月 4 日
认证
在「设置 → API 密钥」中创建密钥。明文密钥只显示一次,之后无法找回;系统仅以可读形式保存它的前缀。每次请求都需将它作为 bearer 令牌发送。
curl https://api.namescope.dev/v1/usage \
-H "Authorization: Bearer ns_live_..."每个密钥都带有一组作用域。若请求需要该密钥不具备的作用域,会被拒绝并返回 403,因此你交给只读集成使用的密钥无法发起付费扫描。
| 作用域 | 授予的权限 |
|---|---|
| scans:write | POST /v1/scans —— 发起扫描,会消耗积分 |
| scans:read | GET /v1/scans、GET /v1/scans/{id}、GET /v1/usage |
| reference:read | /v1/ref/* 查询端点 |
积分与配额
每一次扫描都以积分计费,无论从这里还是网页应用发起。费用是所运行模块的总和:五个默认模块共 100 积分,少选一个即更便宜。套餐每月发放积分,未用完的可结转。
扣费发生在任何任务入队之前,因此无法付费的扫描永远不会运行,也不会留下任何记录。如果扣费后入队失败,积分会自动退回。
- 余额不足 → 429,并在 problem 响应体中说明缺口
- 套餐不含 API 访问权限 → 402,并附升级链接
- 工作区已关闭积分消费 → 403
发起扫描
POST /v1/scans 会将扫描入队并立即返回 202。扫描是异步的:响应携带的是 scanId,而不是结果。
curl -X POST https://api.namescope.dev/v1/scans \
-H "Authorization: Bearer ns_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "tion studios",
"regions": ["TR", "EM", "US"],
"niceClasses": [9, 41],
"tlds": ["com", "io"],
"modules": ["trademark", "domain", "social"]
}'{ "scanId": "scn_...", "totalJobs": 12, "creditsSpent": 100, "balance": 1900 }| 字段 | 是否必填 | 含义 |
|---|---|---|
| name | 是 | 要查询的品牌名称,2–64 个字符 |
| regions | 否 | 要检索的商标局。默认使用工作区的默认设置 |
| niceClasses | 否 | 商品/服务类别 1–45。将商标命中范围收窄到真正的冲突 |
| tlds | 否 | 域名后缀,不含前面的点 |
| modules | 否 | trademark、domain、social、dev、appstore |
| adapters | 否 | 按 id 限定为特定的来源适配器 |
| projectId | 否 | 将扫描归入某个已有项目 |
| options.alternatives | 否 | 同时生成备选名称并对其进行轻量扫描 |
| options.similarSearch | 否 | 对近似商标进行模糊检索(Pro 及以上) |
读取结果
轮询 GET /v1/scans/{id},直到 status 变为 completed 或 completed_partial。一次典型扫描在一分钟内完成;建议每秒轮询一次,并随着等待逐步拉长间隔,以免长时间扫描耗尽你的速率限额。
curl https://api.namescope.dev/v1/scans/scn_... \
-H "Authorization: Bearer ns_live_..."| status | 含义 |
|---|---|
| queued | 已受理,尚未联系任何来源 |
| running | 部分检查已完成;doneJobs / totalJobs 表示进度 |
| completed | 全部检查均已完成 |
| completed_partial | 已完成,但至少有一个来源无法核实 |
| failed | 扫描无法执行 |
checks 中的每一条都是一个来源针对一个目标给出的回答,包含各自的判定结果、读取时所用的 sourceUrl 以及 fetchedAt 时间戳。summary 对象在扫描结束后出现,携带评分、风险等级和商标统计。
| verdict | 含义 |
|---|---|
| available | 该来源显示此名称尚未被占用 |
| taken | 已被使用 —— 例如已注册的账号、可解析的域名 |
| conflict | 存在与所查类别重叠的有效商标 |
| risky | 已被使用,但是否会构成阻碍尚不确定 |
| unknown | 该来源无法核实 |
| error | 该来源请求失败;errorCode 说明原因 |
参考数据
四个查询端点说明了扫描请求可以包含哪些内容。它们需要 reference:read 作用域,且完全免费。
| 端点 | 返回内容 |
|---|---|
| GET /v1/ref/nice-classes | 尼斯分类的 45 个类别 |
| GET /v1/ref/regions | 扫描可检索的商标局 |
| GET /v1/ref/tlds | 按层级分组的域名后缀 |
| GET /v1/ref/adapters | 全部来源适配器及其所属模块 |
错误与速率限制
错误以 RFC 9457 problem 文档的形式返回,内容类型为 application/problem+json。type 字段标识失败类型,detail 进行说明,部分错误还会附带 upgradeUrl 等额外字段。
{
"type": "https://namescope.dev/errors/quota-exceeded",
"title": "Quota exceeded",
"status": 429,
"detail": "Not enough credits (balance 0, need 100). Top up or switch off a module to continue."
}| 状态码 | 触发情形 |
|---|---|
| 400 | 请求体未通过校验 |
| 401 | 密钥缺失、无效、已吊销或已过期 |
| 402 | 当前套餐不包含公开 API |
| 403 | 密钥缺少作用域,或积分消费已关闭 |
| 404 | 此工作区中不存在该扫描 |
| 429 | 超出速率限制或积分余额 |
速率限制按密钥在一分钟的滑动窗口内计数,并在每个响应中回报,因此你可以在被拒绝之前主动降速。
x-ratelimit-limit: 60
x-ratelimit-remaining: 58
x-ratelimit-reset: 41OpenAPI
完整的机器可读描述由 /v1/openapi.json 提供。它无需认证,因此你在拿到密钥之前就可以据此生成客户端。