Continuer → Aperçu

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.

Header Authorization (recommandé)
Authorization: Bearer ng_live_xxxxxxxxxxxx
Header personnalisé
X-Api-Key: ng_live_xxxxxxxxxxxx
Paramètre de requête
https://namegender.com/api?name=Ayşe&key=ng_live_xxxxxxxxxxxx
N'exposez jamais votre clé dans du code côté client. Les appels depuis un navigateur ou une application mobile doivent passer par votre propre backend.

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

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

Supporté
Script arabe

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.

Caractères chinois

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.

Coréen

Même gestion du nom de famille en premier qu'en chinois, en utilisant les noms de famille coréens courants.

Kana japonais

L'hiragana et le katakana sont lus correctement (ひろし → Hiroshi).

Cyrillique

Les prénoms russes, ukrainiens, bulgares et serbes se translittèrent directement.

Devanagari

Prénoms hindi, marathi et népalais. La voyelle finale inhérente est gérée (राहुल → Rahul, et non « Rahula »).

Non supporté
Kanji japonais

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.

Thaï

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