GenderAPI.io V2 · Guide d’utilisation

Estimer le genre à partir d’une adresse e-mail

Exploitez l’indice de nom d’une adresse e-mail avec GenderAPI.io V2. Testez l’outil, comparez les options de jeu de données et d’IA, et apprenez à traiter les résultats unknown et les listes d’adresses.

Dernière révision :

Essayez l’API V2

Analysez une adresse e-mail

Jeu de données + IA

Envoyez une valeur et examinez la réponse complète, y compris les résultats inconnus et les crédits consommés.

IA systématique (par défaut) : 2 crédits, unknown compris. Repli : 1 crédit, repli IA et résultats unknown compris. Désactivé, jeu de données uniquement (sans IA) : 1 crédit par requête aboutie, unknown compris. Avec l’analyse des pseudonymes activée : 1 crédit si le jeu de données résout la requête, ou 2 au total si l’IA est utilisée, unknown compris.

La valeur envoyée (adresse e-mail complète) est transmise à GenderAPI.io, puis au service d’IA configuré en mode IA systématique (par défaut) ou si un repli est nécessaire, mais pas en mode Désactivé. Détails du traitement des données.

Aucune clé API enregistrée. L’essai partagé par IP reste disponible tant qu’il lui reste des crédits.

La réponse ci-dessous est une réponse réelle obtenue le 1er octobre 2026. Cliquez sur Analyser pour envoyer une requête.

Réponse V2 réelle · obtenue le 1er octobre 2026
NomThomas
GenreMasculin
Confiance98 %
SourceModèle d’IA
Crédits utilisés2

Cette réponse réelle a été obtenue le 1er octobre 2026 ; seul le solde du compte a été remplacé. Les valeurs en direct peuvent différer. Une estimation n’est pas une identité vérifiée.

Que peut révéler une adresse e-mail ?

Envoyez une adresse syntaxiquement valide avec type: email. GenderAPI.io recherche un indice de nom dans la partie située avant @, puis renvoie une estimation structurée. L’API ne vérifie ni l’existence de la boîte aux lettres, ni son titulaire, ni l’identité de genre de cette personne.

La recherche dans le jeu de données extrait des candidats et peut tester des fragments de longueur limitée. Le mode pseudonyme conserve la recherche par mots, mais n’ajoute pas ces fragments. Si plusieurs enregistrements correspondent, le candidat ayant l’effectif enregistré le plus élevé est retenu ; ce n’est pas forcément le prénom attendu. Vérifiez data.name et data.match avant d’utiliser un nom extrait dans une fiche de contact.

Exemple d’entréeComment l’interpréter
alice.smith@example.comLa partie avant @ fournit des candidats possibles. Une correspondance est possible, mais la valeur seule ne garantit pas quel candidat sera retenu.
alice+news@example.comLa recherche supprime le suffixe commençant par + pour générer ses candidats. L’IA reçoit la valeur envoyée, avec la consigne d’ignorer ce suffixe.
support@example.comUne adresse fonctionnelle ne fournit pas d’indice fiable de nom personnel. N’attribuez pas le genre d’une personne à toute une boîte partagée.
prenses@example.comforceToGenderize permet une tentative fondée sur le sens du pseudonyme si le jeu de données ne résout pas la requête. Dans ce mode, un prénom réel n’est pas exigé.
not-an-emailUne syntaxe invalide renvoie une erreur de validation, et non un résultat unknown abouti.

Interrogez une adresse e-mail depuis votre application

L’exemple utilise votre clé API existante dans l’en-tête Bearer et sélectionne explicitement fallback. Remplacez l’adresse par une valeur que vous êtes autorisé à traiter. N’envoyez country que si vous disposez d’un contexte pertinent : le domaine de l’adresse ne prouve pas où vit une personne. Si vous ne connaissez pas le pays, omettez ce champ.

Définissez GENDERAPI_API_KEY et exécutez l’exemple sur votre serveur. POST maintient l’adresse e-mail hors de l’URL de la requête. Le résultat réel peut différer de la réponse illustrative affichée par l’outil.

Choisissez un langage de programmation. Configurez votre clé API, puis exécutez l'exemple sur votre serveur.

