GenderAPI.io V2 · Przewodnik

Określanie płci na podstawie nazwy użytkownika lub pseudonimu

Przeanalizuj nazwę użytkownika z GenderAPI.io V2. Wypróbuj standardowe dopasowanie imienia lub opcjonalną analizę pseudonimów, poznaj koszt 1 lub 2 kredytów i zachowuj wyniki unknown.

Ostatnia aktualizacja:

Wypróbuj API V2

Przeanalizuj nazwę użytkownika

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ść (nazwa użytkownika) 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ęMichal
PłećMężczyzna
Pewność98%
Ź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ą.

Sygnał imienia i znaczenie pseudonimu to dwie różne rzeczy

Użyj type: username dla nazwy użytkownika lub pseudonimu. Opcjonalny początkowy znak @ jest usuwany przy dopasowaniu w zbiorze danych. Wyodrębnianie kandydatów uwzględnia separatory i cyfry oraz może sprawdzać fragmenty o ograniczonej długości. Tryb pseudonimów zachowuje dopasowanie całych słów, ale nie dodaje takich fragmentów. Wybrany zapisany rekord ma największą łączną liczbę wystąpień spośród dostępnych kandydatów; nie dowodzi to prawdziwego imienia właściciela konta.

Standardowe przejście na AI szuka rozpoznawalnego imienia. forceToGenderize pozwala dodatkowo na powiązanie oparte na osobistym pseudonimie, gdy nie da się wyodrębnić prawdziwego imienia. Obie ścieżki mogą zwrócić unknown; marka, postać lub konto współdzielone nie muszą oznaczać jednej osoby.

Przykładowe dane wejściowePodejścieCo sprawdzić
@alice.smithZacznij od standardowego trybu fallback, który najpierw sprawdza zbiór danych.Sprawdź wybrane imię i metodę dopasowania; nie zakładaj, że wybrano pierwsze słowo.
robert89Cyfry mogą zostać usunięte podczas wyodrębniania kandydatów.Dopasowane imię to powiązanie, a nie potwierdzona tożsamość.
prensesWłącz forceToGenderize, aby w przypadku nierozstrzygniętego wyniku pozwolić AI na próbę opartą na pseudonimie.gender może mieć wartość inną niż null, gdy name ma wartość null. Wyniki AI mają rodzaj model_reported.
team_supportTraktuj konta funkcyjne i współdzielone jako potencjalnie nieosobowe.Zachowaj unknown i nie przypisuj kontu współdzielonemu tożsamości jednej osoby.

Wypróbuj analizę pseudonimów w swojej integracji

To zapytanie włącza analizę pseudonimów. Najpierw sprawdzany jest zbiór danych. Jeśli nie zwróci płci, AI może wykorzystać znaczenie aliasu. Pomiń forceToGenderize w przypadku standardowego wyszukiwania; pojedyncze zapytania i tak domyślnie korzystają ze standardowego przejścia na AI.

Kontekst kraju TR jest podany na potrzeby tego przykładu. Używaj odpowiedniego kontekstu z własnej aplikacji i sprawdzaj data.match.scope; podany kraj nie gwarantuje rekordu dla tego konkretnego kraju. Nie określa też narodowości ani miejsca zamieszkania.

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": "username",
  "value": "prenses",
  "country": "TR",
  "forceToGenderize": true
}'

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": "username",
  "value": "prenses",
  "country": "TR",
  "forceToGenderize": true
};

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\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}")

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":"username","value":"prenses","country":"TR","forceToGenderize":true}', 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\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}";
        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\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}", 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\":\"username\",\"value\":\"prenses\",\"country\":\"TR\",\"forceToGenderize\":true}"
    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

Zachowaj wynik każdej nazwy użytkownika podczas przetwarzania listy

Użyj POST /api/v2/gender/batch dla list nazw użytkowników albo list mieszanych z imionami, adresami e-mail i nazwami użytkowników. Maksimum to 50 elementów z kluczem API lub 10 w próbie dla adresu IP. Każdy element ma własne opcje kraju i AI; opcjonalne identyfikatory muszą być unikalne w obrębie partii.

Domyślnie partia korzysta tylko ze zbioru danych. Włącz fallback w elementach, dla których chcesz standardowej AI, albo ustaw forceToGenderize w elemencie, aby analizować pseudonimy. Sprawdzaj data lub error w każdym wyniku i używaj id lub index, aby zachować powiązanie z oryginalnym wierszem. Udane elementy unknown są płatne.

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 nazwa użytkownika musi zawierać prawdziwe imię?

Standardowa inferencja AI wymaga użytecznego imienia. Z forceToGenderize API może też spróbować powiązania opartego na pseudonimie, gdy wyszukiwanie w zbiorze danych nie da wyniku. Ten tryb nie wymaga prawdziwego imienia i może zwrócić name: null.

Czy forceToGenderize gwarantuje określenie płci?

Nie. Pozwala na analizę pseudonimów, ale ostateczny wynik nadal może być unknown. Zachowaj natywną wartość null z JSON i sprawdź result_status oraz reason.

Czy API sprawdza profil w mediach społecznościowych?

Ten endpoint analizuje tylko przesłaną wartość. Nie pobiera profilu, postów ani zdjęć konta, aby sprawdzić, kto jest jego właścicielem.

Czy mogę używać forceToGenderize także z imionami i adresami e-mail?

Tak. Jest opcjonalne dla danych wejściowych name, email i username. Najpierw korzysta ze zbioru danych, a gdy wynik jest nierozstrzygnięty, z AI uwzględniającej pseudonimy: 1 kredyt za wynik rozstrzygnięty w zbiorze danych lub łącznie 2, gdy użyta zostanie AI.

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.