REST API リファレンス
4つのエンドポイント、統一されたレスポンス形式。以下はすべてあなたのアカウントに対してライブです。
https://namegender.com/api
無料で登録
クイックスタート
ダッシュボードでキーを作成し、最初のリクエストを送信します。SDK は不要です。
curl "https://namegender.com/api?name=Ay%C5%9Fe&country=TR" \
-H "Authorization: Bearer YOUR_API_KEY"
<?php
$query = http_build_query(['name' => 'Ayşe', 'country' => 'TR']);
$ch = curl_init('https://namegender.com/api?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$result = json_decode(curl_exec($ch), true);
echo $result['gender']; // female
echo $result['probability']; // 100
const params = new URLSearchParams({ name: 'Ayşe', country: 'TR' });
const response = await fetch(`https://namegender.com/api?${params}`, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
const result = await response.json();
console.log(result.gender); // "female"
console.log(result.probability); // 100
import requests
response = requests.get(
"https://namegender.com/api",
params={"name": "Ayşe", "country": "TR"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
result = response.json()
print(result["gender"]) # female
print(result["probability"]) # 100
require "net/http"
require "json"
uri = URI("https://namegender.com/api")
uri.query = URI.encode_www_form(name: "Ayşe", country: "TR")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.parse(response.body)["gender"] # female
req, _ := http.NewRequest("GET", "https://namegender.com/api?name=Ay%C5%9Fe&country=TR", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var result struct {
Gender string `json:"gender"`
Probability int `json:"probability"`
}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result.Gender) // female
すべてのエンドポイントは同じ形式でレスポンスするため、パース処理を変更することなく入力を切り替えられます。
認証
API キーを3つの方法のいずれかで渡します。Authorization ヘッダーの使用を推奨します。クエリ文字列はサーバーログやブラウザ履歴に記録されます。
Authorization: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
ダッシュボードからキーを特定の IP アドレスに制限できます。
クライアントライブラリ
1つのAPI、4つの入力形式、他のサービスが対応できないファイルを処理するバルクツール。
すべて表示https://namegender.com/api
名前から性別判定
名前またはフルネームを受け入れます。敬称、ミドルネーム、苗字は検索前に削除されるため、「Dr. Ayşe Yılmaz」と「Ayşe」は同じ結果になります。
| パラメータ | 型 | 説明 |
|---|---|---|
name
必須
|
string
|
分類する名前。名または全名。 |
country
オプション
|
string
|
ISO 3166-1 alpha-2 国コード。Andrea(イタリアではオス、ドイツではメス)のように、地域によって性別が異なる名前の精度を向上させます。 |
askToAI
オプション
|
boolean
|
名前がデータベースにない場合、言語モデルにフォールバックします。追加で 1 クレジット消費します。 |
forceToGenderize
オプション
|
boolean
|
信頼度が閾値を下回っている場合でも、最も可能性の高い性別を返します。デフォルトはオフです。確実だと提示された推測は、回答がないことより悪い場合があるためです。 |
curl "https://namegender.com/api?name=Jordan" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"used_credits": 1,
"remaining_credits": 49999,
"expires": null,
"q": "Jordan",
"name": "Jordan",
"gender": "male",
"country": null,
"total_names": 62240,
"probability": 84,
"confidence": "high",
"duration": "1ms",
"source": "db",
"matched_as": null
}
https://namegender.com/api/email
メールから性別判定
メールアドレスのローカル部分から人物を抽出し、その名前を分類します。「ayse.yilmaz84@example.com」は Ayşe に解析されます。
| パラメータ | 型 | 説明 |
|---|---|---|
email
必須
|
string
|
メールアドレス。@ より前の部分のみが使用されます。 |
country
オプション
|
string
|
ISO 3166-1 alpha-2 国コード。Andrea(イタリアではオス、ドイツではメス)のように、地域によって性別が異なる名前の精度を向上させます。 |
askToAI
オプション
|
boolean
|
名前がデータベースにない場合、言語モデルにフォールバックします。追加で 1 クレジット消費します。 |
forceToGenderize はここでは利用できません。名前は内部的に抽出されるため、不確実な抽出に対して結果を強制すると 2 つの推測が複合されます。
curl "https://namegender.com/api/email?email=ayse.yilmaz84%40example.com" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"q": "ayse.yilmaz84@example.com",
"name": "Ayse",
"gender": "female",
"probability": 95,
"confidence": "unverified",
"total_names": 655,
"duration": "1ms",
"source": "db"
}
https://namegender.com/api/username
ユーザー名から性別判定
キャメルケース、スネークケース、末尾の数字、先頭の @ 記号に対応しています。「AyseYilmaz84」は Ayşe に解析されます。
| パラメータ | 型 | 説明 |
|---|---|---|
username
必須
|
string
|
ユーザー名またはハンドル。先頭の @ は無視されます。 |
country
オプション
|
string
|
ISO 3166-1 alpha-2 国コード。Andrea(イタリアではオス、ドイツではメス)のように、地域によって性別が異なる名前の精度を向上させます。 |
askToAI
オプション
|
boolean
|
名前がデータベースにない場合、言語モデルにフォールバックします。追加で 1 クレジット消費します。 |
forceToGenderize
オプション
|
boolean
|
信頼度が閾値を下回っている場合でも、最も可能性の高い性別を返します。デフォルトはオフです。確実だと提示された推測は、回答がないことより悪い場合があるためです。 |
curl "https://namegender.com/api/username?username=AyseYilmaz84" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"q": "AyseYilmaz84",
"name": "Ayse",
"gender": "female",
"probability": 95,
"confidence": "unverified",
"source": "db"
}
https://namegender.com/api/bulk
一括リクエスト
1 つのリクエストで最大 100 個の名前を送信します。ループの代わりにこれを使用してください。100 個の名前に対する 1 つの一括呼び出しは、単一の往復と単一の重複排除検索です。
| パラメータ | 型 | 説明 |
|---|---|---|
names
必須
|
string[]
|
名前の配列。最大 100 項目。 |
type
オプション
|
string
|
項目の内容:name、email、username。デフォルトは name。 |
country
オプション
|
string
|
リクエスト内のすべての項目に適用されます。 |
curl -X POST "https://namegender.com/api/bulk" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"names": ["Ayşe", "Mehmet", "Priya", "Wei"]}'
<?php
$ch = curl_init('https://namegender.com/api/bulk');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'names' => ['Ayşe', 'Mehmet', 'Priya', 'Wei'],
]),
]);
$data = json_decode(curl_exec($ch), true);
foreach ($data['results'] as $row) {
printf("%-8s %-7s %d%%\n", $row['q'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/bulk', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ names: ['Ayşe', 'Mehmet', 'Priya', 'Wei'] }),
});
const { results, summary } = await response.json();
console.log(summary.match_rate); // 100
results.forEach(r => console.log(r.q, r.gender, r.probability));
import requests
response = requests.post(
"https://namegender.com/api/bulk",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"names": ["Ayşe", "Mehmet", "Priya", "Wei"]},
)
data = response.json()
print(data["summary"]["match_rate"]) # 100
for row in data["results"]:
print(row["q"], row["gender"], row["probability"])
{
"status": true,
"used_credits": 4,
"remaining_credits": 49995,
"duration": "2ms",
"summary": {
"total": 4,
"identified": 4,
"unknown": 0,
"match_rate": 100
},
"results": [
{ "q": "Ayşe", "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
{ "q": "Mehmet", "gender": "male", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
{ "q": "Priya", "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
{ "q": "Wei", "gender": "male", "probability": 85, "total_names": 0, "confidence": "unverified", "source": "db" }
]
}
結果は送信時の順序で返されます。クレジットは名前ごとに課金され、残高が不足している場合はリクエスト全体が処理前に拒否されるため、半処理のバッチは発生しません。
サマリーブロックはマッチ率が一目でわかるため、続行する前に入力をクリーニングする必要があるかどうかを判断できます。
https://namegender.com/api/me
アカウント・クォータ
クレジットを消費することなく、残りの残高を確認します。
curl "https://namegender.com/api/me" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"status": true,
"email": "you@example.com",
"remaining_credits": 50099,
"purchased_credits": 50000,
"free_today": 99,
"free_daily_limit": 100,
"lifetime_requests": 12480,
"expires": null
}
非ラテン文字
名前を独自の文字で送信すると、参照データにブリッジします。追加パラメータはありません。文字を自動検出し、最適な方法を選択します。
アラビア語は短い母音を省略するため、محمد は "mhmd" に音訳されますが、データは "muhammed" を保持しています。代わりに子音パターンでマッチングを行い、女性形マーカー ة を保持するため、خالد (Khalid) と خالدة (Khalida) は区別されます。ペルシア語とウルドゥー語の名前もアラビア文字で対応します。
ピンイン に変換されます。中国語では姓が最初に来るため、李明 は姓 李 (Li) 、名前 明 (Ming) です。検索前に姓を削除します。1文字の名前は完全な名前として処理されます。
中国語と同じく姓が最初に来る処理を行い、一般的な韓国の姓を使用します。
ひらがなとカタカナは正しく読み取られます (ひろし → Hiroshi)。
ロシア語、ウクライナ語、ブルガリア語、セルビア語の名前は直接音訳されます。
ヒンディー語、マラーティー語、ネパール語の名前。内在する語尾の母音は処理されます (राहुल → Rahul、「Rahula」ではなく)。
日本の漢字と中国の文字は同じUnicode範囲を占めるため、文字だけからは区別できません。Han入力は中国語として読まれます。すでに正確に保持していない漢字の名前はその標準中国語の読み方が適用されますが、日本の名前にはふつう不正確です(健太は「jian tai」と読まれますが、実際の名前はKentaです)。保持している名前は完全一致し、正確です。確実にするため、日本の名前をひらがな・カタカナまたはラテン文字で送信してください。
タイ語はアラビア語のように母音を省略し、独自のマッチングレイヤーが必要です。まだ実装されていないため、null を返します。
# Arap yazısı — ünsüz iskeleti üzerinden eşleşir
curl "https://namegender.com/api?name=%D9%85%D8%AD%D9%85%D8%AF" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 100, "source": "script", "matched_as": "mahamad" }
# Çince — soyadı ayıklanır, verilen ad sorgulanır
curl "https://namegender.com/api?name=%E6%9D%8E%E6%98%8E" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 92, "source": "db" }
スクリプトをまったく変換できない場合、レスポンスはgender: null、source: noneになります。sourceフィールドを確認してください。scriptは音訳したこと、dbは送信した文字を直接照合したことを意味します。この2つは信頼度が異なり、どちらを得たかが表示されます。
レスポンスフィールド
すべてのエンドポイント共通です。
| フィールド | 型 | 説明 |
|---|---|---|
status
|
boolean
|
リクエストが失敗した場合は false。まずこれを確認してください。 |
used_credits
|
integer
|
このリクエストで消費されたクレジット。 |
remaining_credits
|
integer
|
このリクエスト後の残りクレジット。 |
expires
|
null
|
常に null。購入したクレジットに有効期限はありません。 |
q
|
string
|
入力値をそのまま返送します。 |
name
|
string
|
敬称と姓を削除した後の実際に検索した名前。 |
gender
|
string
|
男性、女性、または判定の確度が足りない場合は null。 |
country
|
string
|
統計の対象国、またはグローバル集計の場合は null。 |
total_names
|
integer
|
この回答の基となっている実在する人数。0 の場合は、ソースが度数ではなく比率を提供していることを意味し、回答が弱いわけではありません。 |
probability
|
integer
|
指定された性別の確度、50~100。性別が null の場合は 0。 |
duration
|
string
|
サーバー側の処理時間。 |
他のサービスにはない2つのフィールド
source は回答がどこから来たかを示します:リファレンスデータベース、ファジーマッチ、またはAIフォールバック。matched_as はファジーマッチが該当したエントリの名前を示します。この2つにより、単一の結果をそのまま信じるのではなく、信頼度を判断できます。
| フィールド | 型 | 説明 |
|---|---|---|
source
|
string
|
db、fuzzy、llm、または none。 |
confidence
|
string
|
サンプル証拠に基づいて、高、中、低、未検証、または不明。 |
matched_as
|
string
|
ファジーマッチの場合、該当したデータベースエントリ。それ以外は null。 |
エラーコード
エラーは JSON レスポンスボディで status: false と機械可読エラー文字列を返します。メッセージではなくエラーコードで判定してください:メッセージは翻訳される可能性があり変更されることがあります。
| コード | HTTP | 意味 |
|---|---|---|
missing_key |
401 | APIキーが見つかりません。"key" パラメータまたは Authorization: Bearer ヘッダーとして渡してください。 |
invalid_key |
401 | このAPIキーは有効ではありません。 |
revoked_key |
401 | このAPIキーは取り消されています。 |
blocked |
403 | このアカウントは停止されています。サポートにお問い合わせください。 |
email_not_verified |
403 | このアカウントのメールアドレスはまだ確認されていません。お送りした確認リンクを開くか、ダッシュボードから新しいリンクをリクエストしてください。 |
ip_not_allowed |
403 | このIPアドレスからのリクエストはこのキーでは許可されていません。 |
forbidden |
403 | このアクションを実行する権限がありません。 |
no_credits |
402 | クレジットが不足しています。追加購入するか、毎日のフリークォータがリセットされるまでお待ちください。 |
missing_input |
400 | "name" パラメータは必須です。 |
invalid_input |
422 | "name" パラメータが無効です。 |
too_many_items |
422 | 1つのリクエストで送信できる最大アイテム数は 100 です。 |
ai_consent_required |
422 | askToAI は名前をサードパーティの AI プロバイダーに送信しますが、このアカウントはまだ同意していません。「ai」フィールドでプロバイダーを確認してから、ダッシュボード設定で AI ルックアップを有効にしてください。 |
unknown_endpoint |
404 | このパスにはエンドポイントがありません。URLをAPI ドキュメントと照合してください。 |
method_not_allowed |
405 | このエンドポイントは DELETE リクエストを受け付けていません。 |
payload_too_large |
413 | リクエストボディが大きすぎます。 |
rate_limited |
429 | リクエストが多すぎます。少し間隔を空けてもう一度お試しください。 |
not_ready |
503 | 名前データベースが再構築中です。しばらくしてからお試しください。 |
server_error |
500 | サーバー側でエラーが発生しました。確認させていただきます。 |
{
"status": false,
"error": "no_credits",
"message": "You are out of credits. Buy more or wait for your daily free quota to reset.",
"request_id": "req_9c1f5b2a7e0d4a13",
"docs": "https://namegender.com/docs#error-no_credits"
}
レート制限
通常の使用ではレート制限に達しません。この上限は、流出したキーの悪用を防ぐために存在し、IP ではなく API キー単位で計測されるため、同一サーバー上の複数の顧客の割り当てが互いに消費されることはありません。
現在の制限:キーあたり 1 分間あたり 1,200 リクエスト。より多くが必要な場合は、お知らせいただければアカウントで引き上げます。
すべてのレスポンスに標準の X-RateLimit-Limit および X-RateLimit-Remaining ヘッダーが含まれます。
他のプロバイダーからの移行
当社のレスポンスフィールドとパラメータ名は一般的な規約に準拠しているため、通常は切り替えはベース URL を変更する1行だけです。
- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY
askToAI と forceToGenderize はこれが理由で元のスペルを保持しています。必要なフィールドが不足している場合は、お知らせください。追加します。
入力をエンコードする
名前にはスペースと非 ASCII 文字が含まれることがあります。クエリ文字列に入れる前に値を URL エンコードするか、JSON ボディで POST を使用してください。
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91