ดำเนินการต่อ → ภาพรวม

REST API Reference

เอนด์พอยต์เพียงไม่กี่ตัว รูปแบบการตอบสนองเดียว ทุกอย่างด้านล่างใช้งานสดกับบัญชีของคุณ

https://namegender.com/api/v1/gender สมัครฟรี
llms-full.txt

Markdown สำหรับผู้ช่วยเขียนโค้ด เช่น Claude Code, Cursor และ Copilot วางลงในแชต หรือส่งลิงก์ให้ผู้ช่วย

เริ่มต้นอย่างรวดเร็ว

สร้างคีย์ในแดชบอร์ดของคุณ แล้วส่งคำขอครั้งแรก ไม่ต้องใช้ SDK

curl "https://namegender.com/api/v1/gender?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/v1/gender?' . $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/v1/gender?${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/v1/gender",
    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/v1/gender")
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/v1/gender?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 key ของคุณไว้ใน header ใช้ Authorization: Bearer เป็นค่าเริ่มต้น หรือใช้ X-Api-Key เมื่อ HTTP client ของคุณสงวน header Authorization ไว้ใช้อย่างอื่น key ที่ใส่ไว้ใน URL จะถูกปฏิเสธ เพราะ URL ถูกคัดลอกไปอยู่ในบันทึกของพร็อกซี เครื่องมือวิเคราะห์ และประวัติเบราว์เซอร์

Authorization header (แนะนำ)
Authorization: Bearer ng_live_xxxxxxxxxxxx

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

X-Api-Key header
X-Api-Key: ng_live_xxxxxxxxxxxx

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

ห้ามเปิดเผย key ของคุณในโค้ดฝั่งไคลเอนต์ การเรียกจากเบราว์เซอร์หรือแอปบนมือถือควรผ่านแบ็คเอนด์ของคุณเอง

คุณสามารถจำกัด key ให้ใช้กับที่อยู่ IP ที่ระบุได้จากแดชบอร์ด

Client libraries

Wrapper บาง ๆ บน REST API ทำหน้าที่ส่งคีย์ของคุณ สร้างแต่ละคำขอ และแปลงการตอบกลับที่เป็นข้อผิดพลาดให้เป็น exception

JavaScript Source
npm install namegender

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

Command line Source
npm install -g namegender

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

composer require namegender/namegender

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

Python Source
pip install namegender-client

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

gem install namegender

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

<repository>
  <id>jitpack.io</id>
  <url>https://jitpack.io</url>
</repository>

<dependency>
  <groupId>com.github.anpekesen</groupId>
  <artifactId>namegender-java</artifactId>
  <version>v0.9.0</version>
</dependency>

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

C# / .NET Source
dotnet add package NameGender --version 0.6.0

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

go get github.com/anpekesen/namegender-go@v0.7.0

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

remotes::install_github('anpekesen/namegender-r', ref = 'v0.7.0')

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

PowerShell Source
Install-Module NameGender

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

cargo add namegender

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

คุณไม่จำเป็นต้องใช้ API มีเพียงไม่กี่ endpoint ที่เป็น JSON ธรรมดา ไลบรารีช่วยประหยัดเวลาได้แค่ครึ่งวัน ไม่ใช่ทั้งโครงการ หากไม่พบภาษาของคุณ REST reference มีตัวอย่างที่ copy-paste ได้

ดูทั้งหมด

ผู้ช่วย AI (MCP)

ใช้ NameGender จาก Claude, Cursor และไคลเอนต์อื่นใดที่รองรับ Model Context Protocol ถามผู้ช่วยเกี่ยวกับรายชื่อ แล้วผู้ช่วยจะเรียก API ให้คุณ พร้อมแสดงหลักฐานไว้ข้างคำตอบทุกข้อ

Claude Code
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

Claude Desktop, Cursor และไคลเอนต์อื่นๆ
{
    "mcpServers": {
        "namegender": {
            "command": "npx",
            "args": [
                "-y",
                "namegender-mcp"
            ],
            "env": {
                "NAMEGENDER_API_KEY": "ng_live_..."
            }
        }
    }
}

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

เพิ่มส่วนนี้ลงในไฟล์การตั้งค่า MCP ของไคลเอนต์ แล้วรีสตาร์ตไคลเอนต์

เครื่องมือ

gender_from_name
ระบุเพศจากชื่อต้นหรือชื่อเต็ม
gender_from_email
อ่านชื่อในที่อยู่อีเมล ที่อยู่ตามบทบาท เช่น info@ จะได้ผลลัพธ์เป็นไม่ทราบ
gender_from_username
อ่านชื่อในชื่อผู้ใช้หรือแฮนเดิล
gender_bulk
สูงสุด 100 ค่าในคำขอเดียว พร้อมสรุปอัตราการจับคู่
name_countries
ประเทศที่มีการบันทึกชื่อนั้น ไม่ได้เป็นการระบุถึงต้นกำเนิดของชื่อ
salutation
บรรทัดขึ้นต้นจดหมายในภาษาของจดหมาย ใช้รูปแบบกลางเมื่อไม่แน่ใจเรื่องเพศ
name_check
ชื่อที่พิมพ์ลงในฟอร์มดูเหมือนชื่อจริงหรือไม่ พร้อมเหตุผล ไม่เคยระบุว่าชื่อใดเป็นชื่อปลอม
age_from_name
อายุมัธยฐานและช่วงอายุของคนที่ใช้ชื่อต้นหนึ่งๆ ในสหรัฐอเมริกา ฝรั่งเศส และนอร์เวย์
account_status
เครดิตคงเหลือและโควตาฟรีของวันนี้

การค้นหาแต่ละครั้งใช้เครดิตจากบัญชีที่เป็นเจ้าของคีย์ เหมือนกับการเรียก API โดยตรงทุกประการ อยู่ในรีจิสทรี MCP อย่างเป็นทางการในชื่อ io.github.anpekesen/namegender แพ็กเกจ npm · Source

GET · POST https://namegender.com/api/v1/gender
Markdown

เพศจากชื่อ

ยอมรับชื่อจริงหรือชื่อเต็ม คำนำหน้า ชื่อกลาง และนามสกุลจะถูกลบออกก่อนการค้นหา ดังนั้น "Dr. Ayşe Yılmaz" และ "Ayşe" จึงให้คำตอบเดียวกัน