Chaque requête de prédiction est une nouvelle opération facturable, y compris les nouvelles tentatives. Ces exemples ne réessaient pas automatiquement. Vérifiez le statut de facturation avant d'envoyer une autre requête.

Avant l'exécution : accès et gestion des erreurs

Exécutez ces exemples sur votre serveur. Définissez GENDERAPI_API_KEY dans l'environnement du processus avec votre clé API existante. Vérifiez que meta.access.mode vaut api_key : une clé non reconnue peut basculer vers l'essai par IP.

Pour les réponses JSON HTTP 4xx et 5xx, les exemples conservent le corps de l'erreur et renvoient un code de sortie non nul. Vérifiez code, action et meta.usage.billing_status avant de réessayer.

Guide des erreurs et des nouvelles tentatives →
cURL
curl --silent --show-error --fail-with-body --max-time 30 \
  --request POST 'https://api.genderapi.io/api/v2/gender' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{
  "type": "email",
  "value": "alice.smith@example.com",
  "country": "US",
  "options": {
    "ai_mode": "fallback"
  }
}'

cURL 7.76+ dans un shell POSIX. À exécuter dans votre terminal. Documentation de l'environnement d'exécution

JavaScript / Node.js
// Server-side Node.js. Save as example.mjs.
const apiKey = process.env.GENDERAPI_API_KEY;
if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");
const body = {
  "type": "email",
  "value": "alice.smith@example.com",
  "country": "US",
  "options": {
    "ai_mode": "fallback"
  }
};

const response = await fetch("https://api.genderapi.io/api/v2/gender", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(body),
  signal: AbortSignal.timeout(30_000),
  redirect: "error",
});
const raw = await response.text();
if (!(response.headers.get("content-type") ?? "").includes("json")) {
  throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);
}
const result = JSON.parse(raw); // Also accepts application/problem+json.
if (!response.ok) {
  console.error(`HTTP ${response.status}`, result);
  process.exitCode = 1; // A retry is a new operation; inspect billing first.
} else {
  console.log(JSON.stringify(result, null, 2));
  // For batches, inspect every item: HTTP 200 may contain item errors.
}

Node.js 22+ ; fetch intégré. Enregistrez sous example.mjs et exécutez node example.mjs. Documentation de l'environnement d'exécution

Python
import json
import os
import sys
import urllib.error
import urllib.request

api_key = os.environ.get("GENDERAPI_API_KEY")
if not api_key:
    raise RuntimeError("Set GENDERAPI_API_KEY")
body = json.loads("{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}")

class NoRedirect(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

request = urllib.request.Request(
    "https://api.genderapi.io/api/v2/gender",
    method="POST",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + api_key,
        "Content-Type": "application/json",
    },
)
opener = urllib.request.build_opener(NoRedirect())
try:
    response = opener.open(request, timeout=30)
except urllib.error.HTTPError as error:
    response = error  # Keep the Problem Details body on non-2xx responses.
with response:
    status = response.status
    raw = response.read().decode("utf-8")
    if "json" not in response.headers.get("Content-Type", ""):
        raise RuntimeError(f"HTTP {status}: expected a JSON response")
    result = json.loads(raw)
print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)
if not 200 <= status < 300:
    sys.exit(1)  # Inspect code, action and billing before retrying.
# For batches, inspect every item even when HTTP status is 200.

Python 3.10+ ; bibliothèque standard. Enregistrez sous example.py et exécutez python3 example.py. Documentation de l'environnement d'exécution

PHP
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}
$body = json_decode('{"type":"email","value":"alice.smith@example.com","country":"US","options":{"ai_mode":"fallback"}}', true, 512, JSON_THROW_ON_ERROR);

$ch = curl_init('https://api.genderapi.io/api/v2/gender');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.

PHP 8+ avec l'extension cURL. Enregistrez sous example.php et exécutez php example.php. Documentation de l'environnement d'exécution

Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class GenderApiExample {
    private static String requiredEnv(String name) {
        String value = System.getenv(name);
        if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name);
        return value;
    }

    public static void main(String[] args) throws Exception {
        String apiKey = requiredEnv("GENDERAPI_API_KEY");
        String body = "{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}";
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .followRedirects(HttpClient.Redirect.NEVER)
            .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/gender"))
            .timeout(Duration.ofSeconds(30))
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
            .build();
        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        if (!response.headers().firstValue("content-type").orElse("").contains("json")) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON");
        }
        // JSON text; parse with your application's JSON library when integrating.
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            System.err.println(response.body()); // Includes Problem Details.
            System.exit(1);
        }
        System.out.println(response.body());
        // For batches, inspect each item's data or error, including on HTTP 200.
    }
}

