GenderAPI.io V2 · Przewodnik

Określanie płci na podstawie adresu e-mail

Wykorzystaj sygnał imienia w adresie e-mail z GenderAPI.io V2. Wypróbuj wyszukiwanie na żywo, porównaj opcje zbioru danych i AI oraz dowiedz się, jak obsługiwać wyniki unknown i listy adresów e-mail.

Ostatnia aktualizacja:

Wypróbuj API V2

Przeanalizuj adres e-mail

Zbiór danych + AI

Wyślij wartość i sprawdź pełną odpowiedź, w tym wyniki nieznane i zużyte kredyty.

Zawsze AI (domyślny): 2 kredyty, także przy wyniku unknown. Tryb awaryjny: 1 kredyt, łącznie z przejściem na AI i wynikami unknown. Wyłączony, tylko zbiór danych (bez AI): 1 kredyt za każde zakończone zapytanie, także przy wyniku unknown. Z włączoną analizą pseudonimów: 1 kredyt, jeśli wynik rozstrzygnie zbiór danych, lub łącznie 2, jeśli użyta zostanie AI, także przy wyniku unknown.

Wysłana wartość (pełny adres e-mail) trafia do GenderAPI.io i jest przekazywana do skonfigurowanej usługi AI w domyślnym trybie Zawsze AI lub gdy potrzebne jest przejście na AI, ale nie w trybie Wyłączony. Szczegóły przetwarzania danych.

Brak zapisanego klucza API. Dostępna jest wspólna próba dla adresu IP, dopóki ma wolne kredyty.

Poniższa odpowiedź to prawdziwa odpowiedź pobrana 1 października 2026 r. Kliknij Analizuj, aby wysłać zapytanie.

Prawdziwa odpowiedź V2 · pobrana 1 października 2026 r.
ImięPiotr
PłećMężczyzna
Pewność98%
KrajPolska (PL)
ŹródłoModel AI
Zużyte kredyty2

Ta prawdziwa odpowiedź została pobrana 1 października 2026 r.; zastąpiono jedynie saldo konta. Wartości na żywo mogą się różnić. Prognoza nie jest potwierdzoną tożsamością.

Co może powiedzieć adres e-mail?

Wyślij poprawny składniowo adres e-mail z type: email. GenderAPI.io szuka sygnału imienia w części przed @, a następnie zwraca ustrukturyzowaną prognozę. Nie weryfikuje skrzynki pocztowej, nie ustala jej właściciela ani jego tożsamości płciowej.

Dopasowanie w zbiorze danych wyodrębnia kandydatów i może sprawdzać fragmenty o ograniczonej długości. Tryb pseudonimów zachowuje dopasowanie całych słów, ale nie dodaje takich fragmentów. Jeśli pasuje kilka rekordów, wybierany jest kandydat o największej zapisanej łącznej liczbie wystąpień; nie musi to być zamierzone imię. Zanim użyjesz wyodrębnionego imienia w rekordzie kontaktu, sprawdź data.name i data.match.

Przykładowe dane wejścioweJak je interpretować
alice.smith@example.comCzęść przed @ zawiera możliwe słowa będące imionami. Dopasowanie jest możliwe, ale same dane wejściowe nie przesądzają, który kandydat zostanie wybrany.
alice+news@example.comWyszukiwanie w zbiorze danych usuwa przyrostek po znaku + przy tworzeniu kandydatów. AI otrzymuje przesłaną wartość z instrukcją, aby ten przyrostek zignorować.
support@example.comAdres funkcyjny nie daje wiarygodnego sygnału imienia osoby. Nie przypisuj całej wspólnej skrzynce płci jednej osoby.
prenses@example.comOpcjonalne forceToGenderize pozwala na próbę opartą na znaczeniu pseudonimu, jeśli zbiór danych nie rozstrzygnie wyniku. W tym trybie prawdziwe imię nie jest wymagane.
not-an-emailNiepoprawna składnia zwraca błąd walidacji, a nie udany wynik unknown.

Wyślij wyszukiwanie adresu e-mail ze swojej aplikacji

Ten przykład używa Twojego istniejącego klucza API w nagłówku Bearer i jawnie ustawia fallback. Zastąp przykładowy adres wartością, którą możesz przetwarzać. Podawaj country tylko wtedy, gdy masz odpowiedni kontekst; domena adresu e-mail nie określa, gdzie przebywa dana osoba. Jeśli nie znasz kraju, pomiń to pole.

Uruchom przykład na swoim serwerze z ustawioną zmienną GENDERAPI_API_KEY. Metoda POST sprawia, że adres e-mail nie trafia do adresu URL zapytania. Wynik na żywo może się różnić od poglądowej odpowiedzi w demo.