พารามิเตอร์ ประเภท คำอธิบาย
name
จำเป็น
string ชื่อที่จะจำแนก ชื่อจริงหรือชื่อเต็ม
country
ตัวเลือก
string รหัสประเทศ ISO 3166-1 alpha-2 ช่วยปรับปรุงความแม่นยำสำหรับชื่อที่เพศแตกต่างตามภูมิภาค เช่น Andrea (ชาย ในอิตาลี หญิง ในเยอรมนี)
locale
ตัวเลือก
string แท็กภาษา เช่น de-DE หรือ en_US เช่น ภาษาของเบราว์เซอร์ เมื่อไม่ได้ส่ง country ภูมิภาคของแท็กจะใช้เป็นประเทศ แท็กที่ไม่มีภูมิภาค (en, de) จะไม่กำหนดประเทศ
ip
ตัวเลือก
string ที่อยู่ IP ของผู้ใช้ปลายทาง จะใช้ประเทศของที่อยู่นี้เมื่อไม่ได้ส่งทั้ง country และ locale ที่มีภูมิภาค ไม่มีการจัดเก็บ IP geolocation by DB-IP (db-ip.com).
ai_fallback
ตัวเลือก
boolean หากชื่อไม่มีอยู่ในข้อมูลของเรา จะขอให้โมเดลภาษาประมาณค่าแทนการส่งคืน null ใช้งานได้เฉพาะเมื่อเปิด AI lookups ในการตั้งค่าแล้ว และใช้เครดิตเพิ่มอีกหนึ่งหน่วย
best_guess
ตัวเลือก
boolean ส่งคืนเพศที่มีสัดส่วนนำ แม้หลักฐานจะไม่ถึงเกณฑ์ความมั่นใจ ปิดไว้โดยค่าเริ่มต้น เพราะคำตอบที่ใกล้เคียง 50/50 แต่ดูแน่นอนสร้างความเสียหายมากกว่า null
curl "https://namegender.com/api/v1/gender?name=Jordan" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49999,
  "request_id": "req_4b7e0c2d9a1f6358",
  "query": "Jordan",
  "name": "Jordan",
  "first_name": "Jordan",
  "middle_name": null,
  "last_name": null,
  "name_type": "personal",
  "gender": "male",
  "country": null,
  "sample_size": 62240,
  "probability": 84,
  "took_ms": 1,
  "confidence": "high",
  "source": "db",
  "matched_as": null
}
GET · POST https://namegender.com/api/v1/gender/email
Markdown

เพศจากอีเมล

แยกบุคคลจากส่วนท้องถิ่นของที่อยู่ แล้วจำแนกนั้น "ayse.yilmaz84@example.com" ตรวจสอบเป็น Ayşe

พารามิเตอร์ ประเภท คำอธิบาย
email
จำเป็น
string ที่อยู่อีเมล ใช้เฉพาะส่วนก่อน @
country
ตัวเลือก
string รหัสประเทศ ISO 3166-1 alpha-2 ช่วยปรับปรุงความแม่นยำสำหรับชื่อที่เพศแตกต่างตามภูมิภาค เช่น Andrea (ชาย ในอิตาลี หญิง ในเยอรมนี)
locale
ตัวเลือก
string แท็กภาษา เช่น de-DE หรือ en_US เช่น ภาษาของเบราว์เซอร์ เมื่อไม่ได้ส่ง country ภูมิภาคของแท็กจะใช้เป็นประเทศ แท็กที่ไม่มีภูมิภาค (en, de) จะไม่กำหนดประเทศ
ip
ตัวเลือก
string ที่อยู่ IP ของผู้ใช้ปลายทาง จะใช้ประเทศของที่อยู่นี้เมื่อไม่ได้ส่งทั้ง country และ locale ที่มีภูมิภาค ไม่มีการจัดเก็บ IP geolocation by DB-IP (db-ip.com).
ai_fallback
ตัวเลือก
boolean หากชื่อไม่มีอยู่ในข้อมูลของเรา จะขอให้โมเดลภาษาประมาณค่าแทนการส่งคืน null ใช้งานได้เฉพาะเมื่อเปิด AI lookups ในการตั้งค่าแล้ว และใช้เครดิตเพิ่มอีกหนึ่งหน่วย
best_guess
ตัวเลือก
boolean ส่งคืนเพศที่มีสัดส่วนนำ แม้หลักฐานจะไม่ถึงเกณฑ์ความมั่นใจ ปิดไว้โดยค่าเริ่มต้น เพราะคำตอบที่ใกล้เคียง 50/50 แต่ดูแน่นอนสร้างความเสียหายมากกว่า null

best_guess ทำงานกับชื่อจริงที่อ่านได้จากที่อยู่ ไม่ใช่กับที่อยู่อีเมลเอง หากอ่านชื่อจริงไม่ได้ ก็ไม่มีอะไรให้บังคับ และ gender จะยังคงเป็น null โปรดจำไว้ว่าคำตอบที่ถูกบังคับในกรณีนี้ตั้งอยู่บนการแยกชื่อที่อาจผิดพลาดได้เอง

curl "https://namegender.com/api/v1/gender/email?email=ayse.yilmaz84%40example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49998,
  "query": "ayse.yilmaz84@example.com",
  "name": "Ayse",
  "gender": "female",
  "sample_size": 655,
  "probability": 100,
  "took_ms": 1,
  "confidence": "high",
  "source": "db"
}
GET · POST https://namegender.com/api/v1/gender/username
Markdown

เพศจากชื่อผู้ใช้

จัดการ camelCase, snake_case, ตัวเลขหลัง และเครื่องหมาย @ นำหน้า "AyseYilmaz84" ตรวจสอบเป็น Ayşe

พารามิเตอร์ ประเภท คำอธิบาย
username
จำเป็น
string ชื่อผู้ใช้หรือ handle เครื่องหมาย @ นำหน้าจะถูกละเว้น
country
ตัวเลือก
string รหัสประเทศ ISO 3166-1 alpha-2 ช่วยปรับปรุงความแม่นยำสำหรับชื่อที่เพศแตกต่างตามภูมิภาค เช่น Andrea (ชาย ในอิตาลี หญิง ในเยอรมนี)
locale
ตัวเลือก
string แท็กภาษา เช่น de-DE หรือ en_US เช่น ภาษาของเบราว์เซอร์ เมื่อไม่ได้ส่ง country ภูมิภาคของแท็กจะใช้เป็นประเทศ แท็กที่ไม่มีภูมิภาค (en, de) จะไม่กำหนดประเทศ
ip
ตัวเลือก
string ที่อยู่ IP ของผู้ใช้ปลายทาง จะใช้ประเทศของที่อยู่นี้เมื่อไม่ได้ส่งทั้ง country และ locale ที่มีภูมิภาค ไม่มีการจัดเก็บ IP geolocation by DB-IP (db-ip.com).
ai_fallback
ตัวเลือก
boolean หากชื่อไม่มีอยู่ในข้อมูลของเรา จะขอให้โมเดลภาษาประมาณค่าแทนการส่งคืน null ใช้งานได้เฉพาะเมื่อเปิด AI lookups ในการตั้งค่าแล้ว และใช้เครดิตเพิ่มอีกหนึ่งหน่วย
best_guess
ตัวเลือก
boolean ส่งคืนเพศที่มีสัดส่วนนำ แม้หลักฐานจะไม่ถึงเกณฑ์ความมั่นใจ ปิดไว้โดยค่าเริ่มต้น เพราะคำตอบที่ใกล้เคียง 50/50 แต่ดูแน่นอนสร้างความเสียหายมากกว่า null
curl "https://namegender.com/api/v1/gender/username?username=AyseYilmaz84" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49997,
  "query": "AyseYilmaz84",
  "name": "Ayse",
  "gender": "female",
  "sample_size": 655,
  "probability": 100,
  "took_ms": 1,
  "confidence": "high",
  "source": "db"
}
POST https://namegender.com/api/v1/gender/bulk
Markdown

คำขอจำนวนมาก

