Dalej → Przegląd

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.

Nagłówek Authorization (zalecane)
Authorization: Bearer ng_live_xxxxxxxxxxxx
Nagłówek niestandardowy
X-Api-Key: ng_live_xxxxxxxxxxxx
Parametr zapytania
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
Nigdy nie ujawniaj swojego klucza w kodzie po stronie klienta. Żądania z przeglądarki lub aplikacji mobilnej powinny przechodzić przez Twój własny backend.

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ż wszystko
GET · POST https://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
}
GET · POST 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"
}
GET · POST 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"
}
POST 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.

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

Obsługiwane
Alfabet arabski

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.

Znaki chińskie

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.

Koreański

Takie samo obsługiwanie nazwiska na początku jak w chińskim, z użyciem powszechnych koreańskich nazwisk.

Kana japońska

Hiragana i katakana są odczytywane prawidłowo (ひろし → Hiroshi).

Cyrylica

Imiona rosyjskie, ukraińskie, bułgarskie i serbskie transkrybują się bezpośrednio.

Devanagari

Imiona hindi, marathi i nepalskie. Obsługujemy samogłoskę końcową (राहुल → Rahul, nie "Rahula").

Nieobsługiwane
Kanji japońskie

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

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