Tài liệu tham khảo REST API
Một vài endpoint, một cấu trúc phản hồi. Mọi thứ dưới đây hoạt động trực tiếp với tài khoản của bạn.
https://namegender.com/api/v1/gender
Đăng ký miễn phí
Markdown dành cho trợ lý lập trình như Claude Code, Cursor và Copilot. Dán vào khung chat hoặc đưa đường dẫn cho trợ lý.
Bắt đầu nhanh
Tạo một khóa trong bảng điều khiển của bạn, rồi gửi yêu cầu đầu tiên. Không cần 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
Mỗi endpoint trả về cùng một cấu trúc, do đó bạn có thể thay đổi đầu vào mà không cần thay đổi mã phân tích cú pháp.
Xác thực
Mọi yêu cầu đều mang khóa API của bạn trong một tiêu đề. Mặc định hãy dùng Authorization: Bearer, hoặc X-Api-Key khi HTTP client của bạn dành tiêu đề Authorization cho mục đích khác. Khóa đặt trong URL sẽ bị từ chối: URL bị sao chép vào nhật ký proxy, công cụ phân tích và lịch sử trình duyệt.
Authorization: Bearer ng_live_xxxxxxxxxxxx
Không thể sao chép. Hãy chọn và sao chép văn bản.
X-Api-Key: ng_live_xxxxxxxxxxxx
Không thể sao chép. Hãy chọn và sao chép văn bản.
Bạn có thể hạn chế khóa cho các địa chỉ IP cụ thể từ bảng điều khiển.
Thư viện client
Wrapper mỏng trên REST API. Chúng gửi khóa của bạn, dựng từng yêu cầu và chuyển các phản hồi lỗi thành ngoại lệ.
npm install namegender
Không thể sao chép. Hãy chọn và sao chép văn bản.
npm install -g namegender
Không thể sao chép. Hãy chọn và sao chép văn bản.
composer require namegender/namegender
Không thể sao chép. Hãy chọn và sao chép văn bản.
pip install namegender-client
Không thể sao chép. Hãy chọn và sao chép văn bản.
gem install namegender
Không thể sao chép. Hãy chọn và sao chép văn bản.
<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>
Không thể sao chép. Hãy chọn và sao chép văn bản.
dotnet add package NameGender --version 0.6.0
Không thể sao chép. Hãy chọn và sao chép văn bản.
go get github.com/anpekesen/namegender-go@v0.7.0
Không thể sao chép. Hãy chọn và sao chép văn bản.
remotes::install_github('anpekesen/namegender-r', ref = 'v0.7.0')
Không thể sao chép. Hãy chọn và sao chép văn bản.
Install-Module NameGender
Không thể sao chép. Hãy chọn và sao chép văn bản.
cargo add namegender
Không thể sao chép. Hãy chọn và sao chép văn bản.
Bạn không cần đến. API chỉ gồm vài endpoint JSON đơn giản; thư viện tiết kiệm cho bạn một buổi chiều, không phải một dự án. Nếu ngôn ngữ của bạn không được liệt kê, tham chiếu REST có các ví dụ sao chép dán.
Xem tất cảTrợ lý AI (MCP)
Dùng NameGender từ Claude, Cursor và bất kỳ client nào khác hỗ trợ Model Context Protocol. Hỏi trợ lý về một danh sách tên và trợ lý sẽ gọi API giúp bạn, kèm bằng chứng bên cạnh mỗi câu trả lời.
claude mcp add namegender -e NAMEGENDER_API_KEY=ng_live_... -- npx -y namegender-mcp
Không thể sao chép. Hãy chọn và sao chép văn bản.
{
"mcpServers": {
"namegender": {
"command": "npx",
"args": [
"-y",
"namegender-mcp"
],
"env": {
"NAMEGENDER_API_KEY": "ng_live_..."
}
}
}
}
Không thể sao chép. Hãy chọn và sao chép văn bản.
Thêm đoạn này vào tệp cấu hình MCP của client rồi khởi động lại client.
Công cụ
gender_from_name- Giới tính từ tên riêng hoặc họ tên đầy đủ.
gender_from_email- Đọc tên trong địa chỉ email; các địa chỉ theo vai trò như info@ trả về không xác định.
gender_from_username- Đọc tên trong tên người dùng hoặc handle.
gender_bulk- Tối đa 100 giá trị trong một yêu cầu, kèm bản tóm tắt tỷ lệ khớp.
name_countries- Các quốc gia nơi một tên được ghi nhận. Không phải là khẳng định về nguồn gốc.
salutation- Dòng mở đầu của lá thư bằng ngôn ngữ của lá thư; dùng dạng trung tính khi giới tính chưa chắc chắn.
name_check- Một cái tên nhập vào biểu mẫu có giống tên thật hay không, kèm lý do. Không bao giờ gọi một cái tên là giả.
age_from_name- Tuổi trung vị và các khoảng tuổi của những người mang một tên riêng ở Hoa Kỳ, Pháp và Na Uy.
account_status- Tín chỉ còn lại và hạn mức miễn phí hôm nay.
Mỗi lần tra cứu dùng tín chỉ của tài khoản sở hữu khóa, giống hệt như một lệnh gọi API trực tiếp. Có trong sổ đăng ký MCP chính thức với tên io.github.anpekesen/namegender. Gói npm · Mã nguồn
Giới tính từ tên
Chấp nhận một tên hoặc một tên đầy đủ. Danh hiệu, tên đệm và họ được loại bỏ trước khi tra cứu, do đó "Dr. Ayşe Yılmaz" và "Ayşe" cho kết quả giống nhau.
| Tham số | Loại | Mô tả |
|---|---|---|
name
bắt buộc
|
string
|
Tên cần phân loại. Tên hoặc tên đầy đủ. |
country
tùy chọn
|
string
|
Mã quốc gia ISO 3166-1 alpha-2. Cải thiện độ chính xác cho các tên có giới tính khác nhau theo khu vực, chẳng hạn như Andrea (nam ở Ý, nữ ở Đức). |
locale
tùy chọn
|
string
|
Thẻ ngôn ngữ như de-DE hoặc en_US, ví dụ ngôn ngữ của trình duyệt. Khi không gửi country, vùng của thẻ trở thành quốc gia. Thẻ không có vùng (en, de) không đặt quốc gia. |
ip
tùy chọn
|
string
|
Địa chỉ IP của người dùng cuối. Quốc gia của nó được dùng khi không gửi country hay locale có vùng. Không được lưu. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
tùy chọn
|
boolean
|
Nếu tên không có trong dữ liệu của chúng tôi, hỏi một mô hình ngôn ngữ để ước tính thay vì trả về null. Chỉ hoạt động sau khi bạn bật tra cứu AI trong cài đặt, và tốn thêm một tín chỉ. |
best_guess
tùy chọn
|
boolean
|
Trả về giới tính chiếm ưu thế ngay cả khi bằng chứng chưa đạt ngưỡng tin cậy. Tắt theo mặc định: một câu trả lời gần 50/50 nhưng trông chắc chắn gây hại nhiều hơn một giá trị 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
}
Giới tính từ email
Trích xuất người từ phần địa phương của địa chỉ, rồi phân loại nó. "ayse.yilmaz84@example.com" được phân giải thành Ayşe.
| Tham số | Loại | Mô tả |
|---|---|---|
email
bắt buộc
|
string
|
Địa chỉ email. Chỉ phần trước @ được sử dụng. |
country
tùy chọn
|
string
|
Mã quốc gia ISO 3166-1 alpha-2. Cải thiện độ chính xác cho các tên có giới tính khác nhau theo khu vực, chẳng hạn như Andrea (nam ở Ý, nữ ở Đức). |
locale
tùy chọn
|
string
|
Thẻ ngôn ngữ như de-DE hoặc en_US, ví dụ ngôn ngữ của trình duyệt. Khi không gửi country, vùng của thẻ trở thành quốc gia. Thẻ không có vùng (en, de) không đặt quốc gia. |
ip
tùy chọn
|
string
|
Địa chỉ IP của người dùng cuối. Quốc gia của nó được dùng khi không gửi country hay locale có vùng. Không được lưu. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
tùy chọn
|
boolean
|
Nếu tên không có trong dữ liệu của chúng tôi, hỏi một mô hình ngôn ngữ để ước tính thay vì trả về null. Chỉ hoạt động sau khi bạn bật tra cứu AI trong cài đặt, và tốn thêm một tín chỉ. |
best_guess
tùy chọn
|
boolean
|
Trả về giới tính chiếm ưu thế ngay cả khi bằng chứng chưa đạt ngưỡng tin cậy. Tắt theo mặc định: một câu trả lời gần 50/50 nhưng trông chắc chắn gây hại nhiều hơn một giá trị null. |
best_guess áp dụng cho tên được đọc ra từ địa chỉ, không phải cho chính địa chỉ. Khi không đọc được tên nào, không có gì để ép và gender vẫn là null. Lưu ý rằng một câu trả lời bị ép ở đây dựa trên một bước trích xuất mà bản thân nó cũng có thể sai.
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"
}
Giới tính từ username
Xử lý camelCase, snake_case, các chữ số ở cuối và dấu @ ở đầu. "AyseYilmaz84" được phân giải thành Ayşe.
| Tham số | Loại | Mô tả |
|---|---|---|
username
bắt buộc
|
string
|
Username hoặc handle. Dấu @ ở đầu được bỏ qua. |
country
tùy chọn
|
string
|
Mã quốc gia ISO 3166-1 alpha-2. Cải thiện độ chính xác cho các tên có giới tính khác nhau theo khu vực, chẳng hạn như Andrea (nam ở Ý, nữ ở Đức). |
locale
tùy chọn
|
string
|
Thẻ ngôn ngữ như de-DE hoặc en_US, ví dụ ngôn ngữ của trình duyệt. Khi không gửi country, vùng của thẻ trở thành quốc gia. Thẻ không có vùng (en, de) không đặt quốc gia. |
ip
tùy chọn
|
string
|
Địa chỉ IP của người dùng cuối. Quốc gia của nó được dùng khi không gửi country hay locale có vùng. Không được lưu. IP geolocation by DB-IP (db-ip.com). |
ai_fallback
tùy chọn
|
boolean
|
Nếu tên không có trong dữ liệu của chúng tôi, hỏi một mô hình ngôn ngữ để ước tính thay vì trả về null. Chỉ hoạt động sau khi bạn bật tra cứu AI trong cài đặt, và tốn thêm một tín chỉ. |
best_guess
tùy chọn
|
boolean
|
Trả về giới tính chiếm ưu thế ngay cả khi bằng chứng chưa đạt ngưỡng tin cậy. Tắt theo mặc định: một câu trả lời gần 50/50 nhưng trông chắc chắn gây hại nhiều hơn một giá trị 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"
}
Yêu cầu hàng loạt
Gửi tối đa 100 tên trong một yêu cầu. Sử dụng cách này thay vì vòng lặp: một lệnh gọi hàng loạt cho 100 tên là một chuyến tròn duy nhất và một tra cứu không lặp lại duy nhất.
| Tham số | Loại | Mô tả |
|---|---|---|
names
bắt buộc
|
string[]
|
Mảng tên. Tối đa 100 mục. |
type
tùy chọn
|
string
|
Các mục là gì: name, email hoặc username. Mặc định là name. |
country
tùy chọn
|
string
|
Áp dụng cho mọi mục trong yêu cầu. |
locale
tùy chọn
|
string
|
Thẻ ngôn ngữ có vùng trở thành quốc gia cho mọi mục khi không gửi country. |
ip
tùy chọn
|
string
|
Địa chỉ IP của người dùng cuối, quốc gia của nó áp dụng cho mọi mục khi không gửi country hay locale có vùng. Không được lưu. 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" }
]
}
Kết quả trả về theo cùng thứ tự bạn gửi. Tín chỉ được tính theo tên, và toàn bộ yêu cầu bị từ chối trước bất kỳ xử lý nào nếu số dư của bạn không đủ, do đó bạn không bao giờ nhận được một lô được xử lý một phần.
Khối tóm tắt cho bạn thấy tỷ lệ khớp một cách sơ bộ, vì vậy bạn có thể quyết định xem đầu vào có cần làm sạch trước khi xử lý phần còn lại.
Tác vụ tệp
Tải lên tệp CSV hoặc XLSX tối đa 100 MB và 1.000.000 dòng, nhận lại tệp với các cột giới tính được thêm vào mỗi dòng. Một tín dụng cho mỗi dòng, chỉ tính khi tác vụ hoàn tất.
-
1.
POST /batchesGửi tệp và name_column. Tác vụ được đưa vào hàng đợi ngay. -
2.
GET /batches/{id}Đọc tác vụ cho đến khi status là completed hoặc failed. poll_after_seconds cho biết cần chờ bao lâu giữa các lần đọc. -
3.
GET /batches/{id}/resultTải kết quả xuống. Kết quả trả về theo định dạng bạn đã tải lên.
| Tham số | Loại | Mô tả |
|---|---|---|
file
bắt buộc
|
file
|
CSV, TSV hoặc XLSX có dòng tiêu đề. |
name_column
bắt buộc
|
string
|
Tiêu đề của cột chứa tên, đúng như trong tệp. Bắt buộc trừ khi start=false. |
country_column
tùy chọn
|
string
|
Tiêu đề của cột chứa mã quốc gia cho mỗi dòng. |
country
tùy chọn
|
string
|
Quốc gia mặc định cho các dòng không có quốc gia. |
ai_fallback
tùy chọn
|
boolean
|
Hỏi mô hình AI về các tên không có trong bộ dữ liệu. Cần đồng ý sử dụng AI trong Cài đặt. |
best_guess
tùy chọn
|
boolean
|
Trả về giới tính có khả năng cao hơn ngay cả khi bằng chứng yếu. |
delete_after_download
tùy chọn
|
boolean
|
Kết quả chỉ tải xuống được một lần, sau đó bị xóa. |
start
tùy chọn
|
boolean
|
false: chỉ tải lên và kiểm tra. Mặc định là 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
}
Cần có name_column để bắt đầu: một cột đoán sai sẽ tiêu tín dụng vào dữ liệu sai. Gửi start=false để xem trước các cột, bản xem trước và chi phí, rồi bắt đầu tác vụ.
Hãy gửi tiêu đề Idempotency-Key. Thử lại với cùng khóa sẽ trả về tác vụ đầu tiên thay vì mở tác vụ thứ hai.
Tối đa 3 tác vụ có thể ở hàng đợi hoặc đang chạy cùng lúc. Tác vụ chưa bắt đầu có thể hủy và tín dụng được hoàn lại; tác vụ đang xử lý không thể dừng.
Webhook
Thêm một endpoint trong mục Webhook của bảng điều khiển, chúng tôi sẽ gửi tới đó một yêu cầu POST có chữ ký khi tác vụ tệp hoàn tất hoặc thất bại, bạn không cần hỏi trạng thái liên tục.
| Sự kiện | Loại | Mô tả |
|---|---|---|
batch.completed
|
BatchJob
|
Tác vụ đã xong. Phần thân chứa tác vụ đúng như GET /batches/{id} trả về. |
batch.failed
|
BatchJob
|
Tác vụ thất bại và không bị tính phí. Hãy rẽ nhánh theo error.code. |
credits.low
|
CreditsAlert
|
Với tốc độ hiện tại, tín dụng chỉ đủ dùng tối đa 7 ngày. Kiểm tra mỗi giờ; có tính đến việc gia hạn gói đăng ký. |
credits.depleted
|
CreditsAlert
|
Số dư đã hết và các yêu cầu bị từ chối với mã 402. Kiểm tra mỗi giờ. |
webhook.test
|
object
|
Chỉ được gửi khi bấm "Gửi sự kiện thử" trong bảng điều khiển và chỉ tới endpoint đó. |
| Tiêu đề | Loại | Mô tả |
|---|---|---|
NameGender-Signature
bắt buộc
|
string
|
t=<giây unix>,v1=<hex>. Sau khi đổi khóa bí mật, trong 24 giờ sẽ có thêm một v1 thứ hai. |
NameGender-Event-Id
bắt buộc
|
string
|
ID của sự kiện. Giống nhau ở mọi lần thử lại của cùng một sự kiện. |
NameGender-Delivery-Attempt
bắt buộc
|
integer
|
1 ở lần thử đầu, tối đa 8. |
Xác minh mọi yêu cầu
v1 là HMAC-SHA256 của dấu thời gian, một dấu chấm và phần thân gốc, dùng khóa bí mật của endpoint. Hãy so sánh trong thời gian không đổi, chấp nhận yêu cầu nếu bất kỳ v1 nào khớp, và từ chối dấu thời gian lệch quá năm phút so với đồng hồ của bạn. Các thư viện client làm tất cả việc này trong một lần gọi.
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" }
}
}
}
- Trả lời bằng bất kỳ mã 2xx nào trong vòng 10 giây, rồi mới xử lý công việc.
- Mọi phản hồi khác, kể cả chuyển hướng, sẽ được thử lại tối đa 7 lần trong khoảng 45 giờ. Nếu endpoint tiếp tục thất bại trong ba ngày, nó sẽ bị tắt và bạn nhận được email.
- Lần thử lại mang cùng ID và không đảm bảo thứ tự. Hãy loại trùng theo NameGender-Event-Id và đọc tác vụ bằng GET khi cần trạng thái hiện tại.
- Khi đổi khóa bí mật trong bảng điều khiển, khóa cũ vẫn tiếp tục ký trong 24 giờ, nên bạn có thể cập nhật máy chủ mà không bỏ lỡ sự kiện nào.
- Có thể có thêm loại sự kiện mới. Hãy trả lời 2xx với loại bạn không xử lý và bỏ qua nó.
Phân bố địa lý
Trả về các quốc gia nơi một tên được ghi nhận. Hai danh sách được trả về và được cố ý không gộp lại: `registrations` là khối lượng đo được, chỉ có thể so sánh giữa mười một quốc gia công bố thống kê tên có số đếm, và `attested_in` là sự hiện diện, không có trọng số.
| Tham số | Loại | Mô tả |
|---|---|---|
name
bắt buộc
|
string
|
Tên cần tìm kiếm. |
limit
tùy chọn
|
integer
|
Số lượng quốc gia được tính để liệt kê trong `registrations`. 1–100, mặc định 25. Tỷ lệ không được tính lại cho danh sách ngắn hơn. |
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"]
}
Một credit trên mỗi yêu cầu. `share` được tính trên tất cả các quốc gia có số liệu đếm, nên chỉ cộng lại bằng 100 khi `limit` không cắt bớt danh sách; `counted_countries` cũng được đếm trước khi cắt. `attested_in` không có phần trăm vì không có số lượng đằng sau những bản ghi đó để tính toán.
Lời chào
Biến một cái tên thành lời chào sẵn sàng cho thư hoặc email, bằng mười ngôn ngữ: “Sehr geehrte Frau Dr. Müller,”, “Sayın Ahmet Bey,”, “Madame,”, “山田様”. Việc xác định giới tính đã bao gồm và vẫn tốn một credit. Mỗi phản hồi có một dòng trang trọng, một dòng thân mật và một dòng trung lập, cùng các thành phần của dòng trang trọng.
| Tham số | Loại | Mô tả |
|---|---|---|
name
bắt buộc
|
string
|
Họ tên đầy đủ, kèm học hàm học vị (“Dr. Anna Müller”). Gửi trường này hoặc `first_name` và `last_name`. |
first_name, last_name
tùy chọn
|
string
|
Dùng các trường này thay cho `name` khi CRM của bạn lưu tên trong các trường riêng. Không có gì được phân tích. |
email
tùy chọn
|
string
|
Địa chỉ email, dùng khi không gửi tên. Tên được đọc từ phần trước @, không có dấu (Mueller, không phải Müller); info@ và các địa chỉ theo vai trò khác nhận lời chào dành cho tổ chức. |
language
tùy chọn
|
string
|
Ngôn ngữ của lời chào: en, en-US, en-GB, de, de-AT, de-CH, fr, es, it, pt, pt-PT, pt-BR, nl, tr, pl, ja. Nếu không có: ngôn ngữ của `locale`, rồi ngôn ngữ chính của quốc gia, rồi tiếng Anh. Ngôn ngữ không được hỗ trợ là lỗi, không bao giờ âm thầm chuyển sang tiếng Anh. |
country, locale, ip
tùy chọn
|
string
|
Gợi ý quốc gia cho việc xác định giới tính, giống các endpoint giới tính. Chỉ chọn ngôn ngữ khi không gửi `language`. |
gender
tùy chọn
|
string
|
`male`, `female` hoặc `neutral`, khi bạn đã biết. Ghi đè kết quả xác định; `neutral` luôn cho dạng trung lập. |
min_probability
tùy chọn
|
integer
|
Xác suất thấp nhất để dùng lời chào theo giới tính, 50–100. Mặc định 90. |
title
tùy chọn
|
string
|
Học vị lưu trong một trường riêng, như `Dr.` Dùng trong lời chào tiếng Đức và tiếng Anh. |
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"
}
Sai giới tính còn tệ hơn không có, nên dạng theo giới tính chỉ được dùng khi giới tính được biết với ít nhất `min_probability` và ngôn ngữ có phần tên mà nó cần. Nếu không, `form` là `neutral` và `reason` cho biết lý do. Công ty và địa chỉ theo vai trò nhận `form: organization`. `best_guess` và `ai_fallback` không áp dụng ở đây.
POST /api/v1/salutation/bulk nhận tối đa 100 tên trong `names`, mỗi tên một credit, với cùng tùy chọn cho mọi tên.
Kiểm tra tên
Cho biết một cái tên được nhập vào biểu mẫu đăng ký hoặc biểu mẫu khách hàng tiềm năng có giống tên của một người thật hay không, và vì sao. Nó phát hiện việc gõ bừa trên bàn phím (“asdf qwerty”), giá trị giữ chỗ (“Test Test”, “John Doe”, “n/a”), nhân vật hư cấu (“Mickey Mouse”), từ ngữ thô tục, cùng chữ số, ký hiệu hoặc địa chỉ email trong trường tên. Một credit cho mỗi tên.
| Tham số | Loại | Mô tả |
|---|---|---|
name
bắt buộc
|
string
|
Tên đúng như được nhập vào biểu mẫu. Gửi trường này hoặc `first_name` và `last_name`. |
first_name, last_name
tùy chọn
|
string
|
Dùng các trường này thay cho `name` khi biểu mẫu của bạn có các trường riêng. |
country, locale, ip
tùy chọn
|
string
|
Gợi ý quốc gia, giống các endpoint giới tính. Giúp phân tích tên và tra cứu trong hồ sơ. |
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` là `implausible` khi có một tín hiệu mức nghiêm trọng cao (mẫu bàn phím, chữ cái lặp lại, giá trị giữ chỗ, từ thô tục, email hoặc URL), `suspicious` khi có một tín hiệu mức trung bình (nhân vật hư cấu, chữ số, ký hiệu, tên công ty, không có nguyên âm, rất dài) hoặc hai tín hiệu mức thấp, và `plausible` trong các trường hợp còn lại. `score` chạy từ 0 đến 100 để bạn tự đặt ngưỡng. Một tên riêng có trong hồ sơ khai sinh chính thức sẽ làm tăng điểm; một cái tên chúng tôi chưa từng thấy không tự nó làm giảm điểm. Họ chỉ được đánh giá theo hình thức: không có bộ dữ liệu họ nào phía sau endpoint này.
Đã thử nghiệm trên 4,610 tên riêng thật thuộc chín hệ chữ viết, đứng riêng và đi kèm họ: không tên nào bị đánh dấu là đáng ngờ hay khó tin. Các họ như Null, Test hoặc Cockburn, tên hai chữ cái như Ng và tên đơn được cố ý bỏ qua.
POST /api/v1/name-check/bulk nhận tối đa 100 tên trong `names`, mỗi tên một credit, kèm bản tóm tắt ba mức đánh giá.
Tuổi theo tên
Những người còn sống mang một tên riêng bao nhiêu tuổi: tuổi trung vị, một nửa ở giữa (`age_range`) và 80% ở giữa (`age_range_80`). Brittany ở Hoa Kỳ: trung vị 36, một nửa trong khoảng 32 đến 38. Một credit cho mỗi tên.
| Tham số | Loại | Mô tả |
|---|---|---|
name
bắt buộc
|
string
|
Một tên riêng hoặc họ tên đầy đủ; tên riêng sẽ được dùng. |
gender
tùy chọn
|
string
|
`male` hoặc `female` để chỉ dùng hồ sơ của giới tính đó. Nam giới tên Leslie lớn hơn nữ giới tên Leslie 16 tuổi. |
country, locale, ip
tùy chọn
|
string
|
Gợi ý quốc gia, giống các endpoint giới tính. Được hỗ trợ: US, FR và NO. Không có gợi ý thì dùng chuỗi dữ liệu Hoa Kỳ và `country_source` là `default`. Quốc gia khác trả về `reason: country_not_covered` và không tính phí. |
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
}
Phương pháp: số ca sinh được đăng ký theo tên, giới tính và năm, mỗi năm được gia quyền theo tỷ lệ những người sinh năm đó vẫn còn sống (bảng sống theo thế hệ của SSA). Nguồn: số sinh SSA 1880–2024 (US), INSEE 1900–2025 (Pháp), SSB 1945–2025 (Na Uy). `reason` là `not_found` với tên không có trong chuỗi dữ liệu và `insufficient_data` khi dưới 100 người còn sống.
Các ca sinh ở nước ngoài không có trong chuỗi nào, nên những tên phổ biến trong cộng đồng nhập cư trông trẻ hơn thực tế. Chuỗi của Na Uy bắt đầu từ 1945, nên thiếu những người sinh trước đó. Bảng sống của Hoa Kỳ cũng được dùng cho Pháp và Na Uy.
POST /api/v1/age/bulk nhận tối đa 100 tên trong `names`, mỗi tên một credit, theo thứ tự gửi.
Số dư
Xem số dư tín chỉ và phần còn lại của hạn mức miễn phí hôm nay. Lệnh gọi này không bị tính phí.
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
}
Các chữ viết không phải Latin
Gửi một tên trong chữ viết riêng của nó và chúng tôi sẽ liên kết nó với dữ liệu tham chiếu. Không cần tham số bổ sung: chúng tôi phát hiện chữ viết và chọn chiến lược phù hợp.
Chữ viết Arabic bỏ qua các nguyên âm ngắn, nên محمد được chuyển thành "mhmd" trong khi dữ liệu của chúng tôi chứa "muhammed". Chúng tôi so khớp dựa trên mẫu phụ âm và giữ lại dấu nữ tính ة để خالد (Khalid) và خالدة (Khalida) vẫn khác biệt. Cũng bao gồm các tên tiếng Ba Tư và Urdu viết bằng chữ Arabic.
Được chuyển đổi thành Pinyin. Họ đứng trước trong tiếng Trung, vì vậy 李明 có họ là 李 (Li) và tên là 明 (Ming) — chúng tôi xóa họ trước khi tra cứu. Một ký tự duy nhất là một tên đầy đủ và được xử lý như một.
Xử lý họ đứng trước giống như tiếng Trung, sử dụng các họ Hàn Quốc phổ biến.
Hiragana và katakana được đọc chính xác (ひろし → Hiroshi).
Các tên Nga, Ukraina, Bulgaria và Serbia được chuyển đổi trực tiếp.
Các tên Hindi, Marathi và Nepali. Nguyên âm kéo dài vốn có được xử lý (राहुल → Rahul, không phải "Rahula").
Các ký tự kanji của Nhật Bản và ký tự Hán của Trung Quốc nằm trong cùng một dải Unicode, vì vậy chúng tôi không thể phân biệt chúng chỉ từ các ký tự. Đầu vào Hán được đọc là Tiếng Trung: một tên kanji mà chúng tôi chưa có dạng chính xác sẽ nhận được cách đọc Mandarin, điều này thường sai với tên Nhật Bản (健太 đọc là "jian tai" khi tên là Kenta). Các tên mà chúng tôi có khớp chính xác và chính xác. Gửi tên Nhật Bản dưới dạng kana hoặc Latin để chắc chắn.
Tiếng Thái bỏ qua nguyên âm giống như Arabic và cần lớp so khớp riêng. Chưa xây dựng, nên những cái này trả về 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" }
Không thể sao chép. Hãy chọn và sao chép văn bản.
Khi chúng tôi không thể chuyển đổi script, phản hồi là gender: null với source: none. Kiểm tra trường source: script có nghĩa là chúng tôi đã chuyển lệch, db có nghĩa là chúng tôi đã khớp trực tiếp các ký tự bạn gửi. Hai cái này có độ tin cậy khác nhau, và chúng tôi cho bạn biết cái nào bạn nhận được.
Trường dữ liệu phản hồi
Giống nhau trên tất cả các endpoint.
| Trường | Loại | Mô tả |
|---|---|---|
credits_charged
|
integer
|
Số tín chỉ đã bị trừ cho lệnh gọi này. |
credits_remaining
|
integer
|
Số dư bạn có thể dùng sau khi đã trả cho lệnh gọi này: tín chỉ đã mua cộng với phần còn lại của hạn mức miễn phí hôm nay. |
query
|
string
|
Đầu vào đúng như bạn đã gửi, trước khi làm sạch. |
name
|
string
|
Tên mà chúng tôi thực sự tìm kiếm sau khi loại bỏ các danh xưng và họ. |
first_name
|
string
|
Tên riêng tách ra từ dữ liệu đầu vào. Vẫn được trả về khi gender là null, không tốn thêm tín dụng. |
middle_name
|
string
|
Các tên khác nằm giữa tên riêng và họ. Chữ viết tắt bị bỏ qua. |
last_name
|
string
|
Họ, bao gồm các tiền tố như van hoặc de la. Luôn là null với tên người dùng. |
name_type
|
string
|
personal, organization (Acme LLC) hoặc role (info@, chăm sóc khách hàng). Tổ chức và tài khoản vai trò không được trả về giới tính. |
gender
|
string
|
nam, nữ, hoặc null khi chúng tôi không đủ tự tin để xác định. |
country
|
string
|
Đất nước mà thống kê đến từ đó, hoặc null cho tổng hợp toàn cầu. |
country_source
|
string
|
Quốc gia lấy từ đâu: country, locale, ip, hoặc null khi câu trả lời là toàn cầu. |
sample_size
|
integer
|
Số người được ghi nhận đứng sau câu trả lời này. 0 có nghĩa là nguồn chỉ công bố tỷ lệ hoặc ghi nhận sự xuất hiện, không phải số đếm mà chúng tôi có thể kiểm chứng. |
probability
|
integer
|
Độ tin cậy của giới tính được nêu, từ 50 đến 100. 0 khi giới tính là null. |
took_ms
|
integer
|
Thời gian chúng tôi dùng để xử lý tra cứu, tính bằng mili giây nguyên. Không bao gồm thời gian mạng phía bạn. |
Hai trường mà các dịch vụ khác không cung cấp
source cho bạn biết câu trả lời đến từ đâu: cơ sở dữ liệu tham chiếu, một kết quả khớp mờ, hoặc fallback AI. matched_as ghi tên mục mà kết quả khớp mờ tìm thấy. Cùng nhau chúng cho phép bạn quyết định mức độ tin tưởng vào một kết quả duy nhất thay vì chấp nhận ngay.
| Trường | Loại | Mô tả |
|---|---|---|
source
|
string
|
db, script, fuzzy, llm, hoặc none. |
confidence
|
string
|
cao, trung bình, thấp, chưa xác minh hoặc không xác định, dựa trên bằng chứng từ mẫu. |
matched_as
|
string
|
Đối với kết quả khớp mờ, mục cơ sở dữ liệu đã khớp. Nếu không thì null. |
Mã lỗi
Mã trạng thái HTTP cho bạn biết lệnh gọi đã thất bại. Body JSON sau đó nêu lý do trong error, giải thích trong message, và cung cấp request_id để gửi cho bộ phận hỗ trợ cùng liên kết tài liệu tới hàng tương ứng bên dưới. Hãy rẽ nhánh theo error, không bao giờ theo message: thông báo được dịch và có thể được diễn đạt lại.
| Mã | HTTP | Ý nghĩa |
|---|---|---|
missing_key |
401 | Không có API key nào được gửi. Thêm header Authorization: Bearer hoặc header X-Api-Key vào yêu cầu. |
invalid_key |
401 | API key này không hợp lệ. |
revoked_key |
401 | API key này đã bị thu hồi. |
blocked |
403 | Tài khoản này đã bị tạm ngừng. Liên hệ với bộ phận hỗ trợ. |
email_not_verified |
403 | Địa chỉ email của tài khoản này chưa được xác nhận. Hãy mở liên kết xác nhận chúng tôi đã gửi, hoặc yêu cầu liên kết mới trong bảng điều khiển. |
ip_not_allowed |
403 | Yêu cầu từ địa chỉ IP này không được phép cho khóa này. |
proxy_secret_required |
403 | Khóa này chỉ hoạt động thông qua API marketplace của nó, nơi ký mọi yêu cầu. Hãy sử dụng khóa được cấp cho bạn ở đó. |
forbidden |
403 | Bạn không được phép thực hiện hành động này. |
no_credits |
402 | Bạn đã hết tín chỉ. Mua thêm hoặc đợi hạn ngạch miễn phí hàng ngày được cấp lại. |
missing_input |
400 | Tham số "name" là bắt buộc. |
invalid_input |
422 | Tham số "name" không hợp lệ. |
too_many_items |
422 | Tối đa 100 mục có thể được gửi trong một yêu cầu. |
ai_consent_required |
422 | ai_fallback gửi tên đến nhà cung cấp AI của bên thứ ba mà tài khoản này chưa đồng ý. Xem trường "ai" để biết nhà cung cấp đó là ai, sau đó bật tra cứu AI trong cài đặt dashboard của bạn. |
unknown_endpoint |
404 | Không có endpoint nào tại đường dẫn này. Kiểm tra URL trong tài liệu API. |
method_not_allowed |
405 | Endpoint này không chấp nhận yêu cầu DELETE. |
payload_too_large |
413 | Phần thân yêu cầu quá lớn. |
rate_limited |
429 | Quá nhiều yêu cầu. Hãy chậm lại và thử lại sau. |
batch_not_found |
404 | Tài khoản này không có tác vụ tệp nào với ID này. |
batch_not_startable |
409 | Tác vụ này đã được bắt đầu hoặc đã đóng. |
batch_not_finished |
409 | Tác vụ này chưa hoàn tất. Hãy kiểm tra trạng thái và tải kết quả xuống khi hoàn tất. |
batch_in_progress |
409 | Tác vụ này đang được xử lý và không thể hủy lúc này. Hãy xóa nó sau khi hoàn tất. |
result_gone |
410 | Tác vụ này không có kết quả để tải xuống. Tác vụ đã thất bại, bị hủy, hết hạn hoặc kết quả chỉ tải một lần đã được tải xuống. |
too_many_batches |
429 | Bạn đã có 100 tác vụ tệp đang chạy. Hãy đợi một tác vụ hoàn tất trước khi bắt đầu tác vụ mới. |
not_ready |
503 | Cơ sở dữ liệu tên đang được xây dựng lại. Thử lại sau một lát. |
server_error |
500 | Có lỗi xảy ra ở phía chúng tôi. Chúng tôi đã được thông báo. |
{
"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"
}
Không thể sao chép. Hãy chọn và sao chép văn bản.
Giới hạn tỷ lệ
Mức sử dụng bình thường không đạt giới hạn. Giới hạn tồn tại để ngăn chặn khóa bị rò rỉ bị lạm dụng, và nó được tính trên mỗi API key thay vì trên mỗi IP để nhiều khách hàng trên một máy chủ không tiêu thụ hạn mức của nhau.
Giới hạn hiện tại: 1.200 yêu cầu mỗi phút cho mỗi key. Cần nhiều hơn? Hãy liên hệ và chúng tôi sẽ nâng cao giới hạn trên tài khoản của bạn.
Mỗi phản hồi đều có các header X-RateLimit-Limit và X-RateLimit-Remaining tiêu chuẩn.
Khoảng trắng và chữ không phải Latin trong yêu cầu GET
Một tên như Ayşe Yılmaz hay 中村 không thể đưa vào URL nguyên như khi gõ. Hãy percent-encode giá trị khi gọi bằng GET, hoặc gửi nó trong body JSON bằng POST và bỏ qua hoàn toàn việc mã hóa.
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91
Không thể sao chép. Hãy chọn và sao chép văn bản.