Riferimento REST API
Quattro endpoint, una struttura di risposta. Tutto sotto è attivo sul tuo account.
https://namegender.com/api
Registrati gratis
Avvio rapido
Crea una chiave nella tua dashboard, poi invia la tua prima richiesta. Non è necessario alcun 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
Ogni endpoint restituisce la stessa struttura, quindi puoi cambiare input senza modificare il codice di parsing.
Autenticazione
Passa la tua chiave API in uno di tre modi. L'intestazione Authorization è consigliata: le stringhe di query finiscono nei log del server e nella cronologia del browser.
Authorization: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
Puoi limitare una chiave a indirizzi IP specifici dalla dashboard.
Librerie client
Un'API, quattro tipi di input e strumenti bulk che gestiscono file con cui altri servizi faticano.
Visualizza tuttohttps://namegender.com/api
Genere da nome
Accetta un nome o un nome completo. I titoli, i nomi centrali e i cognomi vengono eliminati prima della ricerca, quindi "Dr. Ayşe Yılmaz" e "Ayşe" danno la stessa risposta.
| Parametro | Tipo | Descrizione |
|---|---|---|
name
obbligatorio
|
string
|
Il nome da classificare. Nome o nome completo. |
country
facoltativo
|
string
|
Codice paese ISO 3166-1 alpha-2. Migliora l'accuratezza per i nomi il cui genere varia per regione, come Andrea (maschile in Italia, femminile in Germania). |
askToAI
facoltativo
|
boolean
|
Ricadi a un modello linguistico quando il nome non è nel database. Costa un credito aggiuntivo. |
forceToGenderize
facoltativo
|
boolean
|
Restituisci il genere più probabile anche quando la confidenza è sotto la soglia. Disattivato per impostazione predefinita, perché una risposta al 50% presentata come certa è peggio di nessuna risposta. |
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
Genere da email
Estrae la persona dalla parte locale dell'indirizzo, poi classifica quella. "ayse.yilmaz84@example.com" si risolve in Ayşe.
| Parametro | Tipo | Descrizione |
|---|---|---|
email
obbligatorio
|
string
|
L'indirizzo email. Viene utilizzata solo la parte prima di @. |
country
facoltativo
|
string
|
Codice paese ISO 3166-1 alpha-2. Migliora l'accuratezza per i nomi il cui genere varia per regione, come Andrea (maschile in Italia, femminile in Germania). |
askToAI
facoltativo
|
boolean
|
Ricadi a un modello linguistico quando il nome non è nel database. Costa un credito aggiuntivo. |
forceToGenderize non è disponibile qui: il nome viene estratto internamente, quindi forzare un risultato su un'estrazione incerta compone due supposizioni.
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
Genere da username
Gestisce camelCase, snake_case, cifre finali e segni @ iniziali. "AyseYilmaz84" si risolve in Ayşe.
| Parametro | Tipo | Descrizione |
|---|---|---|
username
obbligatorio
|
string
|
Lo username o handle. Un @ iniziale viene ignorato. |
country
facoltativo
|
string
|
Codice paese ISO 3166-1 alpha-2. Migliora l'accuratezza per i nomi il cui genere varia per regione, come Andrea (maschile in Italia, femminile in Germania). |
askToAI
facoltativo
|
boolean
|
Ricadi a un modello linguistico quando il nome non è nel database. Costa un credito aggiuntivo. |
forceToGenderize
facoltativo
|
boolean
|
Restituisci il genere più probabile anche quando la confidenza è sotto la soglia. Disattivato per impostazione predefinita, perché una risposta al 50% presentata come certa è peggio di nessuna risposta. |
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
Richiesta in blocco
Invia fino a 100 nomi in una richiesta. Usa questo invece di fare un ciclo: una chiamata in blocco per 100 nomi è un singolo round trip e una singola ricerca deduplicata.
| Parametro | Tipo | Descrizione |
|---|---|---|
names
obbligatorio
|
string[]
|
Array di nomi. Massimo 100 elementi. |
type
facoltativo
|
string
|
Cosa sono gli elementi: nome, email o username. Predefinito su nome. |
country
facoltativo
|
string
|
Applicato a ogni elemento nella richiesta. |
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" }
]
}
I risultati tornano nello stesso ordine in cui li hai inviati. I crediti vengono addebitati per nome e l'intera richiesta viene rifiutata prima di qualsiasi operazione se il tuo saldo è insufficiente, quindi non avrai mai un batch parzialmente elaborato.
Il blocco di riepilogo ti mostra il tasso di corrispondenza a colpo d'occhio, così puoi decidere se l'input ha bisogno di pulizia prima di elaborare il resto.
https://namegender.com/api/me
Account e quota
Controlla il tuo saldo rimanente senza spendere un credito.
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
}
Script non latini
Invia un nome nel suo script originale e lo colleghiamo ai dati di riferimento. Nessun parametro aggiuntivo: rilieviamo lo script e scegliamo la strategia giusta.
La scrittura araba omette le vocali brevi, quindi محمد si traslittera in "mhmd" mentre i nostri dati contengono "muhammed". Facciamo un match sullo schema consonantico e conserviamo il marker femminile ة, così خالد (Khalid) e خالدة (Khalida) rimangono distinti. Copre anche i nomi persiani e urdu scritti in script arabo.
Convertiti in Pinyin. Il cognome viene per primo in cinese, quindi 李明 ha cognome 李 (Li) e nome proprio 明 (Ming) — rimuoviamo il cognome prima della ricerca. Un singolo carattere è un nome proprio completo e viene trattato come uno.
Stesso trattamento cognome-primo del cinese, usando i cognomi coreani comuni.
Hiragana e katakana vengono letti correttamente (ひろし → Hiroshi).
I nomi russo, ucraino, bulgaro e serbo si traslitterano direttamente.
Nomi hindi, marathi e nepalese. La vocale finale intrinseca è gestita (राहुल → Rahul, non "Rahula").
I caratteri kanji giapponesi e i caratteri cinesi occupano lo stesso intervallo Unicode, quindi non possiamo distinguerli dai caratteri stessi. L'input Han viene letto come cinese: un nome kanji che non possediamo esattamente viene traslitterato secondo la pronuncia mandarino, che per un nome giapponese è solitamente errata (健太 viene letto come "jian tai" quando il nome è Kenta). I nomi che possediamo corrispondono esattamente e sono corretti. Invia i nomi giapponesi in kana o caratteri latini per essere sicuro.
Il thai omette le vocali come l'arabo e ha bisogno del suo strato di matching. Non ancora implementato, quindi questi restituiscono 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" }
Quando non riusciamo a convertire uno script, la risposta è gender: null con source: none. Controlla il campo source: script significa che abbiamo traslitterato, db significa che abbiamo trovato una corrispondenza esatta con i caratteri che hai inviato. I due hanno un livello di confidence diverso e ti mostriamo quale hai ottenuto.
Campi della risposta
Identici su tutti gli endpoint.
| Campo | Tipo | Descrizione |
|---|---|---|
status
|
boolean
|
false quando la richiesta non è riuscita. Controlla questo per primo. |
used_credits
|
integer
|
Crediti consumati da questa richiesta. |
remaining_credits
|
integer
|
Crediti rimasti dopo questa richiesta. |
expires
|
null
|
Sempre null. I crediti acquistati non scadono. |
q
|
string
|
Il tuo input, restituito immutato. |
name
|
string
|
Il nome che abbiamo effettivamente cercato dopo aver rimosso titoli e cognomi. |
gender
|
string
|
male, female, o null quando non siamo abbastanza sicuri. |
country
|
string
|
Il paese da cui provengono le statistiche, o null per l'aggregato globale. |
total_names
|
integer
|
Quante persone reali questa risposta si basa. 0 significa che la fonte fornisce proporzioni anziché conteggi, non che la risposta è debole. |
probability
|
integer
|
Confidenza nel genere indicato, da 50 a 100. 0 quando gender è null. |
duration
|
string
|
Tempo di elaborazione lato server. |
Due campi che altri servizi non forniscono
source ti dice da dove proviene la risposta: dal database di riferimento, da una corrispondenza fuzzy o dal fallback AI. matched_as indica il nome su cui la corrispondenza fuzzy ha trovato un match. Insieme ti permettono di decidere quanto fidarti di un singolo risultato invece di accettarlo per scontato.
| Campo | Tipo | Descrizione |
|---|---|---|
source
|
string
|
db, fuzzy, llm, o none. |
confidence
|
string
|
alta, media, bassa, non verificata o sconosciuta, in base alle prove campionarie. |
matched_as
|
string
|
Per una corrispondenza fuzzy, il record del database che ha trovato un match. Altrimenti null. |
Codici di errore
Gli errori restituiscono un corpo JSON con status: false e una stringa di errore leggibile dalle macchine. Fai corrispondere l'errore, non il messaggio: i messaggi sono tradotti e potrebbero cambiare.
| Codice | HTTP | Significato |
|---|---|---|
missing_key |
401 | Chiave API mancante. Passala come parametro "key" o come header Authorization: Bearer. |
invalid_key |
401 | Questa chiave API non è valida. |
revoked_key |
401 | Questa chiave API è stata revocata. |
blocked |
403 | Questo account è stato sospeso. Contatta il supporto. |
email_not_verified |
403 | L'indirizzo e-mail di questo account non è ancora stato confermato. Apri il link di conferma che ti abbiamo inviato oppure richiedine uno nuovo dalla dashboard. |
ip_not_allowed |
403 | Le richieste da questo indirizzo IP non sono consentite per questa chiave. |
forbidden |
403 | Non sei autorizzato a eseguire questa azione. |
no_credits |
402 | Non hai più crediti. Acquistane altri o attendi il reset della tua quota gratuita giornaliera. |
missing_input |
400 | Il parametro "name" è obbligatorio. |
invalid_input |
422 | Il parametro "name" non è valido. |
too_many_items |
422 | Un massimo di 100 elementi può essere inviato in una richiesta. |
ai_consent_required |
422 | askToAI invia il nome a un provider AI di terze parti, al quale questo account non ha dato il consenso. Vedi il campo "ai" per identificare il provider, quindi abilita le ricerche AI nelle impostazioni del tuo dashboard. |
unknown_endpoint |
404 | Non esiste alcun endpoint a questo percorso. Verifica l'URL nella documentazione dell'API. |
method_not_allowed |
405 | Questo endpoint non accetta richieste DELETE. |
payload_too_large |
413 | Il corpo della richiesta è troppo grande. |
rate_limited |
429 | Troppe richieste. Rallenta e riprova tra poco. |
not_ready |
503 | Il database dei nomi è in fase di ricostruzione. Riprova tra un momento. |
server_error |
500 | Qualcosa è andato storto. Siamo stati notificati. |
{
"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"
}
Limiti di velocità
L'uso normale non raggiunge un limite. Il limite esiste per evitare che una chiave compromessa venga abusata, e si conta per chiave API anziché per IP in modo che più clienti su un server non consumino l'allowance gli uni degli altri.
Limite attuale: 1.200 richieste al minuto per chiave. Hai bisogno di più? Contattaci e lo aumenteremo sul tuo account.
Ogni risposta include gli header standard X-RateLimit-Limit e X-RateLimit-Remaining.
Migrazione da un altro provider
I nostri campi di risposta e nomi di parametri seguono la convenzione comune, quindi il passaggio di solito significa cambiare una riga: l'URL base.
- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY
askToAI e forceToGenderize mantengono la loro ortografia originale esattamente per questo motivo. Se manca un campo su cui conti, faccelo sapere e lo aggiungeremo.
Codifica il tuo input
I nomi contengono spazi e caratteri non-ASCII. Codifica l'URL il valore prima di inserirlo in una stringa di query, oppure usa POST con un corpo 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