REST API Reference
เอนด์พอยต์เพียงไม่กี่ตัว รูปแบบการตอบสนองเดียว ทุกอย่างด้านล่างใช้งานสดกับบัญชีของคุณ
https://namegender.com/api/v1/gender
สมัครฟรี
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: Bearer ng_live_xxxxxxxxxxxx
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
X-Api-Key: ng_live_xxxxxxxxxxxx
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
คุณสามารถจำกัด key ให้ใช้กับที่อยู่ IP ที่ระบุได้จากแดชบอร์ด
Client libraries
Wrapper บาง ๆ บน REST API ทำหน้าที่ส่งคีย์ของคุณ สร้างแต่ละคำขอ และแปลงการตอบกลับที่เป็นข้อผิดพลาดให้เป็น exception
npm install namegender
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
npm install -g namegender
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
composer require namegender/namegender
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
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>
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
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')
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
Install-Module NameGender
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
cargo add namegender
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
คุณไม่จำเป็นต้องใช้ API มีเพียงไม่กี่ endpoint ที่เป็น JSON ธรรมดา ไลบรารีช่วยประหยัดเวลาได้แค่ครึ่งวัน ไม่ใช่ทั้งโครงการ หากไม่พบภาษาของคุณ REST reference มีตัวอย่างที่ copy-paste ได้
ดูทั้งหมดผู้ช่วย AI (MCP)
ใช้ NameGender จาก Claude, Cursor และไคลเอนต์อื่นใดที่รองรับ Model Context Protocol ถามผู้ช่วยเกี่ยวกับรายชื่อ แล้วผู้ช่วยจะเรียก API ให้คุณ พร้อมแสดงหลักฐานไว้ข้างคำตอบทุกข้อ
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ
{
"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
เพศจากชื่อ
ยอมรับชื่อจริงหรือชื่อเต็ม คำนำหน้า ชื่อกลาง และนามสกุลจะถูกลบออกก่อนการค้นหา ดังนั้น "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
}
เพศจากอีเมล
แยกบุคคลจากส่วนท้องถิ่นของที่อยู่ แล้วจำแนกนั้น "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"
}
เพศจากชื่อผู้ใช้
จัดการ 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"
}
คำขอจำนวนมาก
ส่งชื่อได้ถึง 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" }
]
}
ผลลัพธ์จะส่งกลับมาตามลำดับที่คุณส่ง เรียกเก็บเครดิตต่อชื่อ และคำขอทั้งหมดจะถูกปฏิเสธก่อนการทำงานหากยอดคงเหลือของคุณไม่เพียงพอ ดังนั้นคุณจึงไม่เคยได้รับแบตช์ที่ประมวลผลครึ่งหนึ่ง
บล็อกสรุปบอกคุณถึงอัตราการจับคู่ได้อย่างรวดเร็ว เพื่อให้คุณสามารถตัดสินใจได้ว่าอินพุตต้องการการทำความสะอาดก่อนที่คุณจะประมวลผลส่วนที่เหลือ
งานไฟล์
อัปโหลดไฟล์ CSV หรือ XLSX ขนาดไม่เกิน 100 MB และไม่เกิน 1,000,000 แถว แล้วรับไฟล์คืนพร้อมคอลัมน์เพศที่เพิ่มในทุกแถว หนึ่งเครดิตต่อแถว เรียกเก็บเฉพาะเมื่องานเสร็จสมบูรณ์
-
1.
POST /batchesส่งไฟล์และ name_column งานจะเข้าคิวทันที -
2.
GET /batches/{id}อ่านงานจนกว่า status จะเป็น completed หรือ failed โดย poll_after_seconds บอกว่าควรรอนานเท่าใดระหว่างการอ่านแต่ละครั้ง -
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 ที่ลงนามแล้วไปยังปลายทางนั้นเมื่องานไฟล์เสร็จหรือล้มเหลว โดยไม่ต้องคอยสอบถามสถานะ
| เหตุการณ์ | ประเภท | คำอธิบาย |
|---|---|---|
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 ตัวใดตรงกัน และปฏิเสธเวลาที่ห่างจากนาฬิกาของคุณเกินห้านาที ไลบรารีไคลเอนต์ทำทั้งหมดนี้ได้ในการเรียกครั้งเดียว
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 กับประเภทที่คุณไม่ได้จัดการและเพิกเฉย
การกระจายตัวตามประเทศ
แสดงประเทศที่บันทึกชื่อไว้ คำตอบจะมีสองรายการและไม่ได้รวมเข้าด้วยกันโดยเจตนา: `registrations` คือปริมาณที่วัดได้ เปรียบเทียบได้เฉพาะในสิบเอ็ดประเทศที่เผยแพร่สถิติชื่อที่นับได้ และ `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` ไม่มีเปอร์เซ็นต์เพราะไม่มีจำนวนสำหรับการคำนวณ
คำขึ้นต้น
แปลงชื่อเป็นคำขึ้นต้นที่พร้อมใช้ในจดหมายหรืออีเมล ใน 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 โดยใช้ตัวเลือกเดียวกันกับทุกชื่อ
ตรวจสอบชื่อ
บอกว่าชื่อที่พิมพ์ลงในฟอร์มสมัครหรือฟอร์มลีดดูเหมือนชื่อของคนจริงหรือไม่ และเพราะอะไร ตรวจจับการกดแป้นพิมพ์มั่วๆ (“asdf qwerty”) ค่าตัวยึดตำแหน่ง (“Test Test”, “John Doe”, “n/a”) ตัวละครสมมติ (“Mickey Mouse”) คำหยาบ รวมถึงตัวเลข สัญลักษณ์ หรืออีเมลในช่องชื่อ ชื่อละ 1 credit
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
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 พร้อมสรุปผลการประเมินทั้งสามแบบ
อายุจากชื่อ
บอกว่าคนที่ยังมีชีวิตอยู่ซึ่งใช้ชื่อต้นหนึ่งๆ มีอายุเท่าไร: อายุมัธยฐาน ครึ่งกลางของคนกลุ่มนี้ (`age_range`) และ 80% ตรงกลาง (`age_range_80`) ตัวอย่างเช่น Brittany ในสหรัฐอเมริกา: มัธยฐาน 36 ปี ครึ่งหนึ่งอยู่ระหว่าง 32 ถึง 38 ปี ชื่อละ 1 credit
| พารามิเตอร์ | ประเภท | คำอธิบาย |
|---|---|---|
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 ตามลำดับที่ส่ง
ยอดคงเหลือ
ดูยอดเครดิตคงเหลือและโควตาฟรีของวันนี้ที่ยังเหลืออยู่ การเรียกนี้ไม่มีค่าใช้จ่าย
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 รายการต่อคำขอเดียว |
ai_consent_required |
422 | ai_fallback ส่งชื่อไปยังผู้ให้บริการ AI ของบุคคลที่สาม ซึ่งบัญชีนี้ยังไม่ได้ยินยอม ดูฟิลด์ "ai" เพื่อดูว่าผู้ให้บริการนั้นคือใคร จากนั้นเปิดใช้งาน AI lookups ในการตั้งค่าแดชบอร์ดของคุณ |
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
คัดลอกไม่สำเร็จ โปรดเลือกและคัดลอกข้อความ