Dokumentacja REST API
Cztery endpointy, jeden format odpowiedzi. Wszystko poniżej działa na żywo z Twoim kontem.
https://namegender.com/api
Zarejestruj się za darmo
Szybki start
Utwórz klucz w panelu, a następnie wyślij pierwsze zapytanie. SDK nie jest wymagany.
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
Każdy endpoint zwraca tę samą strukturę, więc możesz zmieniać dane wejściowe bez zmiany kodu parsowania.
Uwierzytelnianie
Przekaż swój klucz API na jeden z trzech sposobów. Zalecane jest użycie nagłówka Authorization: ciągi zapytań pozostają w logach serwera i historii przeglądarki.
Authorization: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
Możesz ograniczyć klucz do określonych adresów IP z poziomu panelu.
Biblioteki klienckie
Jeden API, cztery typy danych wejściowych i narzędzia zbiorcze obsługujące pliki, na których inne usługi się zawodzą.
Pokaż wszystkohttps://namegender.com/api
Płeć z imienia
Akceptuje imię lub pełne imię i nazwisko. Tytuły, imiona dodatnie i nazwiska są usuwane przed wyszukiwaniem, więc "Dr. Ayşe Yılmaz" i "Ayşe" dają ten sam wynik.
| Parameter | Typ | Opis |
|---|---|---|
name
wymagane
|
string
|
Imię do klasyfikacji. Imię lub pełne imię i nazwisko. |
country
opcjonalne
|
string
|
Kod kraju ISO 3166-1 alpha-2. Zwiększa dokładność dla imion, których płeć różni się w zależności od regionu, takich jak Andrea (mężczyzna we Włoszech, kobieta w Niemczech). |
askToAI
opcjonalne
|
boolean
|
Wróć do modelu językowego, gdy imienia nie ma w bazie danych. Kosztuje jeden dodatkowy kredyt. |
forceToGenderize
opcjonalne
|
boolean
|
Zwróć najbardziej prawdopodobną płeć, nawet gdy pewność jest poniżej progu. Domyślnie wyłączone, ponieważ odpowiedź na rzut monety podana jako pewna jest gorsza niż brak odpowiedzi. |
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
}
https://namegender.com/api/email
Płeć z adresu e-mail
Wyodrębnia osobę z części lokalnej adresu, następnie ją klasyfikuje. "ayse.yilmaz84@example.com" rozwiązuje się do Ayşe.
| Parameter | Typ | Opis |
|---|---|---|
email
wymagane
|
string
|
Adres email. Używana jest tylko część przed @. |
country
opcjonalne
|
string
|
Kod kraju ISO 3166-1 alpha-2. Zwiększa dokładność dla imion, których płeć różni się w zależności od regionu, takich jak Andrea (mężczyzna we Włoszech, kobieta w Niemczech). |
askToAI
opcjonalne
|
boolean
|
Wróć do modelu językowego, gdy imienia nie ma w bazie danych. Kosztuje jeden dodatkowy kredyt. |
forceToGenderize nie jest dostępny tutaj: imię jest wyodrębniane wewnętrznie, więc wymuszenie wyniku na niepewnym wyodrębnieniu łączy dwie domysły.
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"
}
https://namegender.com/api/username
Płeć na podstawie nazwy użytkownika
Obsługuje camelCase, snake_case, cyfry na końcu i znaki @ na początku. "AyseYilmaz84" rozwiązuje się do Ayşe.
| Parameter | Typ | Opis |
|---|---|---|
username
wymagane
|
string
|
Nazwa użytkownika lub pseudonim. Znaki @ na początku są ignorowane. |
country
opcjonalne
|
string
|
Kod kraju ISO 3166-1 alpha-2. Zwiększa dokładność dla imion, których płeć różni się w zależności od regionu, takich jak Andrea (mężczyzna we Włoszech, kobieta w Niemczech). |
askToAI
opcjonalne
|
boolean
|
Wróć do modelu językowego, gdy imienia nie ma w bazie danych. Kosztuje jeden dodatkowy kredyt. |
forceToGenderize
opcjonalne
|
boolean
|
Zwróć najbardziej prawdopodobną płeć, nawet gdy pewność jest poniżej progu. Domyślnie wyłączone, ponieważ odpowiedź na rzut monety podana jako pewna jest gorsza niż brak odpowiedzi. |
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"
}
https://namegender.com/api/bulk
Żądanie zbiorcze
Wyślij do 100 imion w jednym żądaniu. Użyj tego zamiast pętli: jedno wywołanie zbiorcze dla 100 imion to jedna podróż w obie strony i jedno zdeduplikowane wyszukiwanie.
| Parameter | Typ | Opis |
|---|---|---|
names
wymagane
|
string[]
|
Tablica imion. Maksymalnie 100 pozycji. |
type
opcjonalne
|
string
|
Co stanowią pozycje: imię, email lub nazwa użytkownika. Domyślnie imię. |
country
opcjonalne
|
string
|
Zastosowane do każdej pozycji w żądaniu. |
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" }
]
}
Wyniki są zwracane w tej samej kolejności, w której je wysłałeś. Punkty są pobierane za każde imię, a całe żądanie jest odrzucane przed wykonaniem pracy, jeśli Twoje saldo jest niewystarczające, więc nigdy nie otrzymasz półprzetworzonej partii.
Blok podsumowania pokazuje wskaźnik zgodności na pierwszy rzut oka, abyś mógł zdecydować, czy dane wejściowe wymagają czyszczenia przed przetworzeniem reszty.
https://namegender.com/api/me
Konto i przydział
Sprawdź pozostałe saldo bez wydawania punktu.
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
}
Skrypty niełacińskie
Wyślij imię w jego oryginalnym alfabecie, a my połączymy je z danymi referencyjnymi. Bez dodatkowych parametrów: automatycznie rozpoznajemy alfabet i dobieramy odpowiednią strategię.
Pismo arabskie pomija samogłoski krótkie, dlatego محمد transkrybuje się na "mhmd", podczas gdy nasze dane zawierają "muhammed". Dopasowujemy na podstawie wzoru spółgłosek i zachowujemy znak żeński ة, aby خالد (Khalid) i خالدة (Khalida) pozostały oddzielne. Obejmuje również imiona perskie i urdu zapisane alfabetem arabskim.
Konwertowane na Pinyin. Nazwisko pojawia się na początku w języku chińskim, więc 李明 ma nazwisko 李 (Li) i imię 明 (Ming) — usuwamy nazwisko przed wyszukiwaniem. Pojedynczy znak to pełne imię i jest traktowany jako jedno.
Takie samo obsługiwanie nazwiska na początku jak w chińskim, z użyciem powszechnych koreańskich nazwisk.
Hiragana i katakana są odczytywane prawidłowo (ひろし → Hiroshi).
Imiona rosyjskie, ukraińskie, bułgarskie i serbskie transkrybują się bezpośrednio.
Imiona hindi, marathi i nepalskie. Obsługujemy samogłoskę końcową (राहुल → Rahul, nie "Rahula").
Japońskie kanji i chińskie znaki zajmują ten sam zakres Unicode, dlatego nie możemy ich rozróżnić na podstawie samych znaków. Wprowadzenie Han jest odczytywane jako chiński: nazwa kanji, którą już nie posiadamy dokładnie, otrzymuje wymowę mandaryńską, która dla japońskiej nazwy jest zwykle błędna (健太 czytane jako "jian tai", podczas gdy nazwa to Kenta). Nazwy, które posiadamy, pasują dokładnie i są poprawne. Aby mieć pewność, wyślij japońskie nazwy w kana lub alfabecie łacińskim.
Tajski pomija samogłoski jak arabski i potrzebuje własnej warstwy dopasowania. Jeszcze nie zbudowane, zwraca 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" }
Gdy nie możemy w ogóle przełożyć skryptu, odpowiedź to gender: null z source: none. Sprawdź pole source: script oznacza, że przepisaliśmy transliterację, db oznacza, że dopasowaliśmy bezpośrednio wysłane znaki. Te dwa niosą różne zaufanie i pokażemy ci, które otrzymałeś.
Pola odpowiedzi
Identyczne we wszystkich endpointach.
| Pole | Typ | Opis |
|---|---|---|
status
|
boolean
|
false, gdy żądanie nie powiodło się. Sprawdź to w pierwszej kolejności. |
used_credits
|
integer
|
Liczba punktów zużytych przez to żądanie. |
remaining_credits
|
integer
|
Liczba punktów pozostałych po tym żądaniu. |
expires
|
null
|
Zawsze null. Zakupione punkty nie wygasają. |
q
|
string
|
Twoje dane wejściowe, powtórzone bez zmian. |
name
|
string
|
Imię, które faktycznie sprawdziliśmy po usunięciu tytułów i nazwisk. |
gender
|
string
|
male, female, lub null, gdy nie mamy wystarczającej pewności. |
country
|
string
|
Kraj, z którego pochodzą statystyki, lub null dla globalnego agregatu. |
total_names
|
integer
|
Liczba rzeczywistych osób, na których opiera się ta odpowiedź. 0 oznacza, że źródło podaje proporcje, a nie liczby — nie że odpowiedź jest słaba. |
probability
|
integer
|
Pewność co do podanej płci, od 50 do 100. 0, gdy płeć to null. |
duration
|
string
|
Czas przetwarzania po stronie serwera. |
Dwa pola, których nie oferują inne usługi
source mówi, skąd pochodzi odpowiedź: z bazy referencyjnej, z dopasowania rozmytego czy z rezerwowego modelu AI. matched_as wskazuje wpis, na który trafiło dopasowanie rozmyte. Razem pozwalają Ci ocenić, na ile ufać jednemu wynikom zamiast przyjmować go na wiarę.
| Pole | Typ | Opis |
|---|---|---|
source
|
string
|
db, fuzzy, llm, lub none. |
confidence
|
string
|
wysoka, średnia, niska, niezweryfikowana lub nieznana, na podstawie dostępnych danych. |
matched_as
|
string
|
W przypadku dopasowania rozmytego — wpis z bazy, który się dopasował. W przeciwnym razie null. |
Kody błędów
Błędy zwracają treść JSON ze statusem: false i maszynowo czytanym stringiem błędu. Porównuj błąd, nie wiadomość: wiadomości są tłumaczone i mogą się zmienić.
| Kod | HTTP | Znaczenie |
|---|---|---|
missing_key |
401 | Klucz API jest wymagany. Przekaż go jako parametr "key" lub nagłówek Authorization: Bearer. |
invalid_key |
401 | Ten klucz API jest nieprawidłowy. |
revoked_key |
401 | Ten klucz API został wycofany. |
blocked |
403 | To konto zostało wstrzymane. Skontaktuj się z pomocą techniczną. |
email_not_verified |
403 | Adres e-mail tego konta nie został jeszcze potwierdzony. Otwórz link potwierdzający, który wysłaliśmy, albo poproś o nowy w panelu. |
ip_not_allowed |
403 | Żądania z tego adresu IP nie są dozwolone dla tego klucza. |
forbidden |
403 | Nie masz uprawnień do wykonania tej czynności. |
no_credits |
402 | Skończyły się Ci kredyty. Kup więcej lub czekaj na reset codziennego bezpłatnego limitu. |
missing_input |
400 | Parametr "name" jest wymagany. |
invalid_input |
422 | Parametr "name" jest nieprawidłowy. |
too_many_items |
422 | Maksymalnie 100 elementów można wysłać w jednym żądaniu. |
ai_consent_required |
422 | askToAI przesyła nazwę do zewnętrznego dostawcy AI, na co to konto nie wyraziło zgody. Sprawdź pole "ai", aby dowiedzieć się, który to dostawca, a następnie włącz wyszukiwania AI w ustawieniach pulpitu. |
unknown_endpoint |
404 | Pod tą ścieżką nie istnieje endpoint. Sprawdź adres URL w dokumentacji API. |
method_not_allowed |
405 | Ten endpoint nie akceptuje żądań DELETE. |
payload_too_large |
413 | Treść żądania jest zbyt duża. |
rate_limited |
429 | Zbyt wiele żądań. Zwolnij tempo i spróbuj ponownie za chwilę. |
not_ready |
503 | Baza danych imion jest odbudowywana. Spróbuj za chwilę. |
server_error |
500 | Coś poszło nie tak po naszej stronie. Zostaliśmy powiadomieni. |
{
"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"
}
Limity częstotliwości
Normalne użytkowanie nie powoduje osiągnięcia limitu. Limit istnieje po to, aby zatrzymać wyciekły klucz przed nadużyciem. Liczy się na klucz API, a nie na adres IP, dzięki czemu kilka klientów na jednym serwerze nie konsumuje nawzajem swojego limitu.
Obecny limit: 1 200 żądań na minutę na klucz. Potrzebujesz więcej? Skontaktuj się z nami, a podniesiosiemy limit na Twoim koncie.
Każda odpowiedź zawiera standardowe nagłówki X-RateLimit-Limit i X-RateLimit-Remaining.
Migracja z innego dostawcy
Nasze pola odpowiedzi i nazwy parametrów są zgodne ze standardową konwencją, więc przełączenie zwykle oznacza zmianę jednej linii: bazowego adresu URL.
- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY
askToAI i forceToGenderize zachowują oryginalną pisownię z dokładnie tego powodu. Jeśli brakuje Ci pola, z którego korzystasz, powiedz nam, a dodamy je.
Koduj dane wejściowe
Imiona zawierają spacje i znaki spoza ASCII. Koduj wartość przy pomocy URL-encode zanim umieścisz ją w query string, lub użyj POST z JSON body.
Ayşe Yılmaz -> Ay%C5%9Fe%20Y%C4%B1lmaz
محمد -> %D9%85%D8%AD%D9%85%D8%AF
中村 -> %E4%B8%AD%E6%9D%91