错误代码

结构化错误

每个 API 错误都会返回相同的 JSON 结构:一个 error 对象,包含稳定的 code、便于阅读的 message、type 与 HTTP status、表示是否可重试的 retryable、request_id 以及 docs_url。request_id 始终与 X-Request-Id 响应头一致,联系支持团队时请一并提供。

{
  "error": {
    "code": "INVALID_DOMAIN",
    "message": "域名格式无效",
    "suggestion": "请使用可注册的域名,例如 example.com",
    "type": "validation_error",
    "status": 400,
    "retryable": false,
    "request_id": "m5x7k2p-a9f3",
    "docs_url": "https://domscan.net/docs/check-availability"
  }
}

错误字段

字段说明
code稳定、可供程序识别的错误码。错误码不会被重命名,因此可以放心用于条件分支。
message便于阅读的错误说明。措辞可能会调整,请勿用程序解析。
type错误的大致类别,例如 validation_error、authentication_error 或 rate_limit_error。
statusHTTP 状态码,会在响应正文中重复出现,方便写入日志和队列。
retryable稍后重试同一请求是否有可能成功。
request_id唯一的请求标识符,与 X-Request-Id 响应头一致。
docs_url指向解释该错误的文档章节的链接。
suggestion可选的提示,说明如何修正请求。
details可选的结构化上下文,例如允许的方法或无效的参数。
retry_after可选,表示重试前需要等待的秒数,同时也会通过 Retry-After 响应头返回。

常见错误码

以下是大多数客户端需要处理的错误码。部分端点会返回遵循相同规则的更具体的错误码;包含状态码、类型和重试行为的完整列表见 OpenAPI 规范中的 x-domscan-error-codes。RATE_LIMIT_EXCEEDED 仍可作为 RATE_LIMITED 的别名使用。

错误码HTTP 状态码类型是否可重试说明
BAD_REQUEST 400 validation_error 否 参数缺失或无效
MISSING_PARAMETER 400 validation_error 否 缺少必需的参数
INVALID_PARAMETER 400 validation_error 否 参数的值无效
INVALID_JSON 400 validation_error 否 请求正文不是有效的 JSON
INVALID_DOMAIN 400 validation_error 否 域名格式无效
UNSUPPORTED_TLD 400 validation_error 否 不支持该 TLD
SUBDOMAIN_NOT_SUPPORTED 400 validation_error 否 此端点只接受可注册的域名,不接受子域名
VALIDATION_ERROR 422 validation_error 否 请求格式正确,但无法处理
AUTH_REQUIRED 401 authentication_error 否 未提供 API 密钥或会话
INVALID_API_KEY 401 authentication_error 否 API 密钥无效或已被撤销
INSUFFICIENT_CREDITS 402 credits_error 否 您的账户积分不足,无法完成此请求
FORBIDDEN 403 permission_error 否 您没有执行此操作的权限
NOT_FOUND 404 not_found_error 否 端点或资源不存在
METHOD_NOT_ALLOWED 405 request_error 否 该端点存在,但不接受此 HTTP 方法。Allow 响应头会列出支持的方法。
CONFLICT 409 conflict_error 否 请求与资源的当前状态冲突
IDEMPOTENCY_CONFLICT 409 conflict_error 否 该幂等键已被用于另一个不同的请求
IDEMPOTENCY_KEY_REUSED 422 validation_error 否 此 Idempotency-Key 在过去 24 小时内已用于另一个不同的请求。新请求请使用新的密钥。
IDEMPOTENCY_IN_PROGRESS 409 conflict_error 是 带有此 Idempotency-Key 的请求仍在运行。请稍后重试以获取其已存储的响应。
RATE_LIMITED 429 rate_limit_error 是 请求过多
INTERNAL 500 api_error 否 发生意外的服务器错误。如果问题持续出现,请附上请求 ID 联系支持团队。
UPSTREAM_ERROR 502 upstream_error 是 上游数据源返回了无法使用的响应
UPSTREAM_UNAVAILABLE 503 upstream_error 是 上游数据源暂时不可用
SERVICE_UNAVAILABLE 503 upstream_error 是 服务暂时不可用
TIMEOUT 504 timeout_error 是 上游数据源或注册机构未在规定时间内响应

重试指南

  • 仅当 retryable 为 true 时才重试。对于验证、身份认证和权限类错误,请先修正请求。
  • 如果响应中包含 retry_after 或 Retry-After 响应头,请至少等待相应的秒数后再进行下一次尝试。
  • 否则请使用带随机抖动的指数退避,例如依次等待 1、2、4 和 8 秒,并在尝试几次后停止。
  • 创建批量任务或作业时,请发送 Idempotency-Key 请求头,这样重试的请求就不会产生重复的作业。
  • 对于其他会扣除积分的 POST 请求,添加 Idempotency-Key 请求头后,重试将返回已存储的响应,而不会再次扣费。

兼容性

自 2026 年 10 月 10 日起,所有端点均采用此格式。部分端点原本就会返回的字段,例如 credits_remaining、purchase_url、login_url、success 或 meta,会在兼容期内继续保留,现有集成无需改动即可正常运行。新代码请从 error 对象中读取错误详情。