Java 17+ ; client HTTP standard. Enregistrez sous GenderApiExample.java et exécutez java GenderApiExample.java. Documentation de l'environnement d'exécution

C# / .NET
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

string RequiredEnv(string name) =>
    !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name))
        ? Environment.GetEnvironmentVariable(name)!
        : throw new InvalidOperationException($"Set {name}");

var apiKey = RequiredEnv("GENDERAPI_API_KEY");
using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.genderapi.io/api/v2/gender");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
request.Content = new StringContent("{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}", Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var raw = await response.Content.ReadAsStringAsync();
if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false))
    throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");
using var result = JsonDocument.Parse(raw);
if (!response.IsSuccessStatusCode)
{
    Console.Error.WriteLine(result.RootElement); // Preserve Problem Details.
    Environment.ExitCode = 1;
}
else
{
    Console.WriteLine(result.RootElement);
    // For batches, inspect every item even on HTTP 200.
}

Application console .NET 8+. Utilisez-le comme Program.cs dans un projet console, puis exécutez dotnet run. Documentation de l'environnement d'exécution

Go
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "strings"
    "time"
)

func requiredEnv(name string) string {
    value := os.Getenv(name)
    if value == "" { panic("Set " + name) }
    return value
}

func run() error {
    apiKey := requiredEnv("GENDERAPI_API_KEY")
    body := "{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"country\":\"US\",\"options\":{\"ai_mode\":\"fallback\"}}"
    request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body))
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + apiKey)
    request.Header.Set("Content-Type", "application/json")
    client := &http.Client{
        Timeout: 30 * time.Second,
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    raw, err := io.ReadAll(response.Body)
    if err != nil { return err }
    if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) {
        return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode)
    }
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw)
    }
    fmt.Println(string(raw))
    // For batches, inspect every item even on HTTP 200.
    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling.
        os.Exit(1)
    }
}

Go 1.22+ ; bibliothèque standard. Enregistrez sous main.go et exécutez go run main.go. Documentation de l'environnement d'exécution

Conservez le résultat avec ses éléments de preuve

Une association déduite n’équivaut pas au genre déclaré par la personne. Conservez séparément la valeur d’origine, les éléments de preuve renvoyés et les informations fournies par la personne elle-même. unknown est un résultat valide : ne le transformez pas en une catégorie devinée dans votre application.

ChampComment l’utiliser
data.gender / data.result_statusUtilisez male ou female uniquement lorsque le résultat est identified. Conservez la valeur JSON null lorsqu’il est unknown.
data.name / data.matchVérifiez le nom renvoyé et le candidat retenu. Une correspondance partielle ne prouve pas que la valeur appartient à une personne portant ce prénom.
data.confidence / data.confidence_kindLa confiance est exprimée entre 0 et 1, ou vaut null. observed_frequency provient des effectifs enregistrés ; model_reported est un score fourni par l’IA. Évaluez vos seuils séparément pour chaque type.
data.source / data.sample_countDistinguez dataset, ai et none. Les résultats de l’IA n’ont pas d’effectif enregistré. La taille de l’échantillon n’est pas une mesure d’exactitude.
meta.access.modeVérifiez la valeur api_key pour une intégration liée à un compte. Si la clé est absente ou non reconnue, l’essai partagé par IP peut être utilisé à la place.
meta.usageLisez charged_credits et billing_status. Un résultat unknown obtenu avec succès est facturé. L’absence de réponse ne prouve pas que la requête était gratuite.

Choisissez quand utiliser l’IA

forceToGenderize est facultatif pour les noms, les adresses e-mail et les noms d’utilisateur. Lorsqu’il est activé, omettez ai_mode ou utilisez fallback : la combinaison avec off ou always renvoie une erreur 422. Un solde de départ positif suffit pour lancer une requête, même si le débit final fait passer le solde en dessous de zéro.

