Tiếp tục → Tổng quan

Tài liệu tham khảo REST API

Bốn 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 Đăng ký miễn phí

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?name=Ay%C5%9Fe&country=TR" \
  -H "Authorization: Bearer YOUR_API_KEY"
<?php

$query = http_build_query(['name' => 'Ayşe', 'country' => 'TR']);

$ch = curl_init('https://namegender.com/api?' . $query);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY'],
]);

$result = json_decode(curl_exec($ch), true);

echo $result['gender'];       // female
echo $result['probability'];  // 100
const params = new URLSearchParams({ name: 'Ayşe', country: 'TR' });

const response = await fetch(`https://namegender.com/api?${params}`, {
  headers: { Authorization: 'Bearer YOUR_API_KEY' },
});

const result = await response.json();

console.log(result.gender);       // "female"
console.log(result.probability);  // 100
import requests

response = requests.get(
    "https://namegender.com/api",
    params={"name": "Ayşe", "country": "TR"},
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)

result = response.json()
print(result["gender"])       # female
print(result["probability"])  # 100
require "net/http"
require "json"

uri = URI("https://namegender.com/api")
uri.query = URI.encode_www_form(name: "Ayşe", country: "TR")

request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts JSON.parse(response.body)["gender"]   # female
req, _ := http.NewRequest("GET", "https://namegender.com/api?name=Ay%C5%9Fe&country=TR", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")

resp, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var result struct {
    Gender      string `json:"gender"`
    Probability int    `json:"probability"`
}
json.NewDecoder(resp.Body).Decode(&result)

fmt.Println(result.Gender)   // female

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

Truyền khóa API của bạn theo một trong ba cách. Tiêu đề Authorization được khuyến nghị: chuỗi truy vấn có thể xuất hiện trong nhật ký máy chủ và lịch sử trình duyệt.

Tiêu đề Authorization (được khuyến nghị)
Authorization: Bearer ng_live_xxxxxxxxxxxx
Tiêu đề tùy chỉnh
X-Api-Key: ng_live_xxxxxxxxxxxx
Tham số truy vấn
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
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

Một API, bốn loại đầu vào, và công cụ hàng loạt xử lý các tệp mà các dịch vụ khác không thể.

Xem tất cả
GET · POST https://namegender.com/api

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).
askToAI
tùy chọn
boolean Quay lại mô hình ngôn ngữ khi tên không có trong cơ sở dữ liệu. Tốn thêm một tín chỉ.
forceToGenderize
tùy chọn
boolean Trả về giới tính có khả năng xảy ra nhất ngay cả khi độ tin cậy dưới ngưỡng. Tắt theo mặc định, vì một câu trả lời tung đồng xu được trình bày là chắc chắn còn tệ hơn không có câu trả lời.
curl "https://namegender.com/api?name=Jordan" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "used_credits": 1,
  "remaining_credits": 49999,
  "expires": null,
  "q": "Jordan",
  "name": "Jordan",
  "gender": "male",
  "country": null,
  "total_names": 62240,
  "probability": 84,
  "confidence": "high",
  "duration": "1ms",
  "source": "db",
  "matched_as": null
}
GET · POST https://namegender.com/api/email

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).
askToAI
tùy chọn
boolean Quay lại mô hình ngôn ngữ khi tên không có trong cơ sở dữ liệu. Tốn thêm một tín chỉ.

forceToGenderize không khả dụng ở đây: tên được trích xuất nội bộ, do đó ép buộc kết quả trên một phép trích xuất không chắc chắn kết hợp hai phỏng đoán.

curl "https://namegender.com/api/email?email=ayse.yilmaz84%40example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "q": "ayse.yilmaz84@example.com",
  "name": "Ayse",
  "gender": "female",
  "probability": 95,
  "confidence": "unverified",
  "total_names": 655,
  "duration": "1ms",
  "source": "db"
}
GET · POST https://namegender.com/api/username

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).
askToAI
tùy chọn
boolean Quay lại mô hình ngôn ngữ khi tên không có trong cơ sở dữ liệu. Tốn thêm một tín chỉ.
forceToGenderize
tùy chọn
boolean Trả về giới tính có khả năng xảy ra nhất ngay cả khi độ tin cậy dưới ngưỡng. Tắt theo mặc định, vì một câu trả lời tung đồng xu được trình bày là chắc chắn còn tệ hơn không có câu trả lời.
curl "https://namegender.com/api/username?username=AyseYilmaz84" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "status": true,
  "q": "AyseYilmaz84",
  "name": "Ayse",
  "gender": "female",
  "probability": 95,
  "confidence": "unverified",
  "source": "db"
}
POST https://namegender.com/api/bulk

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.
curl -X POST "https://namegender.com/api/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"names": ["Ayşe", "Mehmet", "Priya", "Wei"]}'
<?php

