JSONレスポンスを理解する
成功した単一のレスポンスにはdataとmetaが含まれます。次のデータセットの例は2026年10月1日にAPIキーで取得した実際のレスポンスで、アカウント残高のみを置き換えています。測定された製品の精度を示すものではなく、実際のリクエストでは異なる結果が返ることがあります。APIキーによるリクエストではaccess.mode: api_keyが返り、IPトライアル専用の上限フィールドはnullになります。IPトライアルによるリクエストでは、トライアルの上限とリセット時刻とともにip_trialが返ります。
{
"data": {
"input": {
"type": "name",
"value": "Hiroshi",
"country": "JP"
},
"name": "hiroshi",
"gender": "male",
"country": "JP",
"confidence": 0.9961046188091264,
"confidence_kind": "observed_frequency",
"sample_count": 1797,
"source": "dataset",
"result_status": "identified",
"reason": null,
"country_source": "dataset",
"match": {
"name": "hiroshi",
"method": "normalized",
"scope": "country",
"country": "JP"
}
},
"meta": {
"request_id": "a7b93719-5d6e-4150-8d5d-3b494120ffe2",
"duration_ms": 12,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}推定のレスポンスフィールド
| フィールド | 型 | nullの場合あり | 例 | 説明 |
|---|---|---|---|---|
data.input | object | いいえ | {"type":"name","value":"Hiroshi","country":"JP"} | 入力の種類、値、国。trueの場合はforceToGenderizeも含まれます。 |
data.name | string | はい | "hiroshi" | 一致した名、または抽出された名。該当がない場合はnull。 |
data.gender | string | はい | "male" | male、female、またはJSONのnull。推定であり、確認された個人の属性ではありません。 |
data.result_status | string | いいえ | "identified" | 性別が返された場合はidentified、それ以外はunknown。 |
data.reason | string | はい | null | identifiedの場合はnull。不明の理由:not_found、no_name_candidate、ambiguous、insufficient_evidence。 |
data.confidence | number | はい | 0.95 | 0–1のスコア、またはnull。性別がnullの場合、信頼度もnullです。 |
data.confidence_kind | string | はい | "observed_frequency" | observed_frequency:データセットで多数を占める性別の件数÷合計件数。model_reported:AIが報告したスコアで、較正済みの確率ではありません。取得できない場合はnull。 |
data.sample_count | integer | はい | 1200 | データセットのサンプル数、またはnull。AIがサンプル数を作り出すことはありません。 |
data.source | string | いいえ | "dataset" | dataset、ai、noneのいずれか。 |
data.country | string | はい | "JP" | datasetまたはai_associationによる国との関連付け、またはnull。国籍、居住地、民族を示すものではありません。 |
data.country_source | string | はい | "dataset" | 国との関連付けの出どころ:dataset、ai_association、またはnull。 |
data.match | object | いいえ | {"name":"hiroshi","method":"normalized","scope":"country","country":"JP"} | 一致したデータセットの名前、照合方法(normalized、token、substring、model_inference)、country/globalの範囲、一致した国。取得できない根拠はnullになります。 |
返される入力フィールド
| フィールド | 型 | nullの場合あり | 例 | 説明 |
|---|---|---|---|---|
data.input.type | string | いいえ | "name" | 入力の種類:name、email、username。 |
data.input.value | string | いいえ | "Hiroshi" | 送信された推定対象の値。 |
data.input.country | string | はい | "JP" | 送信された国のコンテキスト。省略した場合はnull。 |
data.input.forceToGenderize | boolean | いいえ | true | ニックネームモードが有効な場合にのみ含まれ、それ以外は省略されます。 |
データセットの照合フィールド
| フィールド | 型 | nullの場合あり | 例 | 説明 |
|---|---|---|---|---|
data.match.name | string | はい | "hiroshi" | 選ばれたデータセットの候補。データセット行が選ばれなかった場合はnull。 |
data.match.method | string | はい | "normalized" | normalized、token、substring、model_inferenceのいずれか。取得できない場合はnull。 |
data.match.scope | string | はい | "country" | データセットの検索ではcountryまたはglobal。AIの場合や根拠がない場合はnull。 |
data.match.country | string | はい | "JP" | 選ばれたデータセット行の国。グローバル行やAIの場合はnull。 |
アクセス、課金、リクエストのメタデータ
| フィールド | 型 | 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。 |
成功した不明な結果
HTTP 200は処理が完了したことを意味し、性別が返ることを保証するものではありません。JSONのnullは、male、female、空文字列、信頼度0に変換せず、そのまま保持してください。data.result_statusとdata.reasonは、HTTPエラーとは別に確認してください。
2026年10月1日に取得したこのデータセットのみの実際の例はsource: noneとreason: not_foundを返しますが、1クレジットを消費します。件数が同数のデータセット行では、sample_countを保ったままreason: ambiguousが返ることがあります。AIによる不明な結果ではsource: aiとreason: insufficient_evidenceが使われます。
{
"data": {
"input": {
"type": "name",
"value": "zzzxxyy",
"country": null
},
"name": null,
"gender": null,
"country": null,
"confidence": null,
"confidence_kind": null,
"sample_count": null,
"source": "none",
"result_status": "unknown",
"reason": "not_found",
"country_source": null,
"match": {
"name": null,
"method": null,
"scope": null,
"country": null
}
},
"meta": {
"request_id": "54fdcd4e-f8bc-4224-918f-3a5732e08b9c",
"duration_ms": 10,
"access": {
"mode": "api_key",
"reason": null
},
"usage": {
"charged_credits": 1,
"remaining_credits": 49999,
"billing_status": "confirmed",
"resets_at": null,
"limit": null,
"period_seconds": null
}
}
}信頼度と照合の根拠を解釈する
信頼度0.9は0–1の尺度での値です。observed_frequencyの場合は、多数を占める件数を選ばれたデータセットの合計件数で割った値であり、エンドツーエンドで測定した製品の精度ではありません。model_reportedのスコアはAIが提供するもので、データセットの頻度に対して較正されていません。
アプリケーションのしきい値は、独自の評価データとconfidence_kindを使って決めてください。データセットのスコアとAIのスコアを、同じものを測定しているかのように直接比較して順位付けしないでください。AIの結果ではデータセット行が選ばれていないため、match.name、match.scope、match.countryはnullで、match.methodはmodel_inferenceです。
フルネームの場合、データセットの結果は文字列全体ではなく構成要素の一部から得られることがあります。data.inputは送信された値を保持し、data.nameは返された名を、data.matchは候補と検索範囲を示します。
アプリケーションで次に何をするかを決める
まずリクエストのエラーと項目ごとのエラーを処理し、その後でresult_statusを確認してください。単一の推定ではdataを読み、バッチでは成功した各項目のdataに同じ判断を適用します。maleやfemaleのラベルを無理に付けず、不明な結果はアプリケーション内にそのまま残してください。
| 結果 | 意味 | 推奨される対応 |
|---|---|---|
| identified; gender: maleまたはfemale | データセットまたはAIの根拠に基づき、推定で性別が得られました。 | そのconfidence_kindについて評価した方針を適用し、sourceと照合の根拠を保持します。 |
| unknown; reason: not_found | 解析された候補に一致するデータセットのレコードが保存されていませんでした。 | genderはnullのままにします。AIオプションを変えて意図的に再リクエストすると、新たに課金される処理になります。 |
| unknown; reason: no_name_candidate | データセットの解析で、利用できる名前の候補が得られませんでした。 | nullを保持し、追加の推定を選ぶ前に入力の種類と値を確認します。 |
| unknown; reason: ambiguous | 選ばれたデータセット行では男性と女性の件数が同数です。sample_countは含まれることがあります。 | どちらかに自分で決めたり、nullの信頼度を0に変換したりしないでください。 |
| unknown; reason: insufficient_evidence | AIの処理は完了しましたが、性別を返すのに十分な根拠がありませんでした。 | 完了した不明な結果として扱い、プロバイダーの障害や自動再試行の対象とはみなしません。 |
| Problem Detailsまたは項目のerror | ai_upstream_errorやprediction_timeoutなどにより、実行に失敗しました。 | エラーコードとリクエストIDを保持し、課金を確認して、再試行のガイドに従います。 |
独自の評価に基づいてしきい値を選ぶ
推定を必ず正しくするような、共通の信頼度のしきい値はありません。利用目的に即した代表的なデータで、独立してラベル付けされた例を使い、observed_frequencyとmodel_reportedを別々に評価してください。データセットの頻度とAIが自己申告したスコアは、たとえ両方が0.9でも異なるシグナルです。方針がどれくらいの頻度で回答し、回答した推定がどれくらい正しいかを測定し、それ以外のケースは不明のまま残すか、人による確認に回してください。
例えば、result_statusがidentifiedでもconfidence_kindがmodel_reportedであれば、データセットのしきい値ではなく、評価済みのAI向けの方針を適用します。forceToGenderizeを使った場合、name: nullでnullでない性別が返るのは有効な結果です。実名を抽出しなくても、エイリアスから推定できるためです。推定が回答したかどうかは、nameだけでなくgenderとresult_statusで判断してください。これはあくまで推定であり、本人確認ではありません。