GenderAPI.io V2 · Hướng dẫn

Xác định giới tính từ tên người dùng hoặc biệt danh

Phân tích tên tài khoản với GenderAPI.io V2. Thử so khớp tên thông thường hoặc suy luận biệt danh tùy chọn, hiểu chi phí 1 hoặc 2 tín dụng và giữ nguyên kết quả không xác định.

Cập nhật lần cuối:

Thử API V2

Phân tích tên người dùng

Tập dữ liệu + AI

Gửi một giá trị và xem toàn bộ phản hồi, kể cả kết quả không xác định và số tín dụng đã dùng.

Luôn dùng AI (mặc định): 2 tín dụng, kể cả khi kết quả không xác định. Dự phòng: 1 tín dụng, đã gồm AI dự phòng và kết quả không xác định. Tắt, chỉ tập dữ liệu (không dùng AI): 1 tín dụng cho mỗi yêu cầu hoàn tất, kể cả khi kết quả không xác định. Khi bật suy luận biệt danh: 1 tín dụng nếu tập dữ liệu cho ra kết quả, tổng cộng 2 tín dụng nếu dùng AI, kể cả khi kết quả không xác định.

Giá trị đã gửi (tên người dùng) được chuyển đến GenderAPI.io; ở chế độ Luôn dùng AI (mặc định) hoặc khi cần AI dự phòng, giá trị này cũng được chuyển đến dịch vụ AI đã được cấu hình, nhưng không được chuyển ở chế độ Tắt. Tìm hiểu cách dữ liệu được xử lý.

Chưa lưu khóa API. Bạn có thể dùng thử theo IP dùng chung trong phạm vi tín dụng còn lại.

Phản hồi bên dưới là phản hồi thực được ghi lại ngày 1 tháng 10 năm 2026. Chọn “Phân tích” để gửi yêu cầu.

Phản hồi V2 thực · ghi lại ngày 1 tháng 10 năm 2026
TênThao
Giới tínhNữ
Độ tin cậy98%
NguồnMô hình AI
Tín dụng đã dùng2

Phản hồi thực này được ghi lại ngày 1 tháng 10 năm 2026; chỉ số dư tài khoản được thay thế. Giá trị trực tiếp có thể khác. Dự đoán không phải danh tính đã được xác minh.

Tín hiệu tên và ý nghĩa biệt danh là hai điều khác nhau

Dùng type: username cho tên tài khoản hoặc biệt danh. Ký tự @ ở đầu (nếu có) được bỏ đi khi so khớp với tập dữ liệu. Quá trình tách ứng viên xử lý các ký tự phân cách và chữ số, và có thể thử các chuỗi con trong giới hạn nhất định. Chế độ biệt danh vẫn so khớp theo token nhưng không thêm các ứng viên chuỗi con đó. Bản ghi được chọn có tổng số lượng lớn nhất trong số các ứng viên hiện có; đây không phải bằng chứng về tên thật của chủ tài khoản.

AI dự phòng thông thường tìm một tên riêng nhận diện được. forceToGenderize cho phép thêm mối liên hệ dựa trên biệt danh cá nhân khi không trích xuất được tên thật. Cả hai cách đều có thể trả về kết quả không xác định; một thương hiệu, nhân vật hoặc tài khoản dùng chung không nhất thiết đại diện cho một người.

Ví dụ đầu vàoCách tiếp cậnCần kiểm tra gì
@alice.smithBắt đầu với fallback thông thường, ưu tiên tập dữ liệu.Kiểm tra tên được chọn và phương thức so khớp; đừng mặc định rằng token đầu tiên đã được chọn.
robert89Các chữ số có thể bị loại bỏ khi tách ứng viên.Tên khớp chỉ là một mối liên hệ, không phải danh tính đã xác minh.
prensesBật forceToGenderize để cho phép AI thử suy luận từ biệt danh khi chưa xác định được.gender có thể khác null trong khi name là null. Điểm của AI là model_reported.
team_supportCoi tài khoản theo vai trò hoặc tài khoản dùng chung là có thể không thuộc về cá nhân.Giữ kết quả không xác định và không gán danh tính cá nhân cho tài khoản dùng chung.

Thử suy luận biệt danh trong tích hợp của bạn

Yêu cầu này chủ động bật suy luận biệt danh. Tập dữ liệu được tra trước. Nếu tập dữ liệu không trả về giới tính, AI có thể dùng ý nghĩa của bí danh. Bỏ forceToGenderize để tra cứu thông thường; yêu cầu đơn lẻ vẫn mặc định dùng fallback thông thường.

