TÀI LIỆU API V2

Phản hồi JSON và độ tin cậy trong API V2

Hiểu các trường data và meta của GenderAPI.io V2: giới tính, lý do không xác định, độ tin cậy, bằng chứng từ tập dữ liệu, điểm của AI, chế độ truy cập và siêu dữ liệu tính phí.

Hiểu phản hồi JSON

Phản hồi đơn lẻ thành công chứa data và meta. Ví dụ tập dữ liệu sau đây là phản hồi thực được ghi lại ngày 1 tháng 10 năm 2026 bằng khóa API; chỉ số dư tài khoản đã được thay thế. Ví dụ không thể hiện độ chính xác đã đo của sản phẩm, và một yêu cầu trực tiếp có thể trả về kết quả khác. Yêu cầu dùng khóa API trả về access.mode: api_key và null ở các trường hạn mức chỉ dành cho dùng thử; yêu cầu dùng thử theo IP trả về ip_trial cùng giới hạn dùng thử và thời điểm đặt lại.

Phản hồi JSON minh họa
{
  "data": {
    "input": {
      "type": "name",
      "value": "Tuấn",
      "country": "VN"
    },
    "name": "tuấn",
    "gender": "male",
    "country": "VN",
    "confidence": 0.9915730337078652,
    "confidence_kind": "observed_frequency",
    "sample_count": 356,
    "source": "dataset",
    "result_status": "identified",
    "reason": null,
    "country_source": "dataset",
    "match": {
      "name": "tuấn",
      "method": "normalized",
      "scope": "country",
      "country": "VN"
    }
  },
  "meta": {
    "request_id": "6630814b-b7c8-4e85-860d-dacee06d0d8c",
    "duration_ms": 11,
    "access": {
      "mode": "api_key",
      "reason": null
    },
    "usage": {
      "charged_credits": 1,
      "remaining_credits": 49999,
      "billing_status": "confirmed",
      "resets_at": null,
      "limit": null,
      "period_seconds": null
    }
  }
}

Trường phản hồi dự đoán

TrườngKiểuCó thể là nullVí dụMô tả
data.inputobjectKhông{"type":"name","value":"Tuấn","country":"VN"}Loại đầu vào, giá trị và quốc gia. forceToGenderize được đưa vào khi là true.
data.namestringCó"tuấn"Tên riêng đã khớp hoặc trích xuất được; null khi không có.
data.genderstringCó"male"male, female hoặc JSON null. Đây là suy luận, không phải danh tính cá nhân đã xác minh.
data.result_statusstringKhông"identified"identified khi có giới tính được trả về; nếu không thì unknown.
data.reasonstringCónullnull với kết quả identified. Lý do cho unknown: not_found, no_name_candidate, ambiguous hoặc insufficient_evidence.
data.confidencenumberCó0.95Giá trị từ 0 đến 1 hoặc null. Khi gender là null, độ tin cậy cũng là null.
data.confidence_kindstringCó"observed_frequency"observed_frequency: số lượng của nhóm chiếm ưu thế trong tập dữ liệu chia cho tổng số. model_reported: điểm do AI đưa ra, không phải xác suất đã hiệu chỉnh. Là null khi không có.
data.sample_countintegerCó1200Cỡ mẫu trong tập dữ liệu hoặc null. AI không tự tạo ra số lượng mẫu.
data.sourcestringKhông"dataset"dataset, ai hoặc none.
data.countrystringCó"VN"Mối liên hệ quốc gia từ dataset hoặc ai_association, hoặc null. Không xác định quốc tịch, nơi cư trú hay dân tộc.
data.country_sourcestringCó"dataset"Nguồn của mối liên hệ quốc gia: dataset, ai_association hoặc null.
data.matchobjectKhông{"name":"tuấn","method":"normalized","scope":"country","country":"VN"}Tên khớp trong tập dữ liệu, phương thức (normalized, token, substring hoặc model_inference), phạm vi country hoặc global và quốc gia đã khớp. Bằng chứng không có sẽ là null.

Các trường đầu vào được trả về

TrườngKiểuCó thể là nullVí dụMô tả
data.input.typestringKhông"name"Loại đầu vào: name, email hoặc username.
data.input.valuestringKhông"Tuấn"Giá trị đã gửi để dự đoán.
data.input.countrystringCó"VN"Ngữ cảnh quốc gia đã gửi; null nếu bỏ qua.
data.input.forceToGenderizebooleanKhôngtrueChỉ có khi bật chế độ biệt danh; nếu không thì bị bỏ qua.

