"type" : " invalid_request_error " ,
"code" : " amount_below_minimum " ,
"message" : " The amount is below the minimum of 100. " ,
"requestId" : " req_Z3k9QmP2xR7tLw4NbV8cYh1s "
ฟิลด์ คำอธิบาย typeกลุ่มของ error (ตารางถัดไป) codeรหัสที่ใช้เขียนเงื่อนไขในโค้ด ค่าคงที่ messageข้อความสำหรับคนอ่าน อาจเปลี่ยนได้ ห้ามใช้เป็นเงื่อนไข paramชื่อฟิลด์หรือ header ที่เป็นปัญหา (ถ้ามี) requestIdค่าเดียวกับ header X-Request-Id แจ้งค่านี้เมื่อติดต่อซัพพอร์ต
500 internal_error ไม่มีรายละเอียดภายในระบบ ให้แจ้ง requestId แก่ทีมงาน
สำหรับฟิลด์ย่อย param จะเป็น path เช่น payer.accountNumber
response ที่สำเร็จอาจมี warnings เป็น array อยู่คู่กับ data คำเตือนไม่เปลี่ยนผลของคำขอ ให้บันทึกไว้และจัดการตามที่เห็นควร แต่ละรายการมีฟิลด์ code, message และ param แบบเดียวกับข้อผิดพลาด แต่ไม่มี type และ warnings จะมีเฉพาะเมื่อมีคำเตือนอย่างน้อยหนึ่งรายการ
"data" : { "object" : " payin " , "id" : " pin_... " , "..." : " ... " },
"code" : " payer_name_differs " ,
"message" : " An existing payer with this bank account was used. Its stored account name differs from the one sent and was kept; it is used for payment matching. " ,
"param" : " payer.accountName "
codeมาจาก ความหมาย payer_name_differsPOST /v1/payins, POST /v1/payouts ที่ส่ง payer แบบ inlineใช้ payer เดิมที่ธนาคารและเลขบัญชีตรงกัน แต่ชื่อที่บันทึกไว้ (param: payer.accountName) หรือชื่อภาษาอังกฤษ (payer.accountNameEn) ต่างจากที่ส่งมา ระบบคงชื่อเดิมไว้เพราะใช้จับคู่การโอน ถ้าต้องการเปลี่ยนให้ใช้ PATCH /v1/payers/{id}
typeHTTP ความหมาย invalid_request_error400, 404, 409, 422 คำขอไม่ถูกต้อง หรือขัดกับสถานะหรือกฎของระบบ authentication_error401 การยืนยันตัวตนหรือการเซ็นไม่ผ่าน permission_error403 ยืนยันตัวตนผ่าน แต่ไม่มีสิทธิ์ทำรายการนี้ rate_limit_error429 เกินโควตา api_error500 ข้อผิดพลาดฝั่งระบบ
กรณี สิ่งที่ควรทำ 500, timeout หรือเชื่อมต่อไม่ได้ลองใหม่แบบ backoff (เช่น 1, 2, 4, 8 วินาที) โดยเซ็นใหม่ทุกครั้ง 429 quota_exceededหยุดสักพักแล้วค่อยลอง หรือติดต่อทีมงาน 422 not_available_now, maintenance, no_collection_account_available, no_payout_account_available, slip_verification_unavailableลองใหม่ภายหลัง 400, 401, 403, 404, 409 และ 422 อื่นๆอย่าลองซ้ำด้วยข้อมูลเดิม แก้คำขอหรือสถานะก่อน
ถ้า POST /v1/payins, POST /v1/payouts หรือ POST /v1/withdrawals timeout คุณจะไม่รู้ว่ารายการถูกสร้างแล้วหรือยัง ให้ส่ง header Idempotency-Key กับคำขอสร้างทุกครั้ง แล้วส่งซ้ำได้เลย
Idempotency-Key : 6f1c2e8a-3b7d-4c0e-9a51-2d8f4b7e1c30
ใช้ key ใหม่ที่ไม่ซ้ำ (เช่น UUID) ต่อหนึ่งรายการ และใช้ key เดิม เมื่อส่งรายการนั้นซ้ำ key ยาว 8-255 ตัว ประกอบด้วย A-Z a-z 0-9 _ - : .
ส่งซ้ำด้วย key เดิมและคำขอเดิมภายใน 24 ชั่วโมง จะได้ response เดิมพร้อม header Idempotent-Replayed: true โดยไม่สร้างรายการใหม่
ใช้ key เดิมกับคำขอที่ต่างไป (body หรือ query string ไม่เหมือนเดิม) จะได้ 422 idempotency_key_reused
ถ้าคำขอแรกยังทำงานไม่เสร็จ คำขอที่ส่งซ้ำจะได้ 409 idempotency_request_in_progress ให้รอสักครู่แล้วลองใหม่
ถ้าคำขอแรกจบด้วยข้อผิดพลาด key จะถูกปล่อย และคำขอที่ส่งซ้ำจะทำงานเหมือนคำขอใหม่
header นี้ไม่บังคับ ถ้าไม่ส่ง ให้ค้นด้วย reference ก่อนส่งซ้ำ เช่น GET /v1/payouts?reference=withdraw-20001 และตั้ง reference ให้ไม่ซ้ำทุกครั้ง
codeความหมาย invalid_requestคำขอไม่ถูกต้อง เช่น JSON อ่านไม่ได้ parameter_invalidค่าของพารามิเตอร์ไม่ถูกต้อง ดู param parameter_missingขาดพารามิเตอร์ที่จำเป็น ดู param parameter_unknownมีพารามิเตอร์ที่ไม่รู้จัก (ใน body, query หรือ part ของ multipart) parameters_exclusiveส่งพารามิเตอร์ที่ใช้ร่วมกันไม่ได้มาพร้อมกัน เช่น payerId กับ payer โดย param ระบุตัวที่สอง invalid_cursorcursor ไม่ถูกต้องdate_range_too_largeช่วงวันที่เกิน 31 วัน invalid_webhook_urlwebhookUrl ไม่ถูกต้องหรือไม่มีinvalid_return_urlreturnUrl ไม่ถูกต้องunsupported_currencyสกุลเงินไม่รองรับ unsupported_methodช่องทางชำระเงินไม่รองรับ file_invalidไม่มีไฟล์ หรือไม่ใช่ JPG/PNG ขนาดไม่เกิน 5 MB
codeความหมาย authentication_requiredขาด header ที่จำเป็น param บอกชื่อ header invalid_api_keyAPI key ไม่ถูกต้อง หรือใช้ test key ตอนบัญชีไม่ได้อยู่ในโหมดทดสอบ invalid_timestampX-Timestamp ไม่ใช่วินาที หรือห่างจากเวลาเซิร์ฟเวอร์เกิน 300 วินาทีinvalid_nonceX-Nonce ต้องยาว 16-128 ตัวของ A-Z a-z 0-9 _ -nonce_reusednonce นี้ถูกใช้ไปแล้ว invalid_signatureลายเซ็นไม่ถูกต้อง ดูข้อผิดพลาดที่พบบ่อย
codeความหมาย partner_inactiveบัญชีพาร์ทเนอร์ไม่ active ip_not_allowedIP นี้ไม่อยู่ใน allow-list payins_disabledบัญชีนี้ปิดการรับเงิน payouts_disabledบัญชีนี้ปิดการจ่ายเงิน
codeความหมาย resource_not_foundไม่พบข้อมูล หรือไม่ใช่ของบัญชีคุณ หรือ ID ผิดรูปแบบ route_not_foundไม่มี endpoint นี้ ตรวจ method และ path payer_not_foundไม่พบ payerId ที่ส่งมาใน body
codeความหมาย pending_payin_existspayer มี pay-in ที่รอจ่ายอยู่แล้ว pending_payout_existspayer มี payout ที่ยังไม่จบอยู่แล้ว pending_withdrawal_existsมีคำขอถอนเงินที่กำลังดำเนินการ payin_not_cancelablepay-in ยกเลิกไม่ได้ในสถานะนี้ payout_not_cancelablepayout ยกเลิกไม่ได้ในสถานะนี้ payin_not_pendingpay-in ไม่ได้รอการจ่ายแล้ว payer_has_paymentspayer มีรายการแล้ว ลบไม่ได้ slip_duplicateสลิปนี้ถูกใช้แล้ว idempotency_request_in_progressคำขอที่ใช้ Idempotency-Key นี้ยังทำงานไม่เสร็จ รอสักครู่แล้วลองใหม่ conflictคำขอขัดกับสถานะปัจจุบันของข้อมูล
codeความหมาย amount_invalidยอดไม่ถูกต้อง amount_below_minimumยอดต่ำกว่าขั้นต่ำ ข้อความระบุค่าขั้นต่ำ amount_above_maximumยอดสูงกว่าขั้นสูง ข้อความระบุค่าขั้นสูง amount_below_feeยอดต่ำกว่าค่าธรรมเนียมรวม insufficient_balanceยอดคงเหลือที่ใช้ได้ไม่พอ daily_limit_exceededเกินวงเงินถอนต่อวัน no_collection_account_availableไม่มีบัญชีรับเงินว่าง no_payout_account_availableไม่มีบัญชีจ่ายเงินว่าง not_available_nowอยู่นอกเวลาให้บริการ maintenanceระบบปิดปรับปรุง payer_inactivepayer ถูกปิด (inactive) payer_blockedpayer ถูกระงับ bank_not_foundไม่พบ bankCode referral_code_not_foundไม่พบรหัสผู้แนะนำ referrer_inactiveผู้แนะนำถูกปิด slip_unreadableอ่าน QR code บนสลิปไม่ได้ slip_verification_failedตรวจสลิปไม่ผ่าน slip_amount_mismatchยอดในสลิปไม่ตรงกับ pay-in slip_receiver_mismatchผู้รับในสลิปไม่ตรงกับ pay-in slip_verification_unavailableบริการตรวจสลิปใช้ไม่ได้ชั่วคราว request_unprocessableดำเนินการตามคำขอไม่ได้ แจ้ง requestId แก่ทีมงาน idempotency_key_reusedIdempotency-Key นี้เคยใช้กับคำขออื่นแล้ว
HTTP codeความหมาย 429 quota_exceededเกินโควตาการใช้งาน 500 internal_errorข้อผิดพลาดภายใน แจ้ง requestId แก่ทีมงาน