Ngữ cảnh quốc gia TR được dùng cho ví dụ này. Hãy dùng ngữ cảnh liên quan từ ứng dụng của bạn và kiểm tra data.match.scope; quốc gia trong đầu vào không bảo đảm sẽ có bản ghi theo quốc gia đó. Quốc gia này cũng không xác định quốc tịch hay nơi cư trú.

Chọn ngôn ngữ lập trình. Thiết lập khóa API, sau đó chạy ví dụ trên máy chủ của bạn.

Mỗi yêu cầu dự đoán là một thao tác mới bị tính phí, kể cả khi thử lại. Các ví dụ này không tự động thử lại. Kiểm tra trạng thái tính phí trước khi gửi yêu cầu khác.

Trước khi chạy: quyền truy cập và xử lý lỗi

Chạy các ví dụ này trên máy chủ của bạn. Đặt GENDERAPI_API_KEY trong biến môi trường của tiến trình bằng khóa API hiện có. Xác nhận meta.access.mode là api_key: khóa không được nhận diện có thể chuyển sang dùng thử theo IP.

Với phản hồi JSON HTTP 4xx và 5xx, ví dụ giữ nguyên nội dung lỗi và kết thúc với mã thoát khác 0. Kiểm tra code, action và meta.usage.billing_status trước khi thử lại.

Hướng dẫn về lỗi và thử lại →
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+ trong shell POSIX. Chạy trong terminal. Tài liệu môi trường chạy

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+; fetch tích hợp sẵn. Lưu thành example.mjs và chạy node example.mjs. Tài liệu môi trường chạy

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+; thư viện chuẩn. Lưu thành example.py và chạy python3 example.py. Tài liệu môi trường chạy

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+ với tiện ích mở rộng cURL. Lưu thành example.php và chạy php example.php. Tài liệu môi trường chạy

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+; HTTP client chuẩn. Lưu thành GenderApiExample.java và chạy java GenderApiExample.java. Tài liệu môi trường chạy

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

Ứng dụng console .NET 8+. Dùng làm Program.cs trong một dự án console, sau đó chạy dotnet run. Tài liệu môi trường chạy

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+; thư viện chuẩn. Lưu thành main.go và chạy go run main.go. Tài liệu môi trường chạy

Lưu kết quả cùng với bằng chứng của nó

Một mối liên hệ được suy luận không phải là giới tính do chính người đó tự công bố. Hãy lưu riêng đầu vào gốc, bằng chứng được trả về và mọi thông tin do người đó cung cấp. Kết quả không xác định là một kết quả hợp lệ; không nên biến nó thành một nhóm được đoán trong ứng dụng của bạn.

TrườngCách sử dụng
data.gender / data.result_statusChỉ dùng male hoặc female khi kết quả là identified. Giữ nguyên giá trị JSON null gốc khi kết quả không xác định.
data.name / data.matchKiểm tra tên được trả về và ứng viên được chọn. Kết quả khớp theo chuỗi con không chứng minh rằng đầu vào thuộc về người có tên riêng đó.
data.confidence / data.confidence_kindĐộ tin cậy nằm trên thang từ 0 đến 1 hoặc là null. observed_frequency dựa trên số lượng đã lưu; model_reported là điểm do AI đưa ra. Hãy đánh giá ngưỡng riêng cho từng loại.
data.source / data.sample_countPhân biệt dataset, ai và none. Kết quả AI không có số lượng mẫu đã lưu. Số lượng mẫu không phải là điểm độ chính xác đã đo.
meta.access.modeXác nhận api_key với tích hợp dùng tài khoản. Khóa bị thiếu hoặc không được nhận diện có thể chuyển sang dùng thử theo IP dùng chung.
meta.usageĐọc charged_credits và billing_status. Kết quả không xác định thành công vẫn bị tính phí. Mất phản hồi không chứng minh rằng yêu cầu được miễn phí.

Chọn khi nào dùng AI

forceToGenderize là tùy chọn cho tên, địa chỉ email và tên người dùng. Khi bật trường này, hãy bỏ qua ai_mode hoặc dùng fallback; off và always xung đột với nó và trả về 422. Chỉ cần số dư ban đầu dương là đủ để bắt đầu một yêu cầu, kể cả khi lần tính phí cuối cùng làm số dư xuống dưới 0.

