ข้อผิดพลาดและรหัสสถานะ HTTP
ข้อผิดพลาดของแอปพลิเคชันใช้ application/problem+json (RFC 9457) ให้แยกกรณีตาม code และ action ที่คงที่ ไม่ใช่ตาม detail ที่เป็นข้อความสำหรับคนอ่าน ข้อผิดพลาดจากการตรวจสอบจะมีตำแหน่ง JSON Pointer ใน errors แนบ request_id เมื่อติดต่อทีมช่วยเหลือ ความล้มเหลวของพร็อกซีหรือการรับส่งข้อมูลอาจส่งคืนเนื้อหาที่ต่างออกไป จึงควรตรวจสอบ Content-Type ก่อนแยกวิเคราะห์ JSON
ตัวอย่างสังเคราะห์ของ 422 ต่อไปนี้แสดงรูปแบบอีเมลที่ไม่ถูกต้องก่อนหักเครดิต รายการข้อผิดพลาดสาธารณะแสดงทุก code สถานะ คำอธิบาย และการดำเนินการที่แนะนำ
| สถานะ HTTP | ความหมายโดยทั่วไป | ขั้นตอนถัดไป |
|---|---|---|
| 400 / 413 / 415 | JSON มีรูปแบบไม่ถูกต้อง เนื้อหามีขนาดเกิน หรือประเภทสื่อไม่รองรับ | แก้ไขคำขอ |
| 401 / 403 | การเข้าถึงถูกปฏิเสธ บัญชีถูกจำกัด หรือเครดิตไม่เพียงพอ | ตรวจสอบ code แล้วแก้ไขการเข้าถึงหรือเติมเครดิต / รอให้การทดลองใช้รีเซ็ต |
| 422 | ข้อมูลนำเข้าไม่ถูกต้องหรือตัวเลือกใช้ร่วมกันไม่ได้ | แก้ไขฟิลด์ที่ระบุใน errors |
| 404 / 405 | ไม่รู้จักเส้นทางหรือไม่รองรับเมธอด HTTP นี้ | ตรวจสอบพาธของ endpoint และส่วนหัว Allow ในการตอบกลับ |
| 429 | ถึงขีดจำกัดอัตราคำขอหรือจำนวนงานพร้อมกัน | รอตาม Retry-After ก่อนส่งคำขอถัดไป |
| 500 | เซิร์ฟเวอร์ล้มเหลวโดยไม่คาดคิด | ติดต่อทีมช่วยเหลือพร้อม request_id และตรวจสอบการหักเครดิตก่อนส่งคำขอซ้ำ |
| 502 / 503 / 504 | ความล้มเหลวของผู้ให้บริการ ระบบที่เกี่ยวข้อง การหักเครดิต หรือการหมดเวลา | ตรวจสอบ code, action และ billing_status ก่อนส่งคำขอซ้ำ |
{
"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
}
}
}ฟิลด์การตอบกลับของข้อผิดพลาด
| ฟิลด์ | ชนิดข้อมูล | เป็น null ได้ | ตัวอย่าง | คำอธิบาย |
|---|---|---|---|---|
type | string | ไม่ | "urn:genderapi:problem:validation_error" | URI ที่ระบุประเภทของปัญหา |
title | string | ไม่ | "validation error" | ชื่อข้อผิดพลาดสั้น ๆ สำหรับคนอ่าน |
status | integer | ไม่ | 422 | รหัสสถานะ HTTP |
detail | string | ไม่ | "The request does not match the schema." | คำอธิบายความล้มเหลวครั้งนี้โดยเฉพาะ |
instance | string | ไม่ | "urn:uuid:550e8400-e29b-41d4-a716-446655440000" | ตัวระบุของคำขอที่ล้มเหลว |
code | string | ไม่ | "validation_error" | รหัสข้อผิดพลาดที่คงที่และเครื่องอ่านได้ |
request_id | string | ไม่ | "550e8400-e29b-41d4-a716-446655440000" | ตัวระบุเฉพาะของการส่ง HTTP ครั้งนี้ และส่งใน X-Request-ID ด้วย |
documentation | string | ไม่ | "https://api.genderapi.io/api/v2/errors" | ลิงก์ไปยังรายการข้อผิดพลาด เมื่อมีการระบุ |
action | string | ไม่ | "correct_request" | แนวทางแก้ไขที่แนะนำ มีเมื่อกำหนดไว้ในรายการข้อผิดพลาด |
errors | array<object> | ไม่ | [{"pointer":"/value","message":"must NOT have fewer than 1 characters"}] | ปัญหาจากการตรวจสอบ มีเมื่อมีข้อมูล แต่ละรายการมี pointer และ message |
errors[].pointer | string | ไม่ | "/value" | JSON Pointer ที่ระบุข้อมูลนำเข้าที่ไม่ถูกต้อง |
errors[].message | string | ไม่ | "must NOT have fewer than 1 characters" | คำอธิบายปัญหาจากการตรวจสอบ |
เมทาดาทาของการเข้าถึง การหักเครดิต และคำขอ
| ฟิลด์ | ชนิดข้อมูล | เป็น null ได้ | ตัวอย่าง | คำอธิบาย |
|---|---|---|---|---|
meta.request_id | string | ไม่ | "550e8400-e29b-41d4-a716-446655440000" | ตัวระบุเฉพาะของการส่ง HTTP ครั้งนี้ และส่งใน X-Request-ID ด้วย |
meta.duration_ms | integer | ไม่ | 42 | ระยะเวลาประมวลผลคำขอเป็นมิลลิวินาที |
meta.access.mode | string | ไม่ | "api_key" | api_key, ip_trial หรือ unauthenticated เมื่อใช้บัญชีแบบชำระเงิน ให้ตรวจสอบว่าเป็น api_key |
meta.access.reason | string | ใช่ | null | เหตุผลที่ใช้การทดลองใช้แทน: api_key_missing, api_key_invalid หรือ api_key_not_found กรณีอื่นเป็น null |
meta.usage.charged_credits | integer | ใช่ | 1 | เครดิตสุทธิที่หัก เป็นศูนย์ก่อนหักหรือหลังยืนยันการคืนเครดิตเต็มจำนวน และเป็น null เมื่อการหักเครดิตยังไม่ยืนยัน |
meta.usage.remaining_credits | integer | ใช่ | 99 | ยอดคงเหลือเมื่องานเสร็จ อาจติดลบได้ เป็น null เมื่อไม่มีข้อมูลหรือการหักเครดิตยังไม่ยืนยัน |
meta.usage.billing_status | string | ไม่ | "confirmed" | not_charged, confirmed หรือ unconfirmed ตรวจสอบค่านี้ก่อนส่งคำขอคาดการณ์ที่ล้มเหลวซ้ำ |
meta.usage.resets_at | string | ใช่ | "2026-09-27T12:00:00.000Z" | เวลารีเซ็ตการทดลองใช้ตาม IP ใน UTC (ISO 8601) เป็น null สำหรับบัญชีที่ใช้คีย์ API หรือเมื่อไม่ทราบ |
meta.usage.limit | integer | ใช่ | 10 | จำนวนเครดิตของการทดลองใช้ตาม IP เป็น null สำหรับบัญชีที่ใช้คีย์ API |
meta.usage.period_seconds | integer | ใช่ | 86400 | รอบเวลาของการทดลองใช้ตาม IP เป็นวินาที เป็น null สำหรับบัญชีที่ใช้คีย์ API |
การส่งคำขอซ้ำและการหักเครดิต
คำขอคาดการณ์ทุกครั้งเป็นงานใหม่ รวมถึงคำขอเดิมที่ส่งอีกครั้ง กฎการหักเครดิตปกติใช้กับทุกคำขอ ระบบไม่มีการป้องกันคำขอซ้ำ จึงควรหลีกเลี่ยงการส่งคำขอซ้ำอัตโนมัติหลังการเชื่อมต่อขาดหายหรือเมื่อไม่ทราบผลลัพธ์
สำหรับการตอบกลับ 429 ให้รอตาม Retry-After ก่อนส่งคำขอถัดไป สำหรับการคาดการณ์ที่ล้มเหลว ให้ตรวจสอบ code, action และ meta.usage.billing_status ก่อน หากพบ billing_reconciliation_required หรือการหักเครดิตยังไม่ยืนยัน ให้ติดต่อทีมช่วยเหลือพร้อม request_id ก่อนส่งคำขอซ้ำ
คำขอแบบกลุ่มที่สำเร็จบางส่วนอาจส่งคืน HTTP 200 ตรวจสอบทุกรายการ และส่งซ้ำเฉพาะรายการที่ล้มเหลวหลังยืนยันการหักเครดิตแล้ว หากส่งรายการที่สำเร็จซ้ำจะถูกหักเครดิตอีกครั้ง
X-Request-ID และ meta.request_id ระบุการส่ง HTTP ครั้งปัจจุบัน อ่าน /usage เพื่อดูยอดคงเหลือปัจจุบัน HEAD ไม่ได้เริ่มการคาดการณ์ที่มีการหักเครดิต และการตอบกลับของการคาดการณ์และบัญชีไม่สามารถแคชได้
ไคลเอนต์ควรรองรับฟิลด์ที่เพิ่มเข้ามาในการตอบกลับ และคงค่า null ไว้เมื่อไม่มีข้อมูล
ขีดจำกัดคำขอ
รองรับ HTTP 429 และ Retry-After แทนที่จะคาดว่าคำขอจะได้รับการยอมรับเสมอที่ระดับสูงสุดเหล่านี้ ความจุของบริการใช้ร่วมกัน ค่าที่แสดงคือค่าเริ่มต้นปัจจุบันของบริการ การตอบกลับเกี่ยวกับขีดจำกัดคำขอมี X-RateLimit-Limit, X-RateLimit-Remaining และ X-RateLimit-Reset (วินาที Unix) Retry-After คือระยะเวลารอเป็นวินาที ส่วนหัวเหล่านี้อธิบายขีดจำกัดคำขอ ไม่ใช่เครดิตคงเหลือ แม้แต่การอ่าน /usage ที่ใช้ฟรีก็ยังนับรวมในขีดจำกัดคำขอ
| ขีดจำกัด | ค่า |
|---|---|
| เนื้อหาคำขอ JSON | สูงสุด 64 KiB |
| ค่าที่ส่งเพื่อคาดการณ์ | 1–254 อักขระ |
| คำขอแบบกลุ่ม | 50 รายการเมื่อใช้คีย์ API และ 10 รายการเมื่อใช้การทดลองใช้ตาม IP |
| อัตราคำขอต่อบัญชี | 120 คำขอต่อนาที |
| อัตราคำขอต่อ IP | 600 คำขอต่อนาที |
| งานพร้อมกัน | 2 งานต่อบัญชี และ 16 งานทั้งบริการ |