ส่งชื่อได้ถึง 100 ชื่อในคำขอเดียว ใช้แทนการวนซ้ำ: การเรียก bulk เดียวสำหรับ 100 ชื่อคือการเดินทางครั้งเดียวและการค้นหาแบบลบรายการซ้ำครั้งเดียว

พารามิเตอร์ ประเภท คำอธิบาย
names
จำเป็น
string[] อาร์เรย์ของชื่อ จำนวนรายการสูงสุด 100
type
ตัวเลือก
string รายการคืออะไร: ชื่อ อีเมล หรือชื่อผู้ใช้ ค่าเริ่มต้นคือชื่อ
country
ตัวเลือก
string ใช้กับทุกรายการในคำขอ
locale
ตัวเลือก
string แท็กภาษาที่ภูมิภาคจะใช้เป็นประเทศของทุกรายการเมื่อไม่ได้ส่ง country
ip
ตัวเลือก
string ที่อยู่ IP ของผู้ใช้ปลายทางซึ่งประเทศจะใช้กับทุกรายการเมื่อไม่ได้ส่งทั้ง country และ locale ที่มีภูมิภาค ไม่มีการจัดเก็บ IP geolocation by DB-IP (db-ip.com).
curl -X POST "https://namegender.com/api/v1/gender/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/v1/gender/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['query'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/v1/gender/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.query, r.gender, r.probability));
import requests

