Lỗi và mã trạng thái HTTP
Lỗi ứng dụng dùng application/problem+json (RFC 9457). Hãy xử lý theo các trường ổn định code và action, không theo nội dung detail dành cho người đọc. Lỗi xác thực dữ liệu có vị trí JSON Pointer trong errors. Gửi kèm request_id khi liên hệ bộ phận hỗ trợ. Lỗi proxy hoặc lỗi truyền tải có thể trả về nội dung khác, vì vậy hãy kiểm tra Content-Type trước khi phân tích JSON.
Ví dụ 422 mô phỏng sau đây cho thấy cú pháp email không hợp lệ được phát hiện trước khi tính phí. Danh mục lỗi công khai liệt kê mọi mã lỗi, trạng thái, giải thích và hành động đề xuất.
| Trạng thái HTTP | Ý nghĩa thường gặp | Bước tiếp theo |
|---|---|---|
| 400 / 413 / 415 | JSON sai định dạng, nội dung quá lớn hoặc kiểu nội dung không được hỗ trợ. | Sửa yêu cầu. |
| 401 / 403 | Truy cập bị từ chối, tài khoản bị hạn chế hoặc không đủ tín dụng. | Kiểm tra code; sửa quyền truy cập, nạp thêm tín dụng hoặc chờ dùng thử theo IP được đặt lại. |
| 422 | Đầu vào không hợp lệ hoặc tùy chọn không tương thích. | Sửa các trường được nêu trong errors. |
| 404 / 405 | Đường dẫn không xác định hoặc phương thức HTTP không được hỗ trợ. | Kiểm tra đường dẫn endpoint và tiêu đề phản hồi Allow. |
| 429 | Giới hạn tần suất hoặc giới hạn thao tác đồng thời. | Chờ theo Retry-After trước khi gửi yêu cầu khác. |
| 500 | Lỗi máy chủ ngoài dự kiến. | Liên hệ bộ phận hỗ trợ kèm request_id; kiểm tra việc tính phí trước khi thử lại. |
| 502 / 503 / 504 | Lỗi nhà cung cấp, thành phần phụ thuộc, tính phí hoặc hết thời gian chờ. | Kiểm tra code, action và billing_status trước khi thử lại. |
{
"type": "urn:genderapi:problem:validation_error",
"title": "validation error",
"status": 422,
"detail": "A valid email address is required.",
"instance": "urn:uuid:11111111-1111-4111-8111-111111111111",
"code": "validation_error",
"request_id": "11111111-1111-4111-8111-111111111111",
"documentation": "https://api.genderapi.io/api/v2/errors",
"action": "correct_request",
"errors": [
{
"pointer": "/value",
"message": "Invalid email address."
}
],
"meta": {
"request_id": "11111111-1111-4111-8111-111111111111",
"duration_ms": 12,
"access": {
"mode": "ip_trial",
"reason": "api_key_missing"
},
"usage": {
"charged_credits": 0,
"remaining_credits": null,
"billing_status": "not_charged",
"resets_at": "2026-09-26T12:00:00.000Z",
"limit": 10,
"period_seconds": 86400
}
}
}Trường phản hồi lỗi
| Trường | Kiểu | Có thể là null | Ví dụ | Mô tả |
|---|---|---|---|---|
type | string | Không | "urn:genderapi:problem:validation_error" | URI xác định loại lỗi. |
title | string | Không | "validation error" | Tiêu đề lỗi ngắn gọn, dành cho người đọc. |
status | integer | Không | 422 | Mã trạng thái HTTP. |
detail | string | Không | "The request does not match the schema." | Giải thích cho lỗi cụ thể này. |
instance | string | Không | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | Mã định danh của yêu cầu thất bại. |
code | string | Không | "validation_error" | Mã lỗi ổn định, máy có thể đọc. |
request_id | string | Khô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. |
documentation | string | Không | "https://api.genderapi.io/api/v2/errors" | Liên kết đến danh mục lỗi, nếu có. |
action | string | Không | "correct_request" | Hành động khắc phục đề xuất; có khi được định nghĩa trong danh mục lỗi. |
errors | array<object> | Không | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | Các vấn đề xác thực dữ liệu, nếu có. Mỗi mục chứa pointer và message. |
errors[].pointer | string | Không | "/value" | JSON Pointer xác định đầu vào không hợp lệ. |
errors[].message | string | Không | "must NOT have fewer than 1 characters" | Giải thích vấn đề xác thực dữ liệu. |
Siêu dữ liệu về truy cập, tính phí và yêu cầu
| Trường | Kiểu | Có thể là null | Ví dụ | Mô tả |
|---|---|---|---|---|
meta.request_id | string | Khô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_ms | integer | Không | 42 | Thời gian xử lý yêu cầu tính bằng mili giây. |
meta.access.mode | string | Khô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.reason | string | Có | null | Lý 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_credits | integer | Có | 1 | Số 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_credits | integer | Có | 99 | Số 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_status | string | Khô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_at | string | Có | "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.limit | integer | Có | 10 | Hạn mức dùng thử theo IP; null với tài khoản dùng khóa API. |
meta.usage.period_seconds | integer | Có | 86400 | Chu kỳ dùng thử theo IP tính bằng giây; null với tài khoản dùng khóa API. |
Thử lại và tính phí
Mỗi yêu cầu dự đoán là một thao tác mới, kể cả khi gửi lại một yêu cầu giống hệt. Quy tắc tín dụng thông thường áp dụng cho từng yêu cầu. Không có cơ chế chống yêu cầu trùng lặp, vì vậy hãy tránh tự động thử lại sau khi mất kết nối hoặc khi chưa rõ kết quả.
Với phản hồi 429, hãy chờ theo Retry-After trước khi gửi yêu cầu khác. Với dự đoán thất bại, trước tiên hãy kiểm tra code, action và meta.usage.billing_status. Với billing_reconciliation_required hoặc việc tính phí chưa được xác nhận, hãy liên hệ bộ phận hỗ trợ kèm request_id trước khi thử lại.
Một lô thành công một phần có thể trả về HTTP 200. Kiểm tra từng mục và chỉ gửi lại các mục thất bại sau khi việc tính phí đã được xác nhận; nếu gửi lại, các mục thành công sẽ bị tính phí lần nữa.
X-Request-ID và meta.request_id xác định lần gửi HTTP hiện tại. Đọc /usage để biết số dư hiện tại. HEAD không bắt đầu dự đoán bị tính phí. Phản hồi dự đoán và phản hồi tài khoản không được lưu vào bộ nhớ đệm.
Client cần chấp nhận các trường phản hồi được bổ sung thêm và giữ nguyên giá trị null khi không có thông tin.
Giới hạn yêu cầu
Hãy xử lý HTTP 429 và Retry-After thay vì cho rằng yêu cầu luôn được chấp nhận ở các mức tối đa này. Năng lực của dịch vụ được dùng chung. Các giá trị hiển thị là mặc định hiện tại của dịch vụ. Phản hồi khi vượt giới hạn tần suất có X-RateLimit-Limit, X-RateLimit-Remaining và X-RateLimit-Reset (giây Unix). Retry-After là thời gian chờ tính bằng giây. Các tiêu đề này mô tả giới hạn yêu cầu, không phải số tín dụng còn lại. Ngay cả lần đọc /usage miễn phí cũng được tính vào giới hạn tần suất.
| Giới hạn | Giá trị |
|---|---|
| Nội dung yêu cầu JSON | Tối đa 64 KiB |
| Giá trị cần dự đoán | 1–254 ký tự |
| Lô | 50 mục với khóa API; 10 mục khi dùng thử theo IP |
| Tần suất theo tài khoản | 120 yêu cầu mỗi phút |
| Tần suất theo địa chỉ IP | 600 yêu cầu mỗi phút |
| Thao tác đồng thời | 2 cho mỗi tài khoản; 16 trên toàn dịch vụ |