# Trích xuất tên ứng viên và tín hiệu giới tính từ địa chỉ email

> Trích xuất tên ứng viên từ địa chỉ email và bổ sung các kết quả dự đoán cùng trường nguồn liên quan vào quy trình Excel, Google Sheets hoặc API mà không thay đổi thông tin do chính người dùng cung cấp.

Canonical HTML: https://www.genderapi.io/vi/blog/extract-names-from-email-addresses

Last reviewed: 2026-09-29

## Thông tin xuất bản

Ngày xuất bản lần đầu: 2025-07-16T09:00:00.000Z

Kiểm tra lần cuối: 2026-09-29T00:00:00.000Z

## GenderAPI có thể trích xuất tên từ địa chỉ email không?

Có. Với các địa chỉ email cá nhân được hỗ trợ, GenderAPI trích xuất tên ứng viên từ phần đứng trước @ và trả về tín hiệu giới tính, ngữ cảnh quốc gia và độ tin cậy. Đây là ước tính, không phải xác minh danh tính. Địa chỉ dùng chung hoặc địa chỉ ngẫu nhiên có thể không cho kết quả.

- [Bản demo V2 trực tuyến và các tùy chọn](https://www.genderapi.io/vi/blog/extract-names-from-email-addresses#demo)

## Phân tích địa chỉ email

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 (toàn bộ địa chỉ email) đượ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ý](https://www.genderapi.io/vi/data-provenance).

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.

**Phản hồi V2 thực; ghi lại ngày 1 tháng 10 năm 2026**

```json
{
  "data": {
    "input": {
      "type": "email",
      "value": "huong.le@example.com",
      "country": null
    },
    "name": "huong",
    "gender": "female",
    "country": "VN",
    "confidence": 0.98,
    "confidence_kind": "model_reported",
    "sample_count": null,
    "source": "ai",
    "result_status": "identified",
    "reason": null,
    "country_source": "ai_association",
    "match": {
      "name": null,
      "method": "model_inference",
      "scope": null,
      "country": null
    }
  },
  "meta": {
    "request_id": "ea2d415c-3b37-488f-b8c5-498315e51df4",
    "duration_ms": 414,
    "access": {
      "mode": "api_key",
      "reason": null
    },
    "usage": {
      "charged_credits": 2,
      "remaining_credits": 49999,
      "billing_status": "confirmed",
      "resets_at": null,
      "limit": null,
      "period_seconds": null
    }
  }
}
```

- [tạo tài khoản](https://app.genderapi.io/user/register)

## Từ địa chỉ email đến dữ liệu có cấu trúc

- Đầu vào: emilyblack@email.com
- Trích xuất tên: Emily
- Làm giàu dữ liệu: Giới tính + độ tin cậy

## Chọn nơi xử lý dữ liệu email

- [Microsoft Excel Cài phần bổ trợ →](https://appsource.microsoft.com/en-us/product/office/WA200008555)
- [Google Sheets Mở Marketplace →](https://workspace.google.com/marketplace/app/gender_api_for_google_sheets_determines/712811575775)
- [Shopify Xem ứng dụng →](https://apps.shopify.com/gender-api)
- [Xử lý hàng loạt Excel/CSV Mở công cụ tệp →](https://app.genderapi.io/csv)
- [Airtable Xem tiện ích mở rộng →](https://airtable.com/marketplace/blkqCasjQIqmmBrmb/gender-api-io-determine-gender)
- [REST API Xem endpoint →](https://www.genderapi.io/vi/docs/v2/gender-from-email)

## Xử lý cột email bằng phần bổ trợ Excel

Chọn phương thức xử lý địa chỉ email, rồi ánh xạ cột đầu vào và các cột kết quả. Dùng GENDER.FROM_EMAIL để tra cứu động theo từng ô, hoặc dùng thanh bên khi muốn ghi cố định kết quả.

- [Xem video hướng dẫn Excel](https://youtu.be/6j4w-3oMZnA)
- [Hướng dẫn phần bổ trợ GenderAPI cho Excel](https://www.genderapi.io/vi/blog/genderize-excel-names-using-genderapi-excel-add-in)
- [Hàm GENDER trong Excel](https://www.genderapi.io/vi/blog/gender-formula-for-microsoft-excel)

## Phân tích địa chỉ email bằng tiện ích bổ sung hoặc hàm

Dùng tiện ích bổ sung cho các hàng hiện có, quy trình tương ứng cho hàng mới và hàm GENDER để tra cứu từ một ô.

- [Hướng dẫn tiện ích bổ sung Google Sheets](https://www.genderapi.io/vi/blog/how-to-determine-gender-in-google-sheets-using-gender-api-add-on)
- [Hàm GENDER trong Google Sheets](https://www.genderapi.io/vi/blog/gender-formula-google-sheets-detect-gender-from-names)

## Thêm phân tích địa chỉ email vào máy chủ của bạn

Gọi endpoint địa chỉ email được mô tả trong tài liệu từ máy chủ và không đưa khóa API vào trình duyệt hoặc mã công khai. Xử lý rõ ràng cấu trúc phản hồi, mã lỗi và mức tiêu thụ tín dụng.

Hình ảnh này là kết quả của một tích hợp trước đây và không thể hiện quy tắc phản hồi V2 hiện tại.

- [Yêu cầu với một địa chỉ email](https://www.genderapi.io/vi/docs/v2/gender-from-email)
- [Yêu cầu với nhiều địa chỉ email](https://www.genderapi.io/vi/docs/v2/batch)

## Không ép kết quả khi địa chỉ không chứa tên

Địa chỉ theo vai trò, mã định danh ngẫu nhiên và hộp thư dùng chung không phải lúc nào cũng cho tín hiệu đáng tin cậy. Hãy giữ lại data.result_status, data.reason và data.confidence, và xử lý riêng các kết quả không chắc chắn.

Một kết quả khớp từ địa chỉ email không xác minh danh tính hay tên của chủ sở hữu địa chỉ. Hãy đo chất lượng trên dữ liệu của bạn và không đưa ra quyết định có ảnh hưởng đáng kể đến một người chỉ dựa trên ước tính này.

## Lưu dữ liệu gốc và kết quả dự đoán riêng biệt

Hãy giữ lại mã định danh của bản ghi gốc. API không mở hồ sơ, không xác minh chủ sở hữu tài khoản và không xác minh danh tính của bất kỳ ai. Chỉ gửi ngữ cảnh quốc gia khi bạn có thông tin đáng tin cậy, và đừng suy ra quốc gia từ tên miền hoặc ngôn ngữ của trang web.

Khi tra cứu tập dữ liệu, hệ thống phân tích phần đứng trước @, loại bỏ hậu tố bắt đầu bằng + và đánh giá các tên ứng viên. Với yêu cầu tiêu chuẩn, một số ít ứng viên có thể được thêm từ phần đầu và phần cuối của các thành phần viết liền. Nếu tìm thấy nhiều bản ghi, bản ghi có tổng số lần xuất hiện được lưu lớn nhất sẽ được chọn, nhưng đó không nhất thiết là tên thật của người đó. Nếu bạn gửi quốc gia, bản ghi của quốc gia đó được ưu tiên cho từng ứng viên; nếu không có, bản ghi toàn cầu có thể được dùng. Hãy kiểm tra data.match.scope và country_source.

| Bản ghi | Trường | Cách hiểu |
| --- | --- | --- |
| Bản ghi gốc | contact_id / original_email | Lưu dữ liệu gốc trong hệ thống của bạn và không ghi đè tên do chính người dùng cung cấp bằng kết quả dự đoán. Đây không phải là các trường trong phản hồi API. |
| Tên ứng viên | data.name / data.match | Tên được chọn có thể là null. Không có trường họ đã được xác minh, và một kết quả khớp không chứng minh danh tính của chủ sở hữu địa chỉ email. |
| Kết quả dự đoán | data.gender / data.result_status / data.reason | Kết quả không xác định được ghi là null trong JSON. Với các bản ghi có số lượng bằng nhau trong tập dữ liệu, hệ thống có thể tìm thấy tên nhưng không trả về giới tính. |
| Bằng chứng | data.source / data.confidence_kind / data.confidence / data.sample_count | confidence là giá trị từ 0 đến 1. Tần suất xuất hiện trong tập dữ liệu và điểm của AI đo những thứ khác nhau; với kết quả từ AI, sample_count là null. |
| Nhật ký xử lý | meta.request_id / meta.usage | Lưu mã yêu cầu và trạng thái tính phí. Việc không nhận được phản hồi không có nghĩa là thao tác đó miễn phí hay đã thất bại. |

### Chọn chế độ xử lý và số tín dụng

Mặc định của yêu cầu đơn lẻ là fallback, còn mặc định của các mục trong yêu cầu hàng loạt là off. forceToGenderize là tùy chọn và dùng được với tên, địa chỉ email hoặc tên người dùng. Khi kết hợp, hãy bỏ qua ai_mode hoặc đặt fallback; không thể kết hợp với off hoặc always. Kết quả unknown đã hoàn tất vẫn bị tính tín dụng. Chỉ cần số dư dương là có thể bắt đầu một yêu cầu, và số dư có thể âm sau khi xử lý xong.

Khi dùng AI, AI nhận toàn bộ địa chỉ đã gửi, kể cả tên miền và hậu tố sau dấu +, ngay cả khi được hướng dẫn bỏ qua các phần này. Với forceToGenderize, giới tính có thể được trả về dù không tìm thấy tên thật. Điều đó không có nghĩa là đã trích xuất được một tên đã xác minh để dùng trong CRM.

| Tùy chọn | Cách xử lý | Tín dụng cho mỗi mục hoàn tất |
| --- | --- | --- |
| options.ai_mode: off | Chỉ dùng tập dữ liệu | 1 tín dụng |
| options.ai_mode: fallback | Kiểm tra tập dữ liệu trước, dùng AI dự phòng thông thường khi chưa xác định được giới tính | Tổng cộng 1 tín dụng, đã gồm AI |
| options.ai_mode: always | Dùng AI trực tiếp | 2 tín dụng |
| forceToGenderize: true | Kiểm tra tập dữ liệu trước, sau đó diễn giải biệt danh ngay cả khi không có tên thật | 1 tín dụng nếu tập dữ liệu xác định được, tổng cộng 2 tín dụng nếu dùng AI |

### Trước tiên, thử một địa chỉ email chỉ với tập dữ liệu

Ví dụ đầu vào không bảo đảm một kết quả dự đoán cụ thể. Đặt GENDERAPI_API_KEY trong môi trường máy chủ và không đưa khóa vào mã phía máy khách công khai. V1 và V2 dùng cùng một khóa API và cùng số dư tài khoản. Kiểm tra khóa bằng /api/v2/usage và xác nhận meta.access.mode là api_key.

Chọn ngôn ngữ lập trình. [Thiết lập khóa API](https://www.genderapi.io/vi/docs/v2/authentication#environment-setup), 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.

**cURL**

cURL 7.76+ trong shell POSIX. Chạy trong terminal. [Tài liệu môi trường chạy](https://curl.se/docs/manpage.html)

```bash
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",
  "options": {
    "ai_mode": "off"
  }
}'
```

**JavaScript / Node.js**

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](https://nodejs.org/api/globals.html#fetch)

```javascript
// 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",
  "options": {
    "ai_mode": "off"
  }
};

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

**Python**

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](https://docs.python.org/3/library/urllib.request.html)

```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\",\"options\":{\"ai_mode\":\"off\"}}")

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

**PHP**

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](https://www.php.net/manual/en/book.curl.php)

```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","options":{"ai_mode":"off"}}', 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.
```

**Java**

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](https://docs.oracle.com/en/java/javase/17/docs/api/java.net.http/java/net/http/HttpClient.html)

```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\",\"options\":{\"ai_mode\":\"off\"}}";
        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.
    }
}
```

**C# / .NET**

Ứ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](https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/http/httpclient)

```csharp
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\",\"options\":{\"ai_mode\":\"off\"}}", 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.
}
```

**Go**

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](https://pkg.go.dev/net/http)

```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\",\"options\":{\"ai_mode\":\"off\"}}"
    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)
    }
}
```

- [Hướng dẫn về lỗi và thử lại →](https://www.genderapi.io/vi/docs/v2/errors-and-retries)

### Xử lý kết quả của danh sách và việc gửi lại

POST /api/v2/gender/batch nhận tối đa 50 mục với khóa API và tối đa 10 mục với dùng thử theo IP. Chỉ định type, value và options cho từng mục. Nếu cần AI dự phòng thông thường, hãy đặt rõ fallback cho từng mục. id phải là duy nhất trong lô, và index bắt đầu từ 0 trong lô đã gửi. Hãy lưu riêng mã công việc và mã dòng gốc của bạn.

HTTP 200 không có nghĩa là mọi mục đều đã hoàn tất. Hãy xử lý riêng từng kết quả identified, unknown và error. meta.summary.succeeded bao gồm cả identified và unknown. Kiểm tra đồng thời data.gender, source, confidence_kind, confidence, match và reason, và đừng coi điểm của AI với tần suất xuất hiện trong tập dữ liệu là cùng một thứ.

Nếu meta.usage.billing_status là confirmed, chỉ gửi lại các mục lỗi được phép thử lại. Nếu là unconfirmed hoặc không nhận được phản hồi, hãy dừng lại và kiểm tra việc tính phí. Gửi lại cùng một mục, kể cả kết quả unknown đã hoàn tất, sẽ bị tính phí như một thao tác mới. Đừng gửi lại toàn bộ danh sách khi chưa kiểm tra.

[Quy tắc yêu cầu hàng loạt](https://www.genderapi.io/vi/docs/v2/batch) · [Trường phản hồi](https://www.genderapi.io/vi/docs/v2/responses) · [Tùy chọn AI](https://www.genderapi.io/vi/docs/v2/ai-options) · [Đánh giá độ chính xác và độ tin cậy](https://www.genderapi.io/vi/accuracy-methodology) · [Chính sách quyền riêng tư](https://www.genderapi.io/vi/privacy-policy)

Phần bổ trợ Excel, tiện ích bổ sung Google Sheets và các tích hợp dựng sẵn khác có thể dùng cách kết nối và định dạng kết quả riêng. Đừng giả định đầu ra của chúng theo cấu trúc JSON V2 này; hãy xem hướng dẫn hiện hành của từng tích hợp.

## Tên và giới tính từ địa chỉ email

### Có thể trích xuất tên từ địa chỉ email không?

Với các địa chỉ email cá nhân được hỗ trợ, GenderAPI trích xuất tên ứng viên từ phần đứng trước @ và, khi có kết quả, trả về giới tính, quốc gia và độ tin cậy. Tên ứng viên là một ước tính, không phải tên đã được xác minh của chủ sở hữu địa chỉ email.

### Có tìm được tên trong mọi địa chỉ email không?

Không. Địa chỉ theo vai trò, mã định danh ngẫu nhiên và phần cục bộ không chứa tên thật không phải lúc nào cũng cho tín hiệu đáng tin cậy. Trong phản hồi V2, hãy kiểm tra data.result_status, data.reason, data.confidence và data.confidence_kind.

### Truy vấn địa chỉ email có được lưu không?

Theo chính sách đã công bố, truy vấn địa chỉ email không được lưu giữ dưới dạng bản ghi truy vấn có thể tái sử dụng. Nhật ký kỹ thuật và nhật ký bảo mật được quản lý riêng và tuân theo thời hạn lưu giữ nêu trong Chính sách quyền riêng tư. Không nhập dữ liệu cá nhân nhạy cảm vào bản demo công khai.

### Có thể dùng trong Excel và Google Sheets không?

Có. Bạn có thể xử lý cột địa chỉ email bằng phần bổ trợ Excel, tiện ích bổ sung Google Sheets hoặc công cụ tệp Excel/CSV. Các tích hợp này có định dạng kết quả riêng, khác với JSON của V2.

### API trả về những trường nào?

V2 trả về data.name, data.gender, data.match cùng các trường về nguồn và độ tin cậy; meta chứa mã yêu cầu và mức tiêu thụ tín dụng. Tên ứng viên hoặc giới tính có thể là null. Không có trường họ đã được xác minh.

### Khi nào AI được sử dụng?

Với yêu cầu đơn lẻ V2, AI dự phòng thông thường được bật theo mặc định. Bản demo này cho phép dùng yêu cầu tiêu chuẩn và forceToGenderize; off và always được đặt trong yêu cầu API. AI dự phòng thông thường tốn tổng cộng 1 tín dụng, always tốn 2 tín dụng. Với forceToGenderize, kết quả từ tập dữ liệu tốn 1 tín dụng, kết quả có dùng AI tốn tổng cộng 2 tín dụng và vẫn có thể là unknown.

### Có thể dùng thử miễn phí không?

Tài khoản nhận 200 tín dụng miễn phí mỗi ngày, và dùng thử theo IP dùng chung cung cấp 10 tín dụng cho mỗi địa chỉ IP công khai trong mỗi 24 giờ. Khi không có khóa API hoặc khóa không được nhận diện, hệ thống có thể chuyển sang dùng thử theo IP, vì vậy hãy kiểm tra meta.access.mode trong phản hồi. Đơn vị được tính là tín dụng, không phải số yêu cầu.