response = requests.post(
    "https://namegender.com/api/v1/gender/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["query"], row["gender"], row["probability"])
{
  "credits_charged": 4,
  "credits_remaining": 49995,
  "request_id": "req_71d0a9e3c5b24f86",
  "took_ms": 2,
  "summary": {
    "total": 4,
    "identified": 4,
    "unknown": 0,
    "match_rate": 100
  },
  "results": [
    { "query": "Ayşe",   "gender": "female", "probability": 100, "sample_size":  655, "confidence": "high", "source": "db" },
    { "query": "Mehmet", "gender": "male",   "probability": 100, "sample_size": 1130, "confidence": "high", "source": "db" },
    { "query": "Priya",  "gender": "female", "probability": 100, "sample_size": 2993, "confidence": "high", "source": "db" },
    { "query": "Wei",    "gender": "male",   "probability":  86, "sample_size":  136, "confidence": "high", "source": "db" }
  ]
}

ผลลัพธ์จะส่งกลับมาตามลำดับที่คุณส่ง เรียกเก็บเครดิตต่อชื่อ และคำขอทั้งหมดจะถูกปฏิเสธก่อนการทำงานหากยอดคงเหลือของคุณไม่เพียงพอ ดังนั้นคุณจึงไม่เคยได้รับแบตช์ที่ประมวลผลครึ่งหนึ่ง

บล็อกสรุปบอกคุณถึงอัตราการจับคู่ได้อย่างรวดเร็ว เพื่อให้คุณสามารถตัดสินใจได้ว่าอินพุตต้องการการทำความสะอาดก่อนที่คุณจะประมวลผลส่วนที่เหลือ

POST GET DELETE https://namegender.com/api/v1/batches
Markdown

งานไฟล์

อัปโหลดไฟล์ CSV หรือ XLSX ขนาดไม่เกิน 100 MB และไม่เกิน 1,000,000 แถว แล้วรับไฟล์คืนพร้อมคอลัมน์เพศที่เพิ่มในทุกแถว หนึ่งเครดิตต่อแถว เรียกเก็บเฉพาะเมื่องานเสร็จสมบูรณ์

  1. 1. POST /batches ส่งไฟล์และ name_column งานจะเข้าคิวทันที
  2. 2. GET /batches/{id} อ่านงานจนกว่า status จะเป็น completed หรือ failed โดย poll_after_seconds บอกว่าควรรอนานเท่าใดระหว่างการอ่านแต่ละครั้ง
  3. 3. GET /batches/{id}/result ดาวน์โหลดผลลัพธ์ ไฟล์จะกลับมาในรูปแบบเดียวกับที่อัปโหลด
พารามิเตอร์ ประเภท คำอธิบาย
file
จำเป็น
file CSV, TSV หรือ XLSX ที่มีแถวหัวตาราง
name_column
จำเป็น
string หัวคอลัมน์ที่มีชื่อ ต้องตรงตามที่อยู่ในไฟล์ จำเป็นต้องระบุ เว้นแต่ start=false
country_column
ตัวเลือก
string หัวคอลัมน์ที่มีรหัสประเทศในแต่ละแถว
country
ตัวเลือก
string ประเทศเริ่มต้นสำหรับแถวที่ไม่มีประเทศ
ai_fallback
ตัวเลือก
boolean ถามโมเดล AI สำหรับชื่อที่ไม่มีในชุดข้อมูล ต้องให้ความยินยอมด้าน AI ในการตั้งค่า
best_guess
ตัวเลือก
boolean คืนเพศที่มีแนวโน้มมากกว่าแม้หลักฐานจะอ่อน
delete_after_download
ตัวเลือก
boolean ผลลัพธ์ดาวน์โหลดได้ครั้งเดียว จากนั้นจะถูกลบ
start
ตัวเลือก
boolean false: อัปโหลดและตรวจสอบเท่านั้น ค่าเริ่มต้นคือ true
# 1. Upload and start
curl -X POST "https://namegender.com/api/v1/batches" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: 6f1c2e0a-customers-2026-09" \
  -F "file=@customers.csv" \
  -F "name_column=first_name" \
  -F "country_column=country"

# 2. Poll until status is completed or failed
curl "https://namegender.com/api/v1/batches/B-7K2M9QX4TA" \
  -H "Authorization: Bearer YOUR_API_KEY"

# 3. Download the result
curl "https://namegender.com/api/v1/batches/B-7K2M9QX4TA/result" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o customers-gender.csv
import { NameGender } from 'namegender';
import { openAsBlob } from 'node:fs';
import { writeFile } from 'node:fs/promises';

const client = new NameGender(process.env.NAMEGENDER_API_KEY);

const job = await client.batches.create(await openAsBlob('customers.csv'), {
  filename: 'customers.csv',
  name_column: 'first_name',
  country_column: 'country',
});

const done = await client.batches.wait(job.id);
if (done.status === 'failed') throw new Error(done.error.code);

const file = await client.batches.download(done.id);
await writeFile('customers-gender.csv', Buffer.from(await file.arrayBuffer()));
from namegender import NameGender

client = NameGender("YOUR_API_KEY")

job = client.batches.create("customers.csv", name_column="first_name", country_column="country")

done = client.batches.wait(job["id"])
if done["status"] == "failed":
    raise RuntimeError(done["error"]["code"])

client.batches.download(done["id"], "customers-gender.csv")
{
  "id": "B-7K2M9QX4TA",
  "status": "completed",
  "source": "api",
  "file": { "name": "customers.csv", "format": "csv" },
  "columns": { "name": "first_name", "country": "country" },
  "rows": { "total": 200000, "processed": 200000, "identified": 187412 },
  "progress": 100,
  "credits": { "reserved": 200000, "charged": 200000 },
  "summary": { "male": 96120, "female": 91292, "unknown": 12588, "from_llm": 0 },
  "error": null,
  "result": {
    "url": "https://namegender.com/api/v1/batches/B-7K2M9QX4TA/result",
    "format": "csv",
    "expires_at": "2026-10-01T10:04:12Z"
  },
  "poll_after_seconds": null
}

ต้องระบุ name_column เพื่อเริ่มงาน คอลัมน์ที่เดาแล้วผิดจะทำให้เครดิตถูกใช้กับข้อมูลที่ผิด ส่ง start=false เพื่อดูคอลัมน์ ตัวอย่าง และค่าใช้จ่ายก่อน แล้วจึงเริ่มงาน

ส่งส่วนหัว Idempotency-Key การลองใหม่ด้วยคีย์เดิมจะคืนงานแรกแทนการเปิดงานที่สอง

มีงานรอคิวหรือกำลังทำงานพร้อมกันได้สูงสุด 3 งาน งานที่ยังไม่เริ่มสามารถยกเลิกได้และจะได้เครดิตคืน งานที่กำลังประมวลผลไม่สามารถหยุดได้

POST https://your-server.example/…
Markdown

เว็บฮุก

เพิ่มปลายทางในเมนูเว็บฮุกของแดชบอร์ด แล้วเราจะส่ง POST ที่ลงนามแล้วไปยังปลายทางนั้นเมื่องานไฟล์เสร็จหรือล้มเหลว โดยไม่ต้องคอยสอบถามสถานะ

เหตุการณ์ ประเภท คำอธิบาย
batch.completed BatchJob งานเสร็จแล้ว เนื้อหาคำขอมีงานในรูปแบบเดียวกับที่ GET /batches/{id} ส่งกลับทุกประการ
batch.failed BatchJob งานล้มเหลวและไม่มีการเรียกเก็บเงิน ให้แยกการทำงานตาม error.code
credits.low CreditsAlert ตามอัตราปัจจุบัน เครดิตจะพอใช้ได้ไม่เกิน 7 วัน ตรวจสอบทุกชั่วโมงและนับรวมการต่ออายุการสมัครสมาชิก
credits.depleted CreditsAlert ยอดคงเหลือหมดแล้วและคำขอถูกปฏิเสธด้วย 402 ตรวจสอบทุกชั่วโมง
webhook.test object ส่งเฉพาะจากปุ่ม "ส่งเหตุการณ์ทดสอบ" ในแดชบอร์ด และส่งไปยังปลายทางนั้นเท่านั้น
ส่วนหัว ประเภท คำอธิบาย
NameGender-Signature
จำเป็น
string t=<วินาที unix>,v1=<hex> หลังเปลี่ยนข้อมูลลับจะมี v1 ตัวที่สองเป็นเวลา 24 ชั่วโมง
NameGender-Event-Id
จำเป็น
string ID ของเหตุการณ์ เหมือนกันทุกครั้งที่ลองส่งเหตุการณ์เดิมซ้ำ
NameGender-Delivery-Attempt
จำเป็น
integer ครั้งแรกเป็น 1 สูงสุด 8

ตรวจสอบทุกคำขอ

v1 คือ HMAC-SHA256 ของเวลา จุด และเนื้อหาดิบ โดยใช้ข้อมูลลับของปลายทาง เปรียบเทียบแบบใช้เวลาคงที่ ยอมรับคำขอหาก v1 ตัวใดตรงกัน และปฏิเสธเวลาที่ห่างจากนาฬิกาของคุณเกินห้านาที ไลบรารีไคลเอนต์ทำทั้งหมดนี้ได้ในการเรียกครั้งเดียว

ตรวจสอบเนื้อหาตามที่ได้รับมาเท่านั้น เฟรมเวิร์กที่แยก JSON แล้วแปลงกลับจะทำให้ไบต์เปลี่ยน และลายเซ็นจะไม่ตรงกัน
import express from 'express';
import { webhooks, NameGenderWebhookError } from 'namegender';

const app = express();

// express.raw, not express.json: the signature covers the exact bytes.
app.post('/namegender', express.raw({ type: 'application/json' }), async (req, res) => {
  let event;
  try {
    event = await webhooks.verify(
      req.body,
      req.get('NameGender-Signature'),
      process.env.NAMEGENDER_WEBHOOK_SECRET,
    );
  } catch (error) {
    if (error instanceof NameGenderWebhookError) return res.sendStatus(400);
    throw error;
  }

  res.sendStatus(204);   // answer first, then do the work

  if (event.type === 'batch.completed') {
    const job = event.data.object;   // same object as GET /batches/{id}
  }
});
import os
from flask import Flask, request
from namegender import webhooks, WebhookVerificationError

app = Flask(__name__)

@app.post("/namegender")
def namegender_webhook():
    try:
        event = webhooks.verify(
            request.get_data(),   # raw bytes, not request.json
            request.headers.get("NameGender-Signature"),
            os.environ["NAMEGENDER_WEBHOOK_SECRET"],
        )
    except WebhookVerificationError:
        return "", 400

    if event["type"] == "batch.completed":
        job = event["data"]["object"]   # same object as GET /batches/{id}
    return "", 204
<?php

$body   = file_get_contents('php://input');   // raw body, before json_decode
$header = $_SERVER['HTTP_NAMEGENDER_SIGNATURE'] ?? '';
$secret = getenv('NAMEGENDER_WEBHOOK_SECRET');

parse_str(str_replace(',', '&', $header), $parts);   // t=…&v1=…
preg_match_all('/v1=([0-9a-f]{64})/', $header, $m);

$t = (int) ($parts['t'] ?? 0);
$expected = hash_hmac('sha256', $t . '.' . $body, $secret);
$valid = abs(time() - $t) <= 300
    && array_filter($m[1], fn ($sig) => hash_equals($expected, $sig));

if (! $valid) {
    http_response_code(400);
    exit;
}

http_response_code(204);
$event = json_decode($body, true);
{
  "id": "evt_16f7c01502fda5436e8b7c4e",
  "type": "batch.completed",
  "created_at": "2026-09-24T10:04:12Z",
  "api_version": "v1",
  "data": {
    "object": {
      "id": "B-7K2M9QX4TA",
      "status": "completed",
      "rows": { "total": 200000, "processed": 200000, "identified": 187412 },
      "credits": { "reserved": 200000, "charged": 200000 },
      "result": { "url": "…/api/v1/batches/B-7K2M9QX4TA/result", "format": "csv" }
    }
  }
}
  • ตอบกลับด้วย 2xx ใดก็ได้ภายใน 10 วินาที แล้วจึงทำงานต่อ
  • การตอบกลับอื่นทั้งหมด รวมถึงการเปลี่ยนเส้นทาง จะถูกลองใหม่สูงสุด 7 ครั้งในเวลาประมาณ 45 ชั่วโมง หากปลายทางล้มเหลวต่อเนื่องสามวันจะถูกปิดและคุณจะได้รับอีเมล
  • การลองใหม่ใช้ ID เดิมและไม่รับประกันลำดับ ให้กรองรายการซ้ำด้วย NameGender-Event-Id และอ่านงานด้วย GET เมื่อต้องการสถานะล่าสุด
  • เมื่อเปลี่ยนข้อมูลลับในแดชบอร์ด ข้อมูลลับเดิมจะยังลงนามต่ออีก 24 ชั่วโมง คุณจึงอัปเดตเซิร์ฟเวอร์ได้โดยไม่พลาดเหตุการณ์
  • อาจมีการเพิ่มประเภทเหตุการณ์ใหม่ ให้ตอบ 2xx กับประเภทที่คุณไม่ได้จัดการและเพิกเฉย
GET POST https://namegender.com/api/v1/gender/countries
Markdown

การกระจายตัวตามประเทศ

แสดงประเทศที่บันทึกชื่อไว้ คำตอบจะมีสองรายการและไม่ได้รวมเข้าด้วยกันโดยเจตนา: `registrations` คือปริมาณที่วัดได้ เปรียบเทียบได้เฉพาะในสิบเอ็ดประเทศที่เผยแพร่สถิติชื่อที่นับได้ และ `attested_in` คือการมีอยู่ โดยไม่มีน้ำหนักแนบมา

นี่ไม่ใช่การอนุมานประเทศกำเนิดหรือชาติพันธุ์ และห้ามใช้เพื่อจุดประสงค์นั้น สถิติที่นับได้มีเฉพาะสิบเอ็ดประเทศเท่านั้น ได้แก่ สหรัฐอเมริกา สหราชอาณาจักร ฝรั่งเศส แคนาดา สเปน ไอร์แลนด์ นอร์เวย์ ออสเตรีย อิสราเอล โปแลนด์ และสวิตเซอร์แลนด์ ดังนั้นการค้นหา "Mehmet" จะจัดอันดับสวิตเซอร์แลนด์และฝรั่งเศสเป็นอันดับแรก ที่ประมาณ 29% ต่อประเทศ และตุรกีไม่ปรากฏในการจัดอันดับเลย — ตุรกีไม่เผยแพร่สถิติ ตุรกีจะปรากฏใน `attested_in`
พารามิเตอร์ ประเภท คำอธิบาย
name
จำเป็น
string ชื่อที่ต้องการค้นหา
limit
ตัวเลือก
integer จำนวนประเทศที่นับได้ที่จะแสดงใน `registrations` 1–100 ค่าเริ่มต้น 25 สัดส่วนจะไม่ถูกคำนวณใหม่สำหรับรายการที่สั้นลง
curl "https://namegender.com/api/v1/gender/countries?name=Mehmet" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49994,
  "took_ms": 3,
  "name": "Mehmet",
  "basis": {
    "counted_sources": ["ssa", "ons", "nrs", "nisra", "insee", "statcan", "ine", "cso", "ssb", "statat", "pesel", "bfs"],
    "counted_countries": 8,
    "attested_countries": 16,
    "note": "Shares are calculated only across countries that publish counted name statistics…"
  },
  "registrations": [
    { "country": "CH", "count": 3890, "share": 29.45, "gender": "male", "source": "bfs"    },
    { "country": "FR", "count": 3775, "share": 28.58, "gender": "male", "source": "insee"  },
    { "country": "PL", "count": 1808, "share": 13.69, "gender": "male", "source": "pesel"  }
  ],
  "attested_in": ["AL","AT","AU","BE","CA","CH","ES","FR","GB","KS","MK","NO","PL","SE","TR","US"]
}

