ข้ามไปยังเนื้อหา

Payouts (จ่ายเงิน)

payout คือการโอนเงินจากยอดคงเหลือของคุณไปยังบัญชีธนาคาร (หรือ wallet) ของ payer เช่น การถอนเงินของลูกค้าในระบบของคุณ

MethodPathใช้ทำอะไร
POST/v1/payoutsสร้าง payout
GET/v1/payouts/{id}ดู payout
GET/v1/payoutsค้นหารายการ (พารามิเตอร์เดียวกับการค้นหา pay-in)
POST/v1/payouts/{id}/cancelยกเลิก payout
POST /v1/payouts
ฟิลด์จำเป็นคำอธิบาย
payerส่ง payer หรือ payerId อย่างใดอย่างหนึ่งบัญชีธนาคารของผู้รับเงิน: bankCode, accountNumber, accountName และ accountNameEn (ไม่บังคับ) ถ้ามี payer ที่บัญชีตรงกันอยู่แล้วจะใช้ payer เดิม ไม่เช่นนั้นจะสร้างใหม่ ดูส่ง payer แบบ inline
payerIdส่ง payer หรือ payerId อย่างใดอย่างหนึ่งpayer_... ของผู้รับเงินที่มีอยู่แล้ว บัญชีปลายทางคือบัญชีธนาคารของ payer คนนี้
amountใช่สตริงทศนิยม ต้องอยู่ในช่วง payoutMinimum-payoutMaximum ของบัญชีคุณ
currencyใช่THB, USD, USDT หรือ LAK
methodไม่auto (ค่าเริ่มต้น), bank_transfer, crypto, lao_qr
referenceไม่เลขอ้างอิงของคุณ ไม่เกิน 128 ตัว
webhookUrlไม่URL ที่จะรับ webhook ถ้าไม่ใส่จะไม่มี webhook ของรายการนี้ ต้องตรวจสถานะเอง
walletAddressเฉพาะ cryptoที่อยู่ wallet ปลายทาง จำเป็นเมื่อ method เป็น crypto หรือ currency เป็น USDT
networkไม่เครือข่ายของ wallet เช่น BSC
{
"payer": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี"
},
"amount": "500.00",
"currency": "THB",
"reference": "withdraw-20001",
"webhookUrl": "https://shop.example.com/webhooks/payments"
}

หรือส่ง "payerId": "payer_..." แทน payer สำหรับ payer ที่มีอยู่แล้ว

สิ่งที่ควรรู้

  • ส่ง payerId หรือ payer อย่างใดอย่างหนึ่งเท่านั้น (ส่งทั้งคู่: 400 parameters_exclusive ไม่ส่งเลย: 400 parameter_missing) payer แบบ inline ทำงานเหมือนใน pay-in ทุกอย่าง คือถ้ามี payer ที่ bankCode และ accountNumber ตรงกันจะใช้ payer เดิมโดยไม่เปลี่ยนชื่อที่บันทึกไว้ (ถ้าชื่อต่างกัน response จะมีคำเตือน payer_name_differs) ไม่เช่นนั้นจะสร้าง payer ใหม่โดยตรวจสอบเหมือน POST /v1/payers เงินจะโอนเข้าบัญชีที่บันทึกไว้ของ payer ที่ใช้
  • ยอดคงเหลือที่ใช้ได้ (balance.available จาก GET /v1/account) ต้องพอ ไม่เช่นนั้นได้ 422 insufficient_balance
  • payer หนึ่งคนมี payout ที่ยังไม่จบได้ครั้งละหนึ่งรายการ ไม่เช่นนั้นได้ 409 pending_payout_exists
  • ส่ง header Idempotency-Key เพื่อให้การส่งซ้ำหลัง timeout ไม่สร้าง payout ซ้ำ ดูส่งคำขอสร้างรายการซ้ำอย่างปลอดภัย
  • payout ที่ยอดเกินเกณฑ์อนุมัติอัตโนมัติของบัญชีจะอยู่ในสถานะ in_review รอเจ้าหน้าที่ตรวจ เมื่ออนุมัติจะกลับเป็น pending (มี webhook payout.pending) และดำเนินการต่อ ถ้าไม่อนุมัติจะถูกยกเลิก