Wybierz język programowania. Skonfiguruj klucz API, następnie uruchom przykład na swoim serwerze.

Każde zapytanie o prognozę, łącznie z ponownymi próbami, jest nową płatną operacją. Te przykłady nie ponawiają zapytań automatycznie. Przed wysłaniem kolejnego zapytania sprawdź status rozliczenia.

Zanim uruchomisz: dostęp i obsługa błędów

Uruchamiaj te przykłady na swoim serwerze. Ustaw w środowisku procesu zmienną GENDERAPI_API_KEY na swój istniejący klucz API. Upewnij się, że meta.access.mode ma wartość api_key: nierozpoznany klucz może spowodować przejście na próbę dla adresu IP.

W przypadku odpowiedzi JSON z kodem HTTP 4xx i 5xx przykłady zachowują treść błędu i zwracają niezerowy kod wyjścia. Przed ponowną próbą sprawdź code, action i meta.usage.billing_status.

Przewodnik po błędach i ponawianiu zapytań →
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+ w powłoce POSIX. Uruchom w terminalu. Dokumentacja środowiska uruchomieniowego

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+; wbudowany fetch. Zapisz jako example.mjs i uruchom node example.mjs. Dokumentacja środowiska uruchomieniowego

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+; biblioteka standardowa. Zapisz jako example.py i uruchom python3 example.py. Dokumentacja środowiska uruchomieniowego

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+ z rozszerzeniem cURL. Zapisz jako example.php i uruchom php example.php. Dokumentacja środowiska uruchomieniowego

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+; standardowy klient HTTP. Zapisz jako GenderApiExample.java i uruchom java GenderApiExample.java. Dokumentacja środowiska uruchomieniowego

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

Aplikacja konsolowa .NET 8+. Użyj jako Program.cs w projekcie konsolowym, a następnie uruchom dotnet run. Dokumentacja środowiska uruchomieniowego

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+; biblioteka standardowa. Zapisz jako main.go i uruchom go run main.go. Dokumentacja środowiska uruchomieniowego

Przechowuj wynik razem z informacjami, na których się opiera

Wywnioskowane powiązanie nie jest płcią zadeklarowaną przez daną osobę. Przechowuj osobno oryginalne dane wejściowe, zwrócone informacje o dopasowaniu i dane przekazane przez samą osobę. Wynik unknown jest prawidłowym wynikiem; nie zamieniaj go w swojej aplikacji na zgadywaną kategorię.

PoleJak z niego korzystać
data.gender / data.result_statusUżywaj male lub female tylko wtedy, gdy wynik ma status identified. Gdy wynik jest unknown, zachowaj natywną wartość null z JSON.
data.name / data.matchSprawdź zwrócone imię i wybranego kandydata. Dopasowanie fragmentu nie dowodzi, że dane wejściowe należą do osoby o tym imieniu.
data.confidence / data.confidence_kindPewność jest wyrażona w skali 0–1 albo ma wartość null. observed_frequency wynika z zapisanych liczb wystąpień; model_reported to wynik podany przez AI. Progi oceniaj osobno dla każdego rodzaju.
data.source / data.sample_countRozróżniaj dataset, ai i none. Wyniki AI nie mają zapisanej liczby próbek. Liczba próbek nie jest zmierzoną dokładnością.
meta.access.modeW integracji z kontem sprawdź, czy wartość to api_key. Brakujący lub nierozpoznany klucz może zamiast tego korzystać ze wspólnej próby dla adresu IP.
meta.usageOdczytaj charged_credits i billing_status. Udany wynik unknown jest płatny. Utrata odpowiedzi nie oznacza, że zapytanie było bezpłatne.

Zdecyduj, kiedy korzystać z AI

forceToGenderize jest opcjonalne dla imion, adresów e-mail i nazw użytkowników. Gdy jest włączone, pomiń ai_mode lub użyj fallback; off i always są z nim sprzeczne i zwracają 422. Dodatnie saldo początkowe wystarcza do rozpoczęcia zapytania, nawet jeśli ostateczne obciążenie obniży saldo poniżej zera.

Tryb pseudonimów może zwrócić płeć razem z name: null. Może też zwrócić wynik unknown. Ani standardowe przejście na AI, ani analiza pseudonimów nie gwarantują poprawnej odpowiedzi ani wartości innej niż null.

