Tiếp tục → Tổng quan

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í
llms-full.txt

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.

Tiêu đề Authorization (được khuyến nghị)
Authorization: Bearer ng_live_xxxxxxxxxxxx

Không thể sao chép. Hãy chọn và sao chép văn bản.

Tiêu đề X-Api-Key
X-Api-Key: ng_live_xxxxxxxxxxxx

Không thể sao chép. Hãy chọn và sao chép văn bản.

Không bao giờ để lộ khóa của bạn trong mã phía client. Các lệnh gọi từ trình duyệt hoặc ứng dụng di động phải được thực hiện thông qua backend của 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ệ.

JavaScript Mã nguồn
npm install namegender

Không thể sao chép. Hãy chọn và sao chép văn bản.

Command line Mã nguồ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.

C# / .NET Mã nguồ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.

PowerShell Mã nguồ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 Code
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.

Claude Desktop, Cursor và các client khác
{
    "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

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

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
}
GET · POST https://namegender.com/api/v1/gender/email
Markdown

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"
}
GET · POST https://namegender.com/api/v1/gender/username
Markdown

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"
}
POST https://namegender.com/api/v1/gender/bulk
Markdown

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.

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

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. 1. POST /batches Gửi tệp và name_column. Tác vụ được đưa vào hàng đợi ngay.
  2. 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. 3. GET /batches/{id}/result Tả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.

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

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.

Hãy xác minh phần thân đúng như khi nhận được. Framework phân tích JSON rồi tuần tự hóa lại sẽ làm thay đổi byte và chữ ký sẽ không khớp.
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ó.
GET POST https://namegender.com/api/v1/gender/countries
Markdown

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ố.

Đây không phải là suy luận về quốc gia gốc hoặc dân tộc, và không được sử dụng như vậy. Thống kê có số đếm chỉ tồn tại cho mười một quốc gia: Mỹ, Anh, Pháp, Canada, Tây Ban Nha, Ireland, Na Uy, Áo, Israel, Ba Lan và Thụy Sĩ. Do đó, truy vấn "Mehmet" xếp Thụy Sĩ và Pháp ở vị trí đầu tiên, mỗi nước khoảng 29%, và Thổ Nhĩ Kỳ hoàn toàn không xuất hiện trong xếp hạng — Thổ Nhĩ Kỳ không công bố số lượng. Thổ Nhĩ Kỳ xuất hiện trong `attested_in`.
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.

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

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.

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

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.

Đây không phải là xác minh danh tính và không bao giờ gọi một cái tên là giả. Hãy dùng `implausible` và `suspicious` để đánh dấu một bản ghi hoặc yêu cầu thêm thông tin, không phải để tự động từ chối mọi người.
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á.

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

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.

Đây là mô tả một nhóm, không phải một người. Với hầu hết các tên, một nửa ở giữa trải dài từ 10 đến 25 năm. Hãy dùng cho phân tích đối tượng, phân khúc và nghiên cứu, không bao giờ dùng để quyết định bất cứ điều gì về một người: tín dụng, tuyển dụng, nhà ở, bảo hiểm, xét điều kiện hay kiểm tra tuổi.
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.

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

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.

Hỗ trợ
Chữ viết Arabic

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.

Ký tự Hán

Đượ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.

Tiếng Hàn

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.

Kana tiếng Nhật

Hiragana và katakana được đọc chính xác (ひろし → Hiroshi).

Cyrillic

Các tên Nga, Ukraina, Bulgaria và Serbia được chuyển đổi trực tiếp.

Devanagari

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").

Không hỗ trợ
Kanji tiếng Nhật

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

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.
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.