L’analyse des pseudonymes peut renvoyer un genre avec name: null. Elle peut aussi renvoyer unknown. Ni le repli IA standard ni l’analyse des pseudonymes ne garantissent une réponse correcte ou non nulle.

Option de la requêteComportementCrédits par requête aboutie
options.ai_mode: offInterroge uniquement le jeu de données.1 crédit, unknown compris
options.ai_mode: fallbackInterroge d’abord le jeu de données, puis l’IA standard si aucun genre n’est trouvé. C’est le mode par défaut des requêtes individuelles.1 crédit au total, repli IA compris
options.ai_mode: alwaysInterroge directement l’IA.2 crédits
forceToGenderize: trueInterroge d’abord le jeu de données ; si aucun genre n’est trouvé, autorise l’IA à interpréter le sens d’un surnom ou d’un pseudonyme personnel, même sans prénom réel.1 crédit si le jeu de données résout la requête ; 2 au total si l’IA est utilisée

Traitez une liste d’adresses e-mail par lots

Utilisez POST /api/v2/gender/batch avec un tableau items d’entrées type: email. La limite est de 50 éléments avec une clé API et de 10 avec l’essai par IP. Attribuez un id unique à chaque élément pour rattacher le résultat à sa ligne d’origine. La réponse conserve aussi l’ordre d’entrée et indique index.

Par défaut, les éléments d’un lot utilisent uniquement le jeu de données. Ajoutez options.ai_mode: fallback à chaque élément qui nécessite le repli IA standard. Deux éléments fallback aboutis coûtent 2 crédits au total, résultats unknown compris ; une requête HTTP ne correspond pas à un seul crédit d’estimation.

Examinez chaque élément, même si le lot renvoie HTTP 200. Enregistrez les résultats identifiés et inconnus, puis vérifiez les erreurs et le débit confirmé avant de renvoyer les éléments en échec. Après un délai dépassé, vérifiez la facturation avant de renvoyer un lot complet.

Comprenez ce que vous envoyez

L’outil n’envoie la valeur saisie à GenderAPI.io que lorsque vous cliquez sur Analyser. Si l’IA intervient, le service d’inférence configuré reçoit type, value et le contexte pays envoyé. Pour une estimation fondée uniquement sur le jeu de données, utilisez options.ai_mode: off sans forceToGenderize dans votre intégration.

La Politique de confidentialité, l’accord de traitement des données et la liste des sous-traitants décrivent les conditions publiées. Le résultat est une association déduite : donnez la priorité aux informations fournies par la personne. Ne l’utilisez pas comme fondement de décisions ayant des conséquences importantes pour quelqu’un.

Questions fréquentes

L’API peut-elle extraire un prénom d’une adresse e-mail ?

Elle peut renvoyer un nom candidat si la partie avant @ contient un indice exploitable. Des correspondances par mots ou par fragments sont possibles : vérifiez donc data.match. Le résultat ne prouve pas le prénom du titulaire de la boîte aux lettres.

Une adresse info@ ou support@ renvoie-t-elle un genre ?

Les adresses fonctionnelles partagées ne fournissent généralement aucun indice de nom personnel. unknown est un résultat valide. L’IA ou le mode pseudonyme ne vérifient pas l’identité des personnes qui utilisent une boîte partagée.

Un résultat unknown consomme-t-il des crédits ?

Oui. Une requête e-mail standard aboutie coûte 1 crédit, fallback et unknown compris. Avec forceToGenderize, elle coûte 1 crédit si le jeu de données résout la requête, ou 2 au total si l’IA est utilisée. La facturation des erreurs est indiquée séparément dans meta.usage.

Le domaine de l’adresse est-il supprimé avant l’envoi à l’IA ?

Cette suppression n’est pas garantie. Les candidats du jeu de données proviennent de la partie avant @, tandis que l’IA reçoit la valeur envoyée avec la consigne d’ignorer le domaine et le suffixe commençant par +. Utilisez le mode jeu de données seul si votre processus l’exige.

Continuez vos tests

Utilisez votre clé GenderAPI

Collez la clé API de votre compte GenderAPI pour poursuivre les tests lorsque les crédits partagés de l’essai par IP sur 24 heures sont épuisés. L’enregistrement de la clé n’envoie aucune requête. Relancez ensuite l’analyse.

Elle est conservée uniquement dans cet onglet et supprimée à sa fermeture.