This endpoint allows you to process payouts in Thai Baht (THB) to recipients with a bank account in Thailand, funded from a US Dollar (USD) balance.
Endpoint
POST: {{baseURL}}/v2/payout
Supported Payment Channels
THB payouts support the following payment channel:
Channel Description Use Case BANK_TRANSFERStandard bank transfer to Thai banks Domestic transfers within Thailand
Request Details
Include these headers in your request:
Header Value Required Content-Typeapplication/jsonβ
Yes x-api-keyYOUR_API_KEYβ
Yes
Sample Requests
Use BANK_TRANSFER for standard domestic THB bank transfers. cURL
JavaScript (Fetch)
Python (Requests)
curl --location --request POST '{{baseURL}}/v2/payout' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"recipient": {
"name": "Nguyα»
n VΔn Nam",
"nickName": "DemoVNNickname",
"gender": "M",
"type": "INDIVIDUAL",
"stored": false,
"account": {
"bankName": "AGRICULTURE & AGRICULTL COOP",
"sortCode": "00301",
"bankCity": "Bangkok",
"accountNumber": "0012345678",
"branchCode": "Bangkok"
},
"sourceOfFunds": "income",
"paymentChannel": "BANK_TRANSFER",
"currency": "THB",
"country": "TH"
},
"quoteId": "779997685019",
"reason": "Gift",
"remark": "TestTHB"
}'
Request Body Breakdown
Field Type Description Required quoteIdString The unique ID of the quote for this payout. β
Yes reasonString The purpose of the transfer. β
Yes remarkString An optional, additional note about the transaction. β No recipientObject An object containing all details about the beneficiary. β
Yes recipient.nameString The full name of the recipient. β
Yes recipient.nickNameString The recipientβs nickname (if any). β No recipient.typeString The type of recipient. Enum: INDIVIDUAL, BUSINESS. β
Yes recipient.accountObject An object containing the recipientβs bank account details. β
Yes recipient.account.bankNameString The name of the recipientβs bank. β
Yes recipient.account.accountNumberString The recipientβs bank account number. β
Yes recipient.account.sortCodeString The bank code/sort code (e.g., 00301). β
Yes recipient.paymentChannelString The payment method. Must be BANK_TRANSFER. β
Yes recipient.sourceOfFundsString Code indicating the source of funds. β
Yes
Success Response (200 OK)
If the payout is successfully created, the API returns the following response:
{
"message" : "Transaction created successfully" ,
"status" : "success" ,
"data" : {
"id" : "THB-PAYOUT-ID-67890" ,
"reason" : "Gift" ,
"referenceNumber" : "THBPAYOUTREF456" ,
"type" : "SEND" ,
"state" : "COMPLETED" ,
"quote" : {
"id" : "779997685019" ,
"source" : {
"currency" : "USD" ,
"country" : "US" ,
"amount" : 100
},
"target" : {
"currency" : "THB" ,
"country" : "TH" ,
"amount" : 3304.41
},
"rate" : 33.04 ,
"fee" : {
"amount" : 0.77
}
},
"recipient" : {
"name" : "Nguyα»
n VΔn Nam" ,
"type" : "INDIVIDUAL" ,
"account" : {
"name" : "Nguyα»
n VΔn Nam" ,
"bankName" : "AGRICULTURE & AGRICULTL COOP" ,
"accountNumber" : "0012345678"
},
"paymentChannel" : "BANK_TRANSFER" ,
"currency" : "THB" ,
"country" : "TH"
},
"created" : "2026-02-04T09:41:02.000Z" ,
"processed" : "2026-02-04T09:42:02.000Z"
}
}
Payout Transaction States
The payout transaction can have one of the following states:
State Description COMPLETEDThe payout was successfully processed. PENDINGThe payout is still being processed. FAILEDThe payout failed to process. REFUNDEDThe payout has been sent back to sender.
Error Handling
Status Code Meaning Example Response 400Insufficient Balance Insufficient Balance 401Unauthorized Invalid API key provided. 403Forbidden IP not whitelisted 404Not Found The requested endpoint does not exist. 422Unprocessable Entity Invalid quote ID provided. 500Internal Server Error An internal error occurred.
Best Practices
β
Ensure quoteId is valid and linked to an existing quote.
β
Confirm that the recipientβs bank account number and bank code are correct.
β
Use a valid API key in the headers.
β
Handle error responses correctly in your integration.
Testing Failed Payouts: In the sandbox environment, you can simulate a failed payout by setting "remark": "fail" in your request. This triggers a payout.failed webhook, allowing you to test your error handling.