$ch = curl_init('https://namegender.com/api/bulk');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'names' => ['Ayşe', 'Mehmet', 'Priya', 'Wei'],
    ]),
]);

$data = json_decode(curl_exec($ch), true);

foreach ($data['results'] as $row) {
    printf("%-8s %-7s %d%%\n", $row['q'], $row['gender'] ?? '?', $row['probability']);
}
const response = await fetch('https://namegender.com/api/bulk', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ names: ['Ayşe', 'Mehmet', 'Priya', 'Wei'] }),
});

const { results, summary } = await response.json();

console.log(summary.match_rate);   // 100
results.forEach(r => console.log(r.q, r.gender, r.probability));
import requests

response = requests.post(
    "https://namegender.com/api/bulk",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json={"names": ["Ayşe", "Mehmet", "Priya", "Wei"]},
)

data = response.json()
print(data["summary"]["match_rate"])   # 100

for row in data["results"]:
    print(row["q"], row["gender"], row["probability"])
{
  "status": true,
  "used_credits": 4,
  "remaining_credits": 49995,
  "duration": "2ms",
  "summary": {
    "total": 4,
    "identified": 4,
    "unknown": 0,
    "match_rate": 100
  },
  "results": [
    { "q": "Ayşe",   "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Mehmet", "gender": "male",   "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Priya",  "gender": "female", "probability": 95, "total_names": 0, "confidence": "unverified", "source": "db" },
    { "q": "Wei",    "gender": "male",   "probability": 85, "total_names": 0, "confidence": "unverified", "source": "db" }
  ]
}

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.

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

Tài khoản & hạn ngạch

Kiểm tra số dư còn lại của bạn mà không tốn một tín chỉ.

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

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?name=%D9%85%D8%AD%D9%85%D8%AF" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 100, "source": "script", "matched_as": "mahamad" }

# Çince — soyadı ayıklanır, verilen ad sorgulanır
curl "https://namegender.com/api?name=%E6%9D%8E%E6%98%8E" -H "Authorization: Bearer KEY"
# -> { "gender": "male", "probability": 92, "source": "db" }

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ả
status boolean false khi yêu cầu thất bại. Kiểm tra điều này trước tiên.
used_credits integer Tín dụng mà yêu cầu này đã tiêu thụ.
remaining_credits integer Tín dụng còn lại sau yêu cầu này.
expires null Luôn là null. Tín dụng đã mua không hết hạn.
q string Đầu vào của bạn, được phản hồi lại không thay đổi.
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ọ.
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.
total_names integer Có bao nhiêu người thực tế câu trả lời này dựa trên. 0 có nghĩa là nguồn cung cấp tỷ lệ phần trăm thay vì số lượng, không phải là câu trả lời yếu.
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.
duration string Thời gian xử lý phía máy chủ.

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

Lỗi trả về body JSON với status: false và chuỗi lỗi có thể đọc bằng máy. Khớp theo lỗi, không phải theo thông báo: thông báo được dịch và có thể thay đổi.

HTTP Ý nghĩa
missing_key 401 API key bị thiếu. Truyền nó dưới dạng tham số "key" hoặc header Authorization: Bearer.
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.
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.
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.
{
  "status": false,
  "error": "no_credits",
  "message": "You are out of credits. Buy more or wait for your daily free quota to reset.",
  "request_id": "req_9c1f5b2a7e0d4a13",
  "docs": "https://namegender.com/docs#error-no_credits"
}

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.

Di chuyển từ nhà cung cấp khác

Các trường phản hồi và tên tham số của chúng tôi tuân theo quy ước phổ biến, vì vậy việc chuyển đổi thường có nghĩa là thay đổi một dòng: base URL.

- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY

askToAI và forceToGenderize giữ lại cách viết gốc của chúng vì lý do chính xác này. Nếu một trường bạn dựa vào bị thiếu, hãy cho chúng tôi biết và chúng tôi sẽ thêm nó.

Mã hóa đầu vào của bạn

Các tên chứa khoảng trắng và ký tự không phải ASCII. URL-encode giá trị trước khi đặt nó vào chuỗi truy vấn, hoặc sử dụng POST với body JSON.

Ayşe Yılmaz  ->  Ay%C5%9Fe%20Y%C4%B1lmaz
محمد          ->  %D9%85%D8%AD%D9%85%D8%AF
中村           ->  %E4%B8%AD%E6%9D%91