ใช้ 1 credit ต่อคำขอ `share` คำนวณจากทุกประเทศที่มีการนับ จึงรวมเป็น 100 เฉพาะเมื่อ `limit` ไม่ได้ตัดรายการ `counted_countries` ก็นับก่อนการตัดเช่นกัน `attested_in` ไม่มีเปอร์เซ็นต์เพราะไม่มีจำนวนสำหรับการคำนวณ

GET POST https://namegender.com/api/v1/salutation
Markdown

คำขึ้นต้น

แปลงชื่อเป็นคำขึ้นต้นที่พร้อมใช้ในจดหมายหรืออีเมล ใน 10 ภาษา: “Sehr geehrte Frau Dr. Müller,”, “Sayın Ahmet Bey,”, “Madame,”, “山田様” รวมการระบุเพศไว้แล้วและใช้ 1 credit เท่าเดิม แต่ละคำตอบมีบรรทัดแบบทางการ ไม่เป็นทางการ และเป็นกลาง พร้อมส่วนประกอบของบรรทัดแบบทางการ

พารามิเตอร์ ประเภท คำอธิบาย
name
จำเป็น
string ชื่อเต็มรวมคำนำหน้า (“Dr. Anna Müller”) ส่งค่านี้หรือ `first_name` และ `last_name`
first_name, last_name
ตัวเลือก
string ใช้แทน `name` เมื่อ CRM ของคุณเก็บชื่อแยกฟิลด์ ไม่มีการแยกวิเคราะห์ใดๆ
email
ตัวเลือก
string ที่อยู่อีเมล ใช้เมื่อไม่ได้ส่งชื่อ ชื่อจะอ่านจากส่วนก่อน @ โดยไม่มีเครื่องหมายเน้นเสียง (Mueller ไม่ใช่ Müller) ส่วน info@ และที่อยู่ตามบทบาทอื่น ๆ จะได้คำขึ้นต้นสำหรับองค์กร
language
ตัวเลือก
string ภาษาของคำขึ้นต้น: en, en-US, en-GB, de, de-AT, de-CH, fr, es, it, pt, pt-PT, pt-BR, nl, tr, pl, ja หากไม่ระบุ: ใช้ภาษาของ `locale` จากนั้นภาษาหลักของประเทศ แล้วจึงเป็นภาษาอังกฤษ ภาษาที่ไม่รองรับจะเป็นข้อผิดพลาด ไม่มีการเปลี่ยนเป็นภาษาอังกฤษแบบเงียบๆ
country, locale, ip
ตัวเลือก
string คำใบ้ประเทศสำหรับการระบุเพศ เหมือนในเอนด์พอยต์เพศ ใช้เลือกภาษาเฉพาะเมื่อไม่ได้ส่ง `language`
gender
ตัวเลือก
string `male`, `female` หรือ `neutral` เมื่อคุณทราบอยู่แล้ว จะใช้แทนผลการระบุ `neutral` ให้รูปแบบเป็นกลางเสมอ
min_probability
ตัวเลือก
integer ความน่าจะเป็นต่ำสุดสำหรับคำขึ้นต้นตามเพศ 50–100 ค่าเริ่มต้น 90
title
ตัวเลือก
string คำนำหน้าทางวิชาการที่เก็บในฟิลด์แยก เช่น `Dr.` ใช้ในคำขึ้นต้นภาษาเยอรมันและภาษาอังกฤษ
curl -X POST "https://namegender.com/api/v1/salutation" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Dr. Anna Müller", "language": "de"}'
{
  "credits_charged": 1,
  "credits_remaining": 49993,
  "language": "de",
  "form": "gendered",
  "reason": null,
  "salutation": {
    "formal": "Sehr geehrte Frau Dr. Müller,",
    "informal": "Liebe Anna,",
    "neutral": "Guten Tag Dr. Anna Müller,"
  },
  "parts": { "opening": "Sehr geehrte", "courtesy": "Frau", "academic": "Dr.", "name": "Müller" },
  "gender": "female",
  "gender_source": "lookup",
  "probability": 99,
  "first_name": "Anna",
  "last_name": "Müller",
  "name_type": "personal"
}