ฟิลด์เหมือน pay-in ยกเว้นไม่มี returnUrl, checkoutUrl, paymentImage และ payTo และ payerAccount คือบัญชีปลายทางที่รับเงิน

{
"object": "payout",
"id": "pout_0f1e2d3c4b5a69788796a5b4c3d2e1f0",
"reference": "withdraw-20001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": { "object": "payer", "id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d", "...": "..." },
"requestedAmount": "500.00",
"amount": "500.00",
"fee": "5.00",
"currency": "THB",
"method": "bank_transfer",
"status": "processing",
"failureReason": null,
"webhookUrl": "https://shop.example.com/webhooks/payments",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี"
},
"createdAt": "2026-01-01T01:00:00.000Z",
"updatedAt": "2026-01-01T01:00:05.000Z"
}
สถานะความหมายสิ้นสุดหรือยัง
pendingสร้างแล้ว รอดำเนินการยัง
processingอยู่ในคิวหรือส่งให้ธนาคารแล้วยัง
in_reviewยอดเกินเกณฑ์อัตโนมัติ รอเจ้าหน้าที่ตรวจยัง
succeededโอนสำเร็จสิ้นสุด
canceledถูกยกเลิกโดยคุณ เจ้าหน้าที่ หรือระบบสิ้นสุด
rejectedถูกปฏิเสธสิ้นสุด
failedโอนไม่สำเร็จ ดู failureReason คุณยกเลิกได้ หรือทีมงานอาจส่งใหม่ยังไม่แน่นอน
POST /v1/payouts/{id}/cancel

ไม่มี body ยกเลิกได้เมื่อรายการ

  • pending หรือ failed
  • processing ที่ยังอยู่ในคิว
  • processing ที่ส่งให้ธนาคารแล้ว และสร้างมานานกว่า 30 นาที

ถ้าสำเร็จจะคืน object ที่สถานะ canceled ถ้าธนาคารปฏิเสธการยกเลิก หรือรายการเปลี่ยนสถานะไปก่อน จะได้ 409 payout_not_cancelable การยกเลิกผ่าน API ไม่ส่ง webhook

HTTPcodeความหมายและสิ่งที่ควรทำ
400parameter_missing (param: walletAddress)payout แบบ crypto หรือ USDT ต้องมี walletAddress
400parameter_missing, parameter_invalidไม่ได้ส่งทั้ง payerId และ payer หรือฟิลด์ใน payer รูปแบบผิด ดู error.param
400parameters_exclusiveส่งทั้ง payerId และ payer มา
400unsupported_currency, unsupported_methodสกุลเงินหรือช่องทางที่ไม่รองรับ
403payouts_disabledบัญชีของคุณปิดการจ่ายเงินอยู่
404payer_not_foundpayerId ไม่มีอยู่หรือไม่ใช่ของบัญชีคุณ
422bank_not_foundpayer.bankCode ไม่ใช่รหัสจาก GET /v1/banks
409pending_payout_existspayer มี payout ที่ยังไม่จบอยู่แล้ว
409payout_not_cancelableสถานะปัจจุบันยกเลิกไม่ได้
422insufficient_balanceยอดคงเหลือไม่พอ
422amount_below_minimum, amount_above_maximumยอดนอกช่วงที่บัญชีกำหนด
422amount_below_feeยอดต่ำกว่าค่าธรรมเนียม
422payer_inactive, payer_blockedpayer ถูกปิดหรือถูกระงับ
422no_payout_account_availableขณะนี้ไม่มีบัญชีจ่ายเงินว่าง ลองใหม่ภายหลัง
422not_available_now, maintenanceอยู่นอกเวลาให้บริการหรือปิดปรับปรุง

รายการรหัสทั้งหมดดูที่รหัสข้อผิดพลาด