Opcja zapytaniaDziałanieKredyty za udane wyszukiwanie
options.ai_mode: offKorzysta tylko ze zbioru danych.1, także przy wyniku unknown
options.ai_mode: fallbackNajpierw sprawdza zbiór danych, a gdy nie zwróci on płci, korzysta ze standardowej AI. To ustawienie domyślne dla pojedynczych zapytań.Łącznie 1, łącznie z przejściem na AI
options.ai_mode: alwaysOd razu korzysta z AI.2
forceToGenderize: trueNajpierw sprawdza zbiór danych, a potem pozwala AI zinterpretować osobisty pseudonim lub alias, nawet bez prawdziwego imienia.1 za wynik rozstrzygnięty w zbiorze danych; łącznie 2, jeśli użyta zostanie AI

Przetwarzaj listę adresów e-mail w partiach

Użyj POST /api/v2/gender/batch z tablicą items zawierającą wpisy type: email. Dostęp z zarejestrowanym kluczem API obsługuje do 50 elementów, a próba dla adresu IP do 10. Nadaj każdemu elementowi unikalne id, aby móc połączyć wyniki z oryginalnym wierszem. Odpowiedź zachowuje też kolejność danych wejściowych i podaje index.

Elementy partii domyślnie korzystają tylko ze zbioru danych. Ustaw options.ai_mode: fallback w każdym elemencie, który wymaga standardowego przejścia na AI. Dwa udane elementy z fallback kosztują łącznie 2 kredyty, także przy wynikach unknown; jedno zapytanie HTTP to nie jeden kredyt za prognozę.

Sprawdzaj każdy element, nawet jeśli partia zwraca HTTP 200. Zapisz wyniki udane i unknown, a następnie przejrzyj błędy i potwierdzone rozliczenie, zanim ponownie wyślesz nieudane elementy. Po przekroczeniu limitu czasu nie wysyłaj ponownie całej udanej partii bez sprawdzenia wyniku rozliczenia.

Wiedz, co wysyłasz

Demo wysyła wpisaną wartość do GenderAPI.io dopiero po kliknięciu Analizuj. Jeśli zostanie użyta AI, przesłane type, value i kontekst kraju trafiają do skonfigurowanej usługi inferencji. Aby uzyskać prognozę wyłącznie ze zbioru danych, użyj w swojej integracji options.ai_mode: off bez forceToGenderize.

Polityka prywatności, umowa powierzenia przetwarzania danych i rejestr podmiotów przetwarzających opisują opublikowane zasady przetwarzania. Wynik jest wywnioskowanym powiązaniem; pierwszeństwo mają informacje przekazane przez samą osobę. Nie opieraj na nim decyzji, które mają istotne skutki dla danej osoby.

Najczęściej zadawane pytania

Czy API może wyodrębnić imię z adresu e-mail?

Może zwrócić kandydata na imię, gdy część przed @ zawiera użyteczny sygnał. Możliwe są dopasowania całych słów i fragmentów, dlatego sprawdzaj data.match. Wynik nie dowodzi imienia właściciela skrzynki.

Czy adres info@ lub support@ zwróci płeć?

Wspólne adresy funkcyjne zazwyczaj nie zawierają informacji o imieniu osoby. Wynik unknown jest prawidłowy. Ani AI, ani tryb pseudonimów nie potwierdzają tożsamości osób korzystających ze wspólnej skrzynki.

Czy wynik unknown dla adresu e-mail zużywa kredyty?

Tak. Udane standardowe wyszukiwanie adresu e-mail kosztuje 1 kredyt, łącznie z przejściem na AI i wynikami unknown. Wymuszona analiza pseudonimów kosztuje 1 kredyt za wynik rozstrzygnięty w zbiorze danych albo łącznie 2, jeśli użyta zostanie AI. Rozliczenie błędów jest podawane osobno w meta.usage.

Czy domena adresu e-mail jest usuwana przed przetworzeniem przez AI?

Takie usuwanie nie jest gwarantowane. Kandydaci ze zbioru danych pochodzą z części przed @, natomiast AI otrzymuje przesłaną wartość z instrukcją, aby zignorować domenę i przyrostek po znaku +. Jeśli Twój proces tego wymaga, użyj trybu tylko ze zbiorem danych.

Kontynuuj testy

Użyj swojego klucza GenderAPI

Wklej klucz API ze swojego konta GenderAPI, aby kontynuować testy po wykorzystaniu wspólnych kredytów 24-godzinnej próby dla adresu IP. Zapisanie klucza nie wysyła zapytania – gdy będziesz gotowy, wyślij je ponownie.

Klucz jest przechowywany wyłącznie w tej karcie przeglądarki i usuwany po jej zamknięciu.