การระบุเพศผิดแย่กว่าการไม่ระบุ จึงใช้รูปแบบตามเพศเฉพาะเมื่อทราบเพศด้วยความน่าจะเป็นอย่างน้อย `min_probability` และภาษานั้นมีส่วนของชื่อที่ต้องใช้ มิฉะนั้น `form` จะเป็น `neutral` และ `reason` จะบอกเหตุผล บริษัทและที่อยู่ตามตำแหน่งงานจะได้ `form: organization` `best_guess` และ `ai_fallback` ไม่มีผลในที่นี้

POST /api/v1/salutation/bulk รับชื่อได้สูงสุด 100 ชื่อใน `names` ชื่อละ 1 credit โดยใช้ตัวเลือกเดียวกันกับทุกชื่อ

GET POST https://namegender.com/api/v1/name-check
Markdown

ตรวจสอบชื่อ

บอกว่าชื่อที่พิมพ์ลงในฟอร์มสมัครหรือฟอร์มลีดดูเหมือนชื่อของคนจริงหรือไม่ และเพราะอะไร ตรวจจับการกดแป้นพิมพ์มั่วๆ (“asdf qwerty”) ค่าตัวยึดตำแหน่ง (“Test Test”, “John Doe”, “n/a”) ตัวละครสมมติ (“Mickey Mouse”) คำหยาบ รวมถึงตัวเลข สัญลักษณ์ หรืออีเมลในช่องชื่อ ชื่อละ 1 credit

นี่ไม่ใช่การยืนยันตัวตน และไม่เคยระบุว่าชื่อใดเป็นชื่อปลอม ใช้ `implausible` และ `suspicious` เพื่อทำเครื่องหมายระเบียนหรือขอข้อมูลเพิ่มเติม ไม่ใช่เพื่อปฏิเสธผู้คนโดยอัตโนมัติ
พารามิเตอร์ ประเภท คำอธิบาย
name
จำเป็น
string ชื่อตามที่พิมพ์ลงในฟอร์ม ส่งค่านี้หรือ `first_name` และ `last_name`
first_name, last_name
ตัวเลือก
string ใช้แทน `name` เมื่อฟอร์มของคุณมีฟิลด์แยกกัน
country, locale, ip
ตัวเลือก
string คำใบ้ประเทศ เหมือนในเอนด์พอยต์เพศ ช่วยในการแยกส่วนชื่อและการค้นหาในระเบียน
curl -X POST "https://namegender.com/api/v1/name-check" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "asdf qwerty"}'
{
  "credits_charged": 1,
  "credits_remaining": 49992,
  "query": "asdf qwerty",
  "assessment": "implausible",
  "score": 0,
  "signals": [
    { "code": "placeholder", "severity": "high", "part": "first_name", "value": "asdf" },
    { "code": "keyboard_pattern", "severity": "high", "part": "first_name", "value": "asdf" },
    { "code": "keyboard_pattern", "severity": "high", "part": "last_name", "value": "qwerty" }
  ],
  "first_name": "Asdf",
  "last_name": "Qwerty",
  "name_type": "personal",
  "evidence": { "first_name_status": "not_found", "first_name_counted_records": 0 }
}

`assessment` เป็น `implausible` เมื่อมีสัญญาณระดับรุนแรงสูง (รูปแบบแป้นพิมพ์ ตัวอักษรซ้ำ ค่าตัวยึดตำแหน่ง คำหยาบ อีเมลหรือ URL) เป็น `suspicious` เมื่อมีสัญญาณระดับกลางหนึ่งรายการ (ตัวละครสมมติ ตัวเลข สัญลักษณ์ ชื่อบริษัท ไม่มีสระ ยาวมาก) หรือระดับต่ำสองรายการ และเป็น `plausible` ในกรณีอื่น `score` มีค่าตั้งแต่ 0 ถึง 100 เพื่อให้คุณกำหนดเกณฑ์เอง ชื่อต้นที่พบในบันทึกการเกิดอย่างเป็นทางการจะเพิ่มคะแนน ส่วนชื่อที่เราไม่เคยเห็นจะไม่ลดคะแนนด้วยตัวเอง นามสกุลจะถูกพิจารณาจากรูปแบบเท่านั้น: ไม่มีชุดข้อมูลนามสกุลอยู่เบื้องหลังเอนด์พอยต์นี้

ทดสอบกับชื่อต้นจริง 4,610 ชื่อใน 9 ระบบการเขียน ทั้งแบบเดี่ยวและคู่กับนามสกุล: ไม่มีชื่อใดถูกระบุว่าน่าสงสัยหรือไม่น่าเป็นไปได้ นามสกุลอย่าง Null, Test หรือ Cockburn ชื่อสองตัวอักษรอย่าง Ng และชื่อเดี่ยว จะถูกปล่อยไว้โดยตั้งใจ

POST /api/v1/name-check/bulk รับชื่อได้สูงสุด 100 ชื่อใน `names` ชื่อละ 1 credit พร้อมสรุปผลการประเมินทั้งสามแบบ

GET POST https://namegender.com/api/v1/age
Markdown

อายุจากชื่อ

บอกว่าคนที่ยังมีชีวิตอยู่ซึ่งใช้ชื่อต้นหนึ่งๆ มีอายุเท่าไร: อายุมัธยฐาน ครึ่งกลางของคนกลุ่มนี้ (`age_range`) และ 80% ตรงกลาง (`age_range_80`) ตัวอย่างเช่น Brittany ในสหรัฐอเมริกา: มัธยฐาน 36 ปี ครึ่งหนึ่งอยู่ระหว่าง 32 ถึง 38 ปี ชื่อละ 1 credit

ข้อมูลนี้อธิบายกลุ่มคน ไม่ใช่บุคคล สำหรับชื่อส่วนใหญ่ ครึ่งกลางกินช่วง 10 ถึง 25 ปี ใช้สำหรับการวิเคราะห์กลุ่มเป้าหมาย การแบ่งกลุ่ม และการวิจัย ห้ามใช้ตัดสินใจเรื่องใดๆ เกี่ยวกับบุคคลใดบุคคลหนึ่ง: สินเชื่อ การจ้างงาน ที่อยู่อาศัย ประกันภัย การพิจารณาสิทธิ์ หรือการตรวจสอบอายุ
พารามิเตอร์ ประเภท คำอธิบาย
name
จำเป็น
string ชื่อต้นหรือชื่อเต็ม ระบบจะใช้ชื่อต้น
gender
ตัวเลือก
string `male` หรือ `female` เพื่อใช้เฉพาะระเบียนของเพศนั้น ผู้ชายชื่อ Leslie มีอายุมากกว่าผู้หญิงชื่อ Leslie 16 ปี
country, locale, ip
ตัวเลือก
string คำใบ้ประเทศ เหมือนในเอนด์พอยต์เพศ ครอบคลุม: US, FR และ NO หากไม่มีคำใบ้จะใช้ชุดข้อมูลของสหรัฐอเมริกา และ `country_source` เป็น `default` ประเทศอื่นจะคืนค่า `reason: country_not_covered` และไม่เสียค่าใช้จ่าย
curl "https://namegender.com/api/v1/age?name=Brittany" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "credits_charged": 1,
  "credits_remaining": 49991,
  "request_id": "req_8f2c1a",
  "name": "Brittany",
  "first_name": "Brittany",
  "gender": null,
  "age": 36,
  "age_range": { "low": 32, "high": 38 },
  "age_range_80": { "low": 28, "high": 41 },
  "birth_year": 1990,
  "sample_size": 353775,
  "births": 361434,
  "country": "US",
  "country_source": "default",
  "source": "ssa",
  "series": "1880-2024",
  "reference_year": 2026,
  "reason": null
}