Chế độ biệt danh có thể trả về giới tính cùng name: null. Chế độ này cũng có thể trả về kết quả không xác định. Cả AI dự phòng thông thường lẫn suy luận biệt danh đều không bảo đảm câu trả lời đúng hoặc khác null.

Tùy chọn yêu cầuCách hoạt độngTín dụng cho một lần tra cứu thành công
options.ai_mode: offChỉ dùng tập dữ liệu.1, kể cả kết quả không xác định
options.ai_mode: fallbackTra tập dữ liệu trước, sau đó dùng AI thông thường khi không có giới tính được trả về. Đây là mặc định cho yêu cầu đơn lẻ.Tổng cộng 1, đã gồm AI dự phòng
options.ai_mode: alwaysDùng AI trực tiếp.2
forceToGenderize: trueTra tập dữ liệu trước, sau đó cho phép AI diễn giải biệt danh cá nhân hoặc bí danh, kể cả khi không có tên thật.1 khi tập dữ liệu cho ra kết quả; tổng cộng 2 nếu dùng AI

Giữ kết quả của từng tên tài khoản khi xử lý danh sách

Dùng POST /api/v2/gender/batch cho danh sách tên người dùng, hoặc danh sách kết hợp gồm tên, địa chỉ email và tên người dùng. Tối đa là 50 mục với khóa API hoặc 10 mục khi dùng thử theo IP. Mỗi mục có country và tùy chọn AI riêng; ID tùy chọn phải là duy nhất trong lô.

Mặc định của lô là chỉ dùng tập dữ liệu. Bật fallback cho từng mục khi cần AI thông thường, hoặc đặt forceToGenderize cho từng mục để suy luận biệt danh. Kiểm tra data hoặc error ở mọi kết quả và dùng id hoặc index để giữ liên kết với dòng gốc. Các mục không xác định thành công vẫn bị tính phí.

Hiểu rõ dữ liệu bạn gửi đi

Bản demo trực tiếp chỉ gửi giá trị đã nhập đến GenderAPI.io khi bạn chủ động gửi. Nếu AI được gọi, type, value và ngữ cảnh quốc gia đã gửi sẽ được chuyển đến dịch vụ suy luận đã được cấu hình. Để chỉ dự đoán bằng tập dữ liệu, hãy dùng options.ai_mode: off mà không có forceToGenderize trong tích hợp của bạn.

Chính sách quyền riêng tư, thỏa thuận xử lý dữ liệu và danh sách bên xử lý dữ liệu phụ mô tả các điều kiện xử lý đã công bố. Kết quả là một mối liên hệ được suy luận; hãy ưu tiên thông tin do chính người đó cung cấp. Không dùng kết quả làm cơ sở cho các quyết định có ảnh hưởng quan trọng đến một cá nhân.

Câu hỏi thường gặp

Tên người dùng có bắt buộc phải chứa tên thật không?

Suy luận AI thông thường cần một tên riêng dùng được. Với forceToGenderize, API cũng có thể thử suy luận từ biệt danh sau khi tra cứu tập dữ liệu chưa xác định được. Chế độ này không cần tên thật và có thể trả về name: null.

forceToGenderize có bảo đảm trả về giới tính không?

Không. Trường này cho phép suy luận biệt danh, nhưng kết quả cuối cùng vẫn có thể không xác định. Hãy giữ nguyên JSON null gốc và kiểm tra result_status cùng reason.

API có xem hồ sơ mạng xã hội không?

Endpoint này phân tích giá trị đã gửi. API không tải hồ sơ, bài đăng hay ảnh của tài khoản để xác minh chủ sở hữu.

Tôi có thể dùng forceToGenderize với tên hoặc email không?

Có. Trường này là tùy chọn cho đầu vào name, email và username. API tra tập dữ liệu trước, sau đó dùng AI có phân tích biệt danh nếu chưa xác định được: 1 tín dụng khi tập dữ liệu cho ra kết quả, hoặc tổng cộng 2 tín dụng khi dùng AI.

Tiếp tục kiểm thử

Dùng khóa API GenderAPI

Nhập khóa API từ tài khoản GenderAPI để tiếp tục kiểm thử khi tín dụng dùng thử theo IP dùng chung trong 24 giờ đã hết. Lưu khóa sẽ không gửi yêu cầu; hãy gửi lại yêu cầu khi bạn sẵn sàng.

Chỉ được lưu trong tab trình duyệt hiện tại và sẽ bị xóa khi đóng tab.