エラーとHTTPステータスコード
アプリケーションエラーにはapplication/problem+json(RFC 9457)が使われます。処理の分岐には、人が読むためのdetailではなく、安定したcodeとactionを使ってください。検証エラーでは、errorsにJSON Pointerの位置が含まれます。サポートに問い合わせる際はrequest_idを添えてください。プロキシや通信の障害では異なるボディが返ることがあるため、JSONを解析する前にContent-Typeを確認してください。
次の合成された422の例は、課金前に検出されたメールアドレスの構文エラーを示しています。公開エラーカタログには、すべてのcode、ステータス、説明、推奨される対処が記載されています。
| HTTPステータス | 主な意味 | 次の対応 |
|---|---|---|
| 400 / 413 / 415 | JSONの形式が不正、ボディが大きすぎる、またはサポートされていないメディアタイプ。 | リクエストを修正します。 |
| 401 / 403 | アクセスの拒否、アカウントの制限、またはクレジット不足。 | codeを確認し、アクセス方法を修正するか、クレジットを追加するか、IPトライアルのリセットを待ちます。 |
| 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の試行を一意に識別するID。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の試行を一意に識別するID。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 | IPトライアルに切り替わった理由:api_key_missing、api_key_invalid、api_key_not_found。それ以外はnull。 |
meta.usage.charged_credits | integer | はい | 1 | 差し引かれた正味のクレジット。課金前、または全額の払い戻しが確認された後は0。課金が未確定の場合は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項目 |
| アカウントごとのレート | 1分あたり120リクエスト |
| IPアドレスごとのレート | 1分あたり600リクエスト |
| 同時実行される処理 | アカウントごとに2、サービス全体で16 |