Référence API REST
Quatre endpoints, une seule forme de réponse. Tout ci-dessous est actif sur votre compte.
https://namegender.com/api
S'inscrire gratuitement
Démarrage rapide
Créez une clé dans votre tableau de bord, puis envoyez votre première requête. Aucun SDK nécessaire.
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
Chaque endpoint retourne la même structure, vous pouvez donc changer les entrées sans modifier votre code d'analyse.
Authentification
Transmettez votre clé API de l'une des trois façons. Le header Authorization est recommandé : les chaînes de requête se retrouvent dans les journaux serveur et l'historique du navigateur.
Authorization: Bearer ng_live_xxxxxxxxxxxx
X-Api-Key: ng_live_xxxxxxxxxxxx
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
Vous pouvez restreindre une clé à des adresses IP spécifiques depuis le tableau de bord.
Bibliothèques client
Une API, quatre types d'entrée, et des outils en masse qui traitent les fichiers que les autres services ne peuvent pas gérer.
Voir touthttps://namegender.com/api
Genre à partir du nom
Accepte un prénom ou un nom complet. Les titres, prénoms supplémentaires et noms de famille sont supprimés avant la recherche, donc « Dr. Ayşe Yılmaz » et « Ayşe » donnent la même réponse.
| Paramètre | Type | Description |
|---|---|---|
name
requis
|
string
|
Le nom à classifier. Prénom ou nom complet. |
country
optionnel
|
string
|
Code de pays ISO 3166-1 alpha-2. Améliore la précision pour les noms dont le genre varie selon la région, comme Andrea (masculin en Italie, féminin en Allemagne). |
askToAI
optionnel
|
boolean
|
Recourir à un modèle de langage lorsque le nom n'est pas dans la base de données. Coûte un crédit supplémentaire. |
forceToGenderize
optionnel
|
boolean
|
Retourner le genre le plus probable même si la confiance est inférieure au seuil. Désactivé par défaut, car une réponse au hasard présentée comme certaine est pire qu'aucune réponse. |
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
Genre à partir de l'email
Extrait la personne de la partie locale de l'adresse, puis la classe. « ayse.yilmaz84@example.com » correspond à Ayşe.
| Paramètre | Type | Description |
|---|---|---|
email
requis
|
string
|
L'adresse email. Seule la partie avant @ est utilisée. |
country
optionnel
|
string
|
Code de pays ISO 3166-1 alpha-2. Améliore la précision pour les noms dont le genre varie selon la région, comme Andrea (masculin en Italie, féminin en Allemagne). |
askToAI
optionnel
|
boolean
|
Recourir à un modèle de langage lorsque le nom n'est pas dans la base de données. Coûte un crédit supplémentaire. |
forceToGenderize n'est pas disponible ici : le nom est extrait en interne, forcer un résultat sur une extraction incertaine composera deux suppositions.
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
Genre à partir de l'identifiant
Gère camelCase, snake_case, les chiffres à la fin et les @ en début. « AyseYilmaz84 » correspond à Ayşe.
| Paramètre | Type | Description |
|---|---|---|
username
requis
|
string
|
L'identifiant ou le nom d'utilisateur. Un @ au début est ignoré. |
country
optionnel
|
string
|
Code de pays ISO 3166-1 alpha-2. Améliore la précision pour les noms dont le genre varie selon la région, comme Andrea (masculin en Italie, féminin en Allemagne). |
askToAI
optionnel
|
boolean
|
Recourir à un modèle de langage lorsque le nom n'est pas dans la base de données. Coûte un crédit supplémentaire. |
forceToGenderize
optionnel
|
boolean
|
Retourner le genre le plus probable même si la confiance est inférieure au seuil. Désactivé par défaut, car une réponse au hasard présentée comme certaine est pire qu'aucune réponse. |
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
Requête en masse
Envoyez jusqu'à 100 noms dans une seule requête. Utilisez ceci au lieu de boucler : un appel en masse pour 100 noms est un seul aller-retour et une recherche dédupliquée.
| Paramètre | Type | Description |
|---|---|---|
names
requis
|
string[]
|
Tableau de noms. Maximum 100 éléments. |
type
optionnel
|
string
|
Ce que sont les éléments : name, email ou username. Par défaut name. |
country
optionnel
|
string
|
Appliqué à chaque élément de la requête. |
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" }
]
}
Les résultats sont retournés dans le même ordre que celui dans lequel vous les avez envoyés. Les crédits sont débités par nom, et l'intégralité de la requête est rejetée avant tout traitement si votre solde est insuffisant, donc vous n'obtiendrez jamais un lot partiellement traité.
Le bloc de résumé vous montre le taux de correspondance d'un coup d'œil, pour que vous puissiez décider si l'entrée a besoin d'être nettoyée avant de traiter le reste.
https://namegender.com/api/me
Compte et quota
Vérifiez votre solde restant sans dépenser de crédit.
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
}
Scripts non-latins
Envoyez un prénom dans son propre script et nous le connectons aux données de référence. Aucun paramètre supplémentaire : nous détectons le script et sélectionnons la bonne stratégie pour celui-ci.
L'écriture arabe omet les voyelles courtes, donc محمد se translittère en « mhmd » alors que nos données contiennent « muhammed ». Nous effectuons une correspondance sur la structure consonantique et conservons le marqueur féminin ة pour que خالد (Khalid) et خالدة (Khalida) restent distincts. Couvre également les prénoms persan et ourdou écrits en caractères arabes.
Convertis en Pinyin. Le nom de famille vient en premier en chinois, donc 李明 a pour nom 李 (Li) et pour prénom 明 (Ming) — nous retirons le nom de famille avant la recherche. Un seul caractère constitue un prénom complet et est traité comme un seul.
Même gestion du nom de famille en premier qu'en chinois, en utilisant les noms de famille coréens courants.
L'hiragana et le katakana sont lus correctement (ひろし → Hiroshi).
Les prénoms russes, ukrainiens, bulgares et serbes se translittèrent directement.
Prénoms hindi, marathi et népalais. La voyelle finale inhérente est gérée (राहुल → Rahul, et non « Rahula »).
Les caractères kanji japonais et les caractères chinois occupent la même plage Unicode, nous ne pouvons donc pas les distinguer par les caractères seuls. L'entrée Han est lue comme du chinois : un nom kanji que nous ne possédons pas déjà textuellement reçoit sa lecture mandarine, ce qui pour un nom japonais est généralement incorrect (健太 se lit « jian tai » alors que le nom est Kenta). Les noms que nous possédons correspondent exactement et sont corrects. Envoyez les noms japonais en kana ou en caractères latins pour être sûr.
Le thaï omet les voyelles comme l'arabe et nécessite sa propre couche de correspondance. Pas encore implémenté, donc ces requêtes retournent 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" }
Quand nous ne pouvons pas du tout convertir un script, la réponse est gender: null avec source: none. Vérifiez le champ source : script signifie que nous avons translittéré, db signifie que nous avons fait correspondre directement les caractères que vous avez envoyés. Les deux ont des niveaux de confiance différents, et nous vous montrons lequel vous avez obtenu.
Champs de la réponse
Identiques sur tous les endpoints.
| Champ | Type | Description |
|---|---|---|
status
|
boolean
|
false quand la requête a échoué. Vérifiez ceci en premier. |
used_credits
|
integer
|
Crédits consommés par cette requête. |
remaining_credits
|
integer
|
Crédits restants après cette requête. |
expires
|
null
|
Toujours null. Les crédits achetés n'expirent pas. |
q
|
string
|
Votre entrée, renvoyée inchangée. |
name
|
string
|
Le nom que nous avons réellement recherché après suppression des titres et noms de famille. |
gender
|
string
|
male, female, ou null si nous ne sommes pas suffisamment confiants pour nous prononcer. |
country
|
string
|
Le pays d'où proviennent les statistiques, ou null pour l'agrégat mondial. |
total_names
|
integer
|
Le nombre de vraies personnes sur lesquelles cette réponse repose. 0 signifie que la source fournit des proportions plutôt que des décomptes, non que la réponse est faible. |
probability
|
integer
|
Confiance dans le genre indiqué, de 50 à 100. 0 quand genre est null. |
duration
|
string
|
Temps de traitement côté serveur. |
Deux champs que les autres services ne vous proposent pas
source indique d'où provient la réponse : la base de données de référence, une correspondance approchée, ou la solution de secours IA. matched_as nomme l'entrée sur laquelle la correspondance approchée a abouti. Ensemble, ils vous permettent de décider à quel point faire confiance à un résultat plutôt que de l'accepter aveuglément.
| Champ | Type | Description |
|---|---|---|
source
|
string
|
db, fuzzy, llm, ou none. |
confidence
|
string
|
élevée, moyenne, basse, non vérifiée ou inconnue, selon la preuve d'échantillon. |
matched_as
|
string
|
Pour une correspondance approchée, l'entrée de la base de données qui a correspondu. Sinon null. |
Codes d'erreur
Les erreurs retournent un corps JSON avec status: false et une chaîne d'erreur lisible par machine. Faites correspondre l'erreur, non le message : les messages sont traduits et peuvent changer.
| Code | HTTP | Signification |
|---|---|---|
missing_key |
401 | Clé API manquante. Transmettez-la en tant que paramètre « key » ou en tant que header Authorization: Bearer. |
invalid_key |
401 | Cette clé API n'est pas valide. |
revoked_key |
401 | Cette clé API a été révoquée. |
blocked |
403 | Ce compte a été suspendu. Contactez le support. |
email_not_verified |
403 | L'adresse e-mail de ce compte n'a pas encore été confirmée. Ouvrez le lien de confirmation que nous vous avons envoyé, ou demandez-en un nouveau depuis votre tableau de bord. |
ip_not_allowed |
403 | Les requêtes de cette adresse IP ne sont pas autorisées pour cette clé. |
forbidden |
403 | Vous n'êtes pas autorisé à effectuer cette action. |
no_credits |
402 | Vous n'avez plus de crédits. Achetez-en ou attendez la réinitialisation de votre quota gratuit quotidien. |
missing_input |
400 | Le paramètre « name » est obligatoire. |
invalid_input |
422 | Le paramètre « name » n'est pas valide. |
too_many_items |
422 | Un maximum de 100 éléments peuvent être envoyés dans une seule requête. |
ai_consent_required |
422 | askToAI envoie le nom à un fournisseur d'IA tiers auquel ce compte n'a pas consenti. Consultez le champ « ai » pour identifier le fournisseur, puis activez les recherches IA dans les paramètres de votre tableau de bord. |
unknown_endpoint |
404 | Il n'existe pas d'endpoint à ce chemin. Vérifiez l'URL dans la documentation de l'API. |
method_not_allowed |
405 | Cet endpoint n'accepte pas les requêtes DELETE. |
payload_too_large |
413 | Le corps de la requête est trop volumineux. |
rate_limited |
429 | Trop de requêtes. Ralentissez et réessayez dans un instant. |
not_ready |
503 | La base de données de noms est en reconstruction. Réessayez dans un moment. |
server_error |
500 | Une erreur est survenue de notre côté. Nous avons été notifiés. |
{
"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"
}
Limites de débit
L'utilisation normale ne déclenche pas de limite. La limite existe pour empêcher qu'une clé compromise soit abusée, et elle s'applique par clé API plutôt que par IP afin que plusieurs clients sur un même serveur ne consomment pas l'allocation les uns des autres.
Limite actuelle : 1 200 requêtes par minute par clé. Besoin de plus ? Demandez et nous l'augmenterons sur votre compte.
Chaque réponse porte les en-têtes standards X-RateLimit-Limit et X-RateLimit-Remaining.
Migration depuis un autre fournisseur
Nos champs de réponse et noms de paramètres suivent la convention courante, de sorte que basculer signifie généralement modifier une ligne : l'URL de base.
- https://api.other-provider.io/api?name=Ayşe&key=KEY
+ https://namegender.com/api?name=Ayşe&key=KEY
askToAI et forceToGenderize conservent leur orthographe d'origine pour exactement cette raison. Si un champ auquel vous vous fiez manque, dites-le nous et nous l'ajouterons.
Encodez votre entrée
Les noms contiennent des espaces et des caractères non-ASCII. Encodez l'URL de la valeur avant de la mettre dans une chaîne de requête, ou utilisez POST avec un corps 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