错误与 HTTP 状态码
应用错误使用 application/problem+json(RFC 9457)。请根据稳定的 code 和 action 进行分支处理,而不是依据供人阅读的 detail。验证错误会在 errors 中包含 JSON Pointer 位置。联系支持团队时请附上 request_id。代理或传输故障可能返回不同的响应体,因此解析 JSON 之前请先检查 Content-Type。
下面的合成 422 示例展示了计费前出现的电子邮箱地址语法错误。公开的错误目录列出了每个 code、状态、说明和建议的操作。
| HTTP 状态 | 常见含义 | 下一步 |
|---|---|---|
| 400 / 413 / 415 | JSON 格式错误、请求体过大或媒体类型不受支持。 | 修正请求。 |
| 401 / 403 | 访问被拒绝、账户受限或积分不足。 | 检查 code;修正访问方式,或补充积分 / 等待试用重置。 |
| 422 | 输入无效或选项互不兼容。 | 修正 errors 中指出的字段。 |
| 404 / 405 | 未知路由或不支持的 HTTP 方法。 | 检查端点路径和 Allow 响应头。 |
| 429 | 速率或并发限制。 | 等待 Retry-After 指定的时间后再发送下一个请求。 |
| 500 | 服务器意外故障。 | 附上 request_id 联系支持团队;重试前请检查计费。 |
| 502 / 503 / 504 | 服务提供方、依赖服务、计费或超时故障。 | 重试前检查 code、action 和 billing_status。 |
{
"type": "urn:genderapi:problem:validation_error",
"title": "validation error",
"status": 422,
"detail": "A valid email address is required.",
"instance": "urn:uuid:11111111-1111-4111-8111-111111111111",
"code": "validation_error",
"request_id": "11111111-1111-4111-8111-111111111111",
"documentation": "https://api.genderapi.io/api/v2/errors",
"action": "correct_request",
"errors": [
{
"pointer": "/value",
"message": "Invalid email address."
}
],
"meta": {
"request_id": "11111111-1111-4111-8111-111111111111",
"duration_ms": 12,
"access": {
"mode": "ip_trial",
"reason": "api_key_missing"
},
"usage": {
"charged_credits": 0,
"remaining_credits": null,
"billing_status": "not_charged",
"resets_at": "2026-09-26T12:00:00.000Z",
"limit": 10,
"period_seconds": 86400
}
}
}错误响应字段
| 字段 | 类型 | 可为 null | 示例 | 说明 |
|---|---|---|---|---|
type | string | 否 | "urn:genderapi:problem:validation_error" | 标识问题类型的 URI。 |
title | string | 否 | "validation error" | 供人阅读的简短错误标题。 |
status | integer | 否 | 422 | HTTP 状态码。 |
detail | string | 否 | "The request does not match the schema." | 对本次具体失败的说明。 |
instance | string | 否 | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | 失败请求的标识符。 |
code | string | 否 | "validation_error" | 稳定的机器可读错误代码。 |
request_id | string | 否 | "550e8400-e29b-41d4-a716-446655440000" | 本次 HTTP 尝试的唯一标识符,也会通过 X-Request-ID 返回。 |
documentation | string | 否 | "https://api.genderapi.io/api/v2/errors" | 错误目录的链接(如有)。 |
action | string | 否 | "correct_request" | 建议的恢复操作;错误目录中有定义时提供。 |
errors | array<object> | 否 | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | 验证问题(如有)。每项包含 pointer 和 message。 |
errors[].pointer | string | 否 | "/value" | 指向无效输入的 JSON Pointer。 |
errors[].message | string | 否 | "must NOT have fewer than 1 characters" | 对验证问题的说明。 |
访问、计费与请求元数据
| 字段 | 类型 | 可为 null | 示例 | 说明 |
|---|---|---|---|---|
meta.request_id | string | 否 | "550e8400-e29b-41d4-a716-446655440000" | 本次 HTTP 尝试的唯一标识符,也会通过 X-Request-ID 返回。 |
meta.duration_ms | integer | 否 | 42 | 请求处理时间(毫秒)。 |
meta.access.mode | string | 否 | "api_key" | api_key、ip_trial 或 unauthenticated。使用付费账户时,请确认值为 api_key。 |
meta.access.reason | string | 是 | null | 转为试用的原因:api_key_missing、api_key_invalid 或 api_key_not_found;其他情况为 null。 |
meta.usage.charged_credits | integer | 是 | 1 | 净扣除的积分。扣费前或全额退款确认后为零;计费未确认时为 null。 |
meta.usage.remaining_credits | integer | 是 | 99 | 操作完成时的余额。可能为负数;不可用或计费未确认时为 null。 |
meta.usage.billing_status | string | 否 | "confirmed" | not_charged、confirmed 或 unconfirmed。重试失败的预测前请检查此字段。 |
meta.usage.resets_at | string | 是 | "2026-09-27T12:00:00.000Z" | IP 试用的重置时间,UTC(ISO 8601);API 密钥账户或时间未知时为 null。 |
meta.usage.limit | integer | 是 | 10 | IP 试用额度;API 密钥账户为 null。 |
meta.usage.period_seconds | integer | 是 | 86400 | IP 试用周期(秒);API 密钥账户为 null。 |
重试与计费
每个预测请求都是一次新操作,再次发送相同的请求也是如此。每个请求都适用正常的积分规则。系统没有重复请求保护,因此在连接中断或结果未知时,请避免自动重试。
收到 429 响应时,请等待 Retry-After 指定的时间后再发送下一个请求。预测失败时,请先检查 code、action 和 meta.usage.billing_status。遇到 billing_reconciliation_required 或计费未确认时,请在重试前附上 request_id 联系支持团队。
部分成功的批量请求可能返回 HTTP 200。请逐条检查,并在计费确认后只重新提交失败的条目;重新提交成功的条目会再次计费。
X-Request-ID 和 meta.request_id 用于标识当前这次 HTTP 尝试。当前余额请通过 /usage 读取。HEAD 不会发起计费的预测。预测和账户响应不可缓存。
客户端应能兼容新增的响应字段,并在信息不可用时保留 null 值。
请求限制
请处理 HTTP 429 和 Retry-After,不要假定在这些上限以内请求总会被接受。服务容量是共享的。所列数值为当前的服务默认值。速率限制响应包含 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset(Unix 秒)。Retry-After 是以秒为单位的等待时间。这些响应头描述的是请求限制,而不是剩余积分。即使是免费的 /usage 读取,也会计入速率限制。
| 限制 | 值 |
|---|---|
| JSON 请求体 | 最大 64 KiB |
| 预测输入值 | 1–254 个字符 |
| 批量请求 | 使用 API 密钥时 50 个条目;使用 IP 试用时 10 个 |
| 账户速率 | 每分钟 120 个请求 |
| IP 速率 | 每分钟 600 个请求 |
| 并发操作 | 每个账户 2 个;整个服务共 16 个 |