Các trường so khớp tập dữ liệu

TrườngKiểuCó thể là nullVí dụMô tả
data.match.namestringCó"tuấn"Ứng viên được chọn trong tập dữ liệu; null khi không có dòng tập dữ liệu nào được chọn.
data.match.methodstringCó"normalized"normalized, token, substring hoặc model_inference; null khi không có.
data.match.scopestringCó"country"country hoặc global khi tra cứu tập dữ liệu; null với AI hoặc khi thiếu bằng chứng.
data.match.countrystringCó"VN"Quốc gia của dòng tập dữ liệu được chọn; null với dòng toàn cầu hoặc với AI.

Siêu dữ liệu về truy cập, tính phí và yêu cầu

TrườngKiểuCó thể là nullVí dụMô tả
meta.request_idstringKhông"550e8400-e29b-41d4-a716-446655440000"Mã định danh duy nhất của lần gửi HTTP này; cũng được gửi trong X-Request-ID.
meta.duration_msintegerKhông42Thời gian xử lý yêu cầu tính bằng mili giây.
meta.access.modestringKhông"api_key"api_key, ip_trial hoặc unauthenticated. Khi dùng tài khoản trả phí, hãy kiểm tra giá trị là api_key.
meta.access.reasonstringCónullLý do chuyển sang dùng thử: api_key_missing, api_key_invalid hoặc api_key_not_found; trường hợp khác là null.
meta.usage.charged_creditsintegerCó1Số tín dụng thực tính. Bằng 0 trước khi tính phí hoặc sau khi hoàn trả toàn bộ đã được xác nhận; null khi việc tính phí chưa được xác nhận.
meta.usage.remaining_creditsintegerCó99Số dư khi thao tác hoàn tất. Có thể âm; null khi không có thông tin hoặc việc tính phí chưa được xác nhận.
meta.usage.billing_statusstringKhông"confirmed"not_charged, confirmed hoặc unconfirmed. Kiểm tra trường này trước khi thử lại một dự đoán thất bại.
meta.usage.resets_atstringCó"2026-09-27T12:00:00.000Z"Thời điểm đặt lại dùng thử theo IP, theo UTC (ISO 8601); null với tài khoản dùng khóa API hoặc khi chưa biết.
meta.usage.limitintegerCó10Hạn mức dùng thử theo IP; null với tài khoản dùng khóa API.
meta.usage.period_secondsintegerCó86400Chu kỳ dùng thử theo IP tính bằng giây; null với tài khoản dùng khóa API.

Kết quả không xác định thành công

HTTP 200 nghĩa là thao tác đã hoàn tất; mã này không bảo đảm có giới tính. Giữ nguyên JSON null thay vì chuyển thành male, female, chuỗi rỗng hoặc độ tin cậy bằng 0. Kiểm tra data.result_status và data.reason tách biệt với lỗi HTTP.

Ví dụ thực chỉ dùng tập dữ liệu này, được ghi lại ngày 1 tháng 10 năm 2026, trả về source: none và reason: not_found và vẫn tốn 1 tín dụng. Một dòng tập dữ liệu có số lượng bằng nhau có thể trả về reason: ambiguous mà vẫn giữ sample_count. Kết quả AI không xác định dùng source: ai và reason: insufficient_evidence.

Phản hồi JSON minh họa
{
  "data": {
    "input": {
      "type": "name",
      "value": "zzzxxyy",
      "country": null
    },
    "name": null,
    "gender": null,
    "country": null,
    "confidence": null,
    "confidence_kind": null,
    "sample_count": null,
    "source": "none",
    "result_status": "unknown",
    "reason": "not_found",
    "country_source": null,
    "match": {
      "name": null,
      "method": null,
      "scope": null,
      "country": null
    }
  },
  "meta": {
    "request_id": "54fdcd4e-f8bc-4224-918f-3a5732e08b9c",
    "duration_ms": 10,
    "access": {
      "mode": "api_key",
      "reason": null
    },
    "usage": {
      "charged_credits": 1,
      "remaining_credits": 49999,
      "billing_status": "confirmed",
      "resets_at": null,
      "limit": null,
      "period_seconds": null
    }
  }
}

Diễn giải độ tin cậy và bằng chứng so khớp

