続行 → 概要

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 ヘッダー(推奨)
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つの入力形式、他のサービスが対応できないファイルを処理するバルクツール。

すべて表示
GET · POST 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
}
GET · POST 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"
}
GET · POST 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"
}
POST 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" }
  ]
}

結果は送信時の順序で返されます。クレジットは名前ごとに課金され、残高が不足している場合はリクエスト全体が処理前に拒否されるため、半処理のバッチは発生しません。

サマリーブロックはマッチ率が一目でわかるため、続行する前に入力をクリーニングする必要があるかどうかを判断できます。

GET 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 です。
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