วิธีการ: จำนวนการเกิดที่จดทะเบียนแยกตามชื่อ เพศ และปี โดยถ่วงน้ำหนักแต่ละปีด้วยสัดส่วนของคนที่เกิดในปีนั้นซึ่งยังมีชีวิตอยู่ (ตารางชีพตามรุ่นของ SSA) แหล่งข้อมูล: การเกิดจาก SSA 1880–2024 (US), INSEE 1900–2025 (ฝรั่งเศส), SSB 1945–2025 (นอร์เวย์) `reason` เป็น `not_found` สำหรับชื่อที่ไม่อยู่ในชุดข้อมูล และเป็น `insufficient_data` เมื่อมีคนที่ยังมีชีวิตอยู่น้อยกว่า 100 คน

การเกิดในต่างประเทศไม่อยู่ในชุดข้อมูลใดเลย ชื่อที่พบบ่อยในหมู่ผู้อพยพจึงดูอายุน้อยกว่าความเป็นจริง ชุดข้อมูลของนอร์เวย์เริ่มในปี 1945 จึงไม่มีคนที่เกิดก่อนหน้านั้น ตารางชีพของสหรัฐอเมริกาถูกใช้กับฝรั่งเศสและนอร์เวย์ด้วย

POST /api/v1/age/bulk รับชื่อได้สูงสุด 100 ชื่อใน `names` ชื่อละ 1 credit ตามลำดับที่ส่ง

GET https://namegender.com/api/v1/me
Markdown

ยอดคงเหลือ

ดูยอดเครดิตคงเหลือและโควตาฟรีของวันนี้ที่ยังเหลืออยู่ การเรียกนี้ไม่มีค่าใช้จ่าย

curl "https://namegender.com/api/v1/me" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "email": "you@example.com",
  "credits_remaining": 50099,
  "purchased_credits": 50000,
  "free_today": 99,
  "free_daily_limit": 100,
  "lifetime_requests": 12480
}

สคริปต์ที่ไม่ใช่ละติน

ส่งชื่อในสคริปต์ของมันและเราจะเชื่อมโยงกับข้อมูลอ้างอิง ไม่ต้องใช้พารามิเตอร์เพิ่มเติม: เราตรวจจับสคริปต์และเลือกกลยุทธ์ที่เหมาะสม

รองรับ
สคริปต์อาหรับ

การเขียนอาหรับละเว้นสระสั้น ดังนั้น محمد จึงแปลเป็น "mhmd" ในขณะที่ข้อมูลของเรามี "muhammed" เราจับคู่จากรูปแบบพยัญชนะแทน และเก็บเครื่องหมาย ة ที่เป็นเฉพาะเพศหญิง เพื่อให้ خالد (Khalid) และ خالدة (Khalida) แยกออกจากกัน ครอบคลุมชื่อเปอร์เซีย อูรดูที่เขียนในสคริปต์อาหรับด้วย

อักษรจีน

แปลงเป็น Pinyin นามสกุลมาก่อนในภาษาจีน ดังนั้น 李明 มีนามสกุล 李 (Li) และชื่อจริง 明 (Ming) — เราลบนามสกุลออกก่อนค้นหา อักษรเดียวถือเป็นชื่อจริงที่สมบูรณ์และจัดการเป็นตัวเดียว

เกาหลี

การจัดการนามสกุลก่อนเหมือนกับภาษาจีน โดยใช้นามสกุลเกาหลีที่นิยมใช้

คานะญี่ปุ่น

อ่านฮิรากานะและคะตะกานะได้อย่างถูกต้อง (ひろし → Hiroshi)

ซีริลลิก

ชื่อรัสเซีย ยูเครน บัลแกเรีย และเซอร์เบีย แปลเป็นตัวเต็มโดยตรง

เทวนาครี

ชื่อฮินดี มราฐี และเนปาล สระที่ตามมาโดยปริยายจะถูกจัดการ (राहुल → Rahul ไม่ใช่ "Rahula")

ไม่รองรับ
คันจิญี่ปุ่น

อักษรคันจิของญี่ปุ่นและอักษรจีนอยู่ในช่วง Unicode เดียวกัน เราจึงไม่สามารถแยกแยะได้จากอักษรเพียงอย่างเดียว Han input จะถูกอ่านเป็นภาษาจีน: ชื่อคันจิที่เราไม่มีข้อมูลจะได้การอ่านแบบแมนดารินซึ่งสำหรับชื่อญี่ปุ่นมักจะผิด (健太 อ่านว่า "jian tai" ทั้งที่ชื่อคือ Kenta) ชื่อที่เรามีข้อมูลจะตรงกันทั้งหมดและถูกต้อง ส่งชื่อญี่ปุ่นในรูป kana หรือ Latin เพื่อให้แน่นอน

ไทย

ภาษาไทยละเว้นสระเหมือนอาหรับและต้องการชั้นการจับคู่เฉพาะ ยังไม่สร้างเสร็จ จึงส่งคืน null

# Arap yazısı — ünsüz iskeleti üzerinden eşleşir
curl "https://namegender.com/api/v1/gender?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/v1/gender?name=%E6%9D%8E%E6%98%8E" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 92, "source": "db" }

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

เมื่อเราไม่สามารถแปลงอักษรได้เลย response จะเป็น gender: null ที่มี source: none ตรวจสอบ source field: script หมายความว่าเราทำการ transliterate db หมายความว่าเราจับคู่อักษรที่คุณส่งมาโดยตรง ทั้งสองมี confidence ต่างกัน และเราจะแสดงให้เห็นว่าคุณได้ข้อมูลแบบไหน

ฟิลด์การตอบสนอง

เหมือนกันในทุก endpoint

ฟิลด์ ประเภท คำอธิบาย
credits_charged integer จำนวนเครดิตที่ถูกหักสำหรับการเรียกครั้งนี้
credits_remaining integer ยอดที่ใช้ได้หลังชำระค่าการเรียกครั้งนี้: เครดิตที่ซื้อไว้รวมกับโควตาฟรีของวันนี้ที่ยังเหลือ
query string input ตรงตามที่คุณส่งมา ก่อนการทำความสะอาดใดๆ
name string ชื่อที่เราค้นหาจริงๆ หลังจากลบคำนำหน้าและนามสกุล
first_name string ชื่อต้นที่แยกได้จากข้อมูลที่ส่งมา ส่งกลับแม้ gender เป็น null และไม่คิดเครดิตเพิ่ม
middle_name string ชื่ออื่นที่อยู่ระหว่างชื่อต้นกับนามสกุล ตัวย่อชื่อจะถูกตัดออก
last_name string นามสกุล รวมคำนำหน้าอย่าง van หรือ de la สำหรับชื่อผู้ใช้จะเป็น null เสมอ
name_type string personal, organization (เช่น Acme LLC) หรือ role (เช่น info@ ฝ่ายบริการลูกค้า) องค์กรและบัญชีตามบทบาทจะไม่ได้รับเพศ
gender string male female หรือ null เมื่อเราไม่มั่นใจพอที่จะพูด
country string ประเทศที่สถิติมาจาก หรือ null สำหรับข้อมูลรวมทั่วโลก
country_source string ที่มาของประเทศ: country, locale, ip หรือ null เมื่อคำตอบเป็นระดับโลก
sample_size integer จำนวนคนที่มีการบันทึกไว้เบื้องหลังคำตอบนี้ 0 หมายความว่าแหล่งที่มาเผยแพร่เพียงสัดส่วนหรือการพบชื่อ ไม่ใช่จำนวนนับที่เราตรวจสอบได้
probability integer ความมั่นใจในเพศที่ระบุ 50 ถึง 100 0 เมื่อ gender เป็น null
took_ms integer เวลาที่เราใช้ประมวลผลการค้นหา เป็นมิลลิวินาทีเต็ม ไม่รวมเวลาเครือข่ายฝั่งคุณ

สองฟิลด์ที่บริการอื่นไม่ให้

source บอกคุณว่าคำตอบมาจากไหน: ฐานข้อมูลอ้างอิง fuzzy match หรือ AI fallback matched_as ตั้งชื่อรายการที่ fuzzy match ลงจอด ทั้งสองช่วยให้คุณตัดสินใจว่าจะเชื่อถือผลลัพธ์เดียวมากน้อยเพียงใด

ฟิลด์ ประเภท คำอธิบาย
source string db script fuzzy llm หรือ none
confidence string สูง ปานกลาง ต่ำ ยังไม่ยืนยัน หรือไม่ทราบ โดยอิงจากหลักฐานตัวอย่าง
matched_as string สำหรับ fuzzy match รายการฐานข้อมูลที่จับคู่ ไม่เช่นนั้น null

รหัสข้อผิดพลาด

HTTP status code บอกว่าการเรียกล้มเหลว จากนั้น JSON body จะระบุสาเหตุใน error อธิบายใน message และให้ request_id สำหรับแจ้งฝ่ายสนับสนุน พร้อมลิงก์เอกสารไปยังแถวที่ตรงกันด้านล่าง ให้แยกกรณีตาม error เสมอ ห้ามใช้ message เพราะ message ถูกแปลและอาจมีการปรับถ้อยคำ

รหัส HTTP ความหมาย
missing_key 401 ไม่ได้ส่ง API key มา เพิ่ม header Authorization: Bearer หรือ header X-Api-Key ในคำขอ
invalid_key 401 API key นี้ไม่ถูกต้อง
revoked_key 401 API key นี้ถูกยกเลิกแล้ว
blocked 403 บัญชีนี้ถูกระงับ ติดต่อ support
email_not_verified 403 ที่อยู่อีเมลของบัญชีนี้ยังไม่ได้รับการยืนยัน กรุณาเปิดลิงก์ยืนยันที่เราส่งให้ หรือขอลิงก์ใหม่จากแดชบอร์ด
ip_not_allowed 403 ไม่อนุญาตให้ส่งคำขอจากที่อยู่ IP นี้สำหรับ key นี้
proxy_secret_required 403 คีย์นี้ใช้ได้เฉพาะผ่าน API marketplace ของมันเท่านั้น ซึ่งจะลงนามในทุกคำขอ ใช้คีย์ที่ออกให้คุณที่นั่น
forbidden 403 คุณไม่ได้รับอนุญาตให้ดำเนินการนี้
no_credits 402 credit หมดแล้ว ซื้อเพิ่มหรือรอ quota ฟรีรายวันรีเซ็ต
missing_input 400 ต้องระบุ parameter "name"
invalid_input 422 Parameter "name" ไม่ถูกต้อง
too_many_items 422 ส่งได้สูงสุด 100 รายการต่อคำขอเดียว
unknown_endpoint 404 ไม่มี endpoint ที่เส้นทางนี้ โปรดตรวจสอบ URL กับเอกสาร API
method_not_allowed 405 endpoint นี้ไม่รับคำขอ DELETE
payload_too_large 413 ขนาดของเนื้อหาคำขอใหญ่เกินไป
rate_limited 429 คำขอมากเกินไป ลดความเร็วลงและลองใหม่ในไม่ช่วงเวลาน้อย
batch_not_found 404 ไม่มีงานไฟล์ที่มี ID นี้ในบัญชีนี้
batch_not_startable 409 งานนี้เริ่มต้นหรือปิดไปแล้ว
batch_not_finished 409 งานนี้ยังไม่เสร็จ ตรวจสอบสถานะและดาวน์โหลดผลลัพธ์เมื่องานเสร็จสมบูรณ์
batch_in_progress 409 งานนี้กำลังประมวลผลและไม่สามารถยกเลิกได้ในขณะนี้ ลบได้เมื่องานเสร็จแล้ว
result_gone 410 งานนี้ไม่มีผลลัพธ์ให้ดาวน์โหลด งานล้มเหลว ถูกยกเลิก หมดอายุ หรือผลลัพธ์แบบดาวน์โหลดครั้งเดียวถูกดาวน์โหลดไปแล้ว
too_many_batches 429 คุณมีงานไฟล์ที่กำลังทำงานอยู่แล้ว 100 งาน รอให้งานหนึ่งเสร็จก่อนเริ่มงานใหม่
not_ready 503 ฐานข้อมูลชื่อกำลังถูกสร้างใหม่ ลองใหม่ในสักครู่
server_error 500 เกิดข้อผิดพลาดจากฝั่งของเรา เราได้รับแจ้งแล้ว
{
  "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"
}

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ

ขีดจำกัดอัตรา

การใช้งานปกติไม่ถึงขีดจำกัด ขีด จำกัด มีอยู่เพื่อหยุดคีย์ที่รั่วไหลจากการถูกใช้ในทางที่ผิด และจะนับต่อ API key มากกว่า IP เพื่อไม่ให้ลูกค้าหลายรายบนเซิร์ฟเวอร์เดียวใช้โควตาของกันและกัน

ขีดจำกัดปัจจุบัน: 1,200 คำขอต่อนาทีต่อ key ต้องการเพิ่มเติมหรือ ถามเรา เราจะเพิ่มในบัญชีของคุณ

ทุกการตอบสนองมีส่วนหัว X-RateLimit-Limit และ X-RateLimit-Remaining มาตรฐาน

ช่องว่างและอักษรที่ไม่ใช่ละตินในคำขอ GET

ชื่ออย่าง Ayşe Yılmaz หรือ 中村 ไม่สามารถใส่ใน URL ตามที่พิมพ์ได้ เมื่อเรียกด้วย GET ให้ percent-encode ค่า หรือส่งใน JSON body ด้วย 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

คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