Độ tin cậy 0.9 nằm trên thang từ 0 đến 1. Với observed_frequency, giá trị này là số lượng của nhóm chiếm ưu thế chia cho tổng số của dòng tập dữ liệu được chọn; đây không phải độ chính xác toàn trình đã đo của sản phẩm. Điểm model_reported do AI cung cấp và không được hiệu chỉnh theo tần suất của tập dữ liệu.

Hãy chọn mọi ngưỡng của ứng dụng dựa trên dữ liệu đánh giá của riêng bạn và confidence_kind. Không xếp hạng trực tiếp điểm của tập dữ liệu và của AI như thể chúng đo cùng một thứ. Với AI, match.name, match.scope và match.country là null vì không có dòng tập dữ liệu nào được chọn; match.method là model_inference.

Với họ tên đầy đủ, kết quả tập dữ liệu có thể đến từ một thành phần thay vì toàn bộ chuỗi. data.input giữ nguyên giá trị đã gửi; data.name mô tả tên được trả về, còn data.match mô tả ứng viên và phạm vi tra cứu.

Quyết định bước tiếp theo cho ứng dụng của bạn

Trước tiên, hãy xử lý lỗi của yêu cầu và của từng mục, sau đó kiểm tra result_status. Với một dự đoán đơn lẻ, hãy đọc data; với một lô, hãy áp dụng cùng quyết định cho data của từng mục thành công. Giữ nguyên kết quả không xác định trong ứng dụng thay vì ép gán nhãn male hoặc female.

Kết quảÝ nghĩaCách xử lý đề xuất
identified; gender: male hoặc femaleSuy luận đã đưa ra giới tính, kèm bằng chứng từ tập dữ liệu hoặc AI.Áp dụng chính sách đã được đánh giá cho confidence_kind đó; lưu lại source và bằng chứng so khớp.
unknown; reason: not_foundKhông có bản ghi nào trong tập dữ liệu khớp với các ứng viên đã phân tích.Giữ gender là null. Một yêu cầu mới được gửi có chủ đích với tùy chọn AI khác là một thao tác mới và bị tính phí.
unknown; reason: no_name_candidateQuá trình phân tích cho tập dữ liệu không tìm được ứng viên tên nào có thể dùng.Giữ null; kiểm tra loại đầu vào và giá trị trước khi chọn bất kỳ suy luận bổ sung nào.
unknown; reason: ambiguousDòng tập dữ liệu được chọn có số lượng nam và nữ bằng nhau; sample_count vẫn có thể xuất hiện.Không tự phân định kết quả hòa và không chuyển độ tin cậy null thành 0.
unknown; reason: insufficient_evidenceAI đã hoàn tất nhưng không có đủ bằng chứng để trả về giới tính.Coi đây là kết quả không xác định đã hoàn tất, không phải lỗi của nhà cung cấp hay trường hợp cần tự động thử lại.
Problem Details hoặc error của một mụcQuá trình xử lý thất bại, chẳng hạn do ai_upstream_error hoặc prediction_timeout.Lưu mã lỗi và request ID, kiểm tra việc tính phí và làm theo hướng dẫn thử lại.

Chọn ngưỡng dựa trên đánh giá của chính bạn

Không có ngưỡng độ tin cậy chung nào khiến một dự đoán trở nên chính xác. Hãy đánh giá riêng observed_frequency và model_reported trên các ví dụ đại diện cho trường hợp sử dụng của bạn và được gắn nhãn độc lập. Tần suất trong tập dữ liệu và điểm do AI tự báo cáo là hai tín hiệu khác nhau, kể cả khi cả hai tình cờ đều là 0.9. Hãy đo tần suất chính sách của bạn đưa ra câu trả lời và tần suất các dự đoán được trả lời đó là đúng; với mọi trường hợp còn lại, hãy giữ kết quả không xác định hoặc chuyển sang xem xét.

Ví dụ, nếu result_status là identified nhưng confidence_kind là model_reported, hãy áp dụng chính sách AI đã được bạn đánh giá thay vì ngưỡng của tập dữ liệu. Nếu đã dùng forceToGenderize, name: null đi kèm gender khác null là hợp lệ: một bí danh có thể được suy luận mà không cần trích xuất tên thật. Hãy kiểm tra gender và result_status, không chỉ riêng name, để biết suy luận có đưa ra câu trả lời hay không. Đây vẫn là một ước tính, không phải xác minh danh tính của một người.

Hướng dẫn liên quan