curl --request POST \
--url https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"payout_currency": "SGD",
"payout_amount": "1.00",
"statement_descriptor": "Sandbox payout",
"internal_note": "CST contract test"
}
'import requests
url = "https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create"
payload = {
"payout_currency": "SGD",
"payout_amount": "1.00",
"statement_descriptor": "Sandbox payout",
"internal_note": "CST contract test"
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-auth-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-auth-token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
payout_currency: 'SGD',
payout_amount: '1.00',
statement_descriptor: 'Sandbox payout',
internal_note: 'CST contract test'
})
};
fetch('https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'payout_currency' => 'SGD',
'payout_amount' => '1.00',
'statement_descriptor' => 'Sandbox payout',
'internal_note' => 'CST contract test'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-auth-token: <api-key>",
"x-idempotency-key: <x-idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create"
payload := strings.NewReader("{\n \"payout_currency\": \"SGD\",\n \"payout_amount\": \"1.00\",\n \"statement_descriptor\": \"Sandbox payout\",\n \"internal_note\": \"CST contract test\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-auth-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create")
.header("x-idempotency-key", "<x-idempotency-key>")
.header("x-auth-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"payout_currency\": \"SGD\",\n \"payout_amount\": \"1.00\",\n \"statement_descriptor\": \"Sandbox payout\",\n \"internal_note\": \"CST contract test\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-idempotency-key"] = '<x-idempotency-key>'
request["x-auth-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"payout_currency\": \"SGD\",\n \"payout_amount\": \"1.00\",\n \"statement_descriptor\": \"Sandbox payout\",\n \"internal_note\": \"CST contract test\"\n}"
response = http.request(request)
puts response.read_body{
"payout_id": "PO2097897064066191360",
"payout_currency": "SGD",
"payout_amount": "1",
"payout_fee": "0",
"debited_amount": "1",
"transfer_amount": "1",
"internal_note": "CST contract test",
"statement_descriptor": "Sandbox payout",
"payout_status": "INITIATED",
"create_time": "2026-09-10T11:56:51+08:00",
"completed_time": ""
}Create Payout
Move funds from your acquiring balance to an external bank account or your UQPAY account.
Provide the currency, amount, and statement descriptor. Omit payout_account_id to use the pre-configured external bank account, or provide the caller’s UQPAY account ID for an internal transfer.
Save the returned payout_id and use Retrieve Payout to track payout_status.
curl --request POST \
--url https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create \
--header 'Content-Type: application/json' \
--header 'x-auth-token: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"payout_currency": "SGD",
"payout_amount": "1.00",
"statement_descriptor": "Sandbox payout",
"internal_note": "CST contract test"
}
'import requests
url = "https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create"
payload = {
"payout_currency": "SGD",
"payout_amount": "1.00",
"statement_descriptor": "Sandbox payout",
"internal_note": "CST contract test"
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-auth-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-auth-token': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
payout_currency: 'SGD',
payout_amount: '1.00',
statement_descriptor: 'Sandbox payout',
internal_note: 'CST contract test'
})
};
fetch('https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'payout_currency' => 'SGD',
'payout_amount' => '1.00',
'statement_descriptor' => 'Sandbox payout',
'internal_note' => 'CST contract test'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-auth-token: <api-key>",
"x-idempotency-key: <x-idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create"
payload := strings.NewReader("{\n \"payout_currency\": \"SGD\",\n \"payout_amount\": \"1.00\",\n \"statement_descriptor\": \"Sandbox payout\",\n \"internal_note\": \"CST contract test\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-auth-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create")
.header("x-idempotency-key", "<x-idempotency-key>")
.header("x-auth-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"payout_currency\": \"SGD\",\n \"payout_amount\": \"1.00\",\n \"statement_descriptor\": \"Sandbox payout\",\n \"internal_note\": \"CST contract test\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.uqpaytech.com/api/v2/payment/payout/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-idempotency-key"] = '<x-idempotency-key>'
request["x-auth-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"payout_currency\": \"SGD\",\n \"payout_amount\": \"1.00\",\n \"statement_descriptor\": \"Sandbox payout\",\n \"internal_note\": \"CST contract test\"\n}"
response = http.request(request)
puts response.read_body{
"payout_id": "PO2097897064066191360",
"payout_currency": "SGD",
"payout_amount": "1",
"payout_fee": "0",
"debited_amount": "1",
"transfer_amount": "1",
"internal_note": "CST contract test",
"statement_descriptor": "Sandbox payout",
"payout_status": "INITIATED",
"create_time": "2026-09-10T11:56:51+08:00",
"completed_time": ""
}Authorizations
The API token for login provided by UQPAY.
Headers
Specifies the sub-account on whose behalf the request is made. This should be set to the account_id, which can be retrieved via the List Connected Accounts. If omitted or empty, the request is executed using the master account.
More information at Connected Accounts.
A unique identifier (UUID) used to maintain operation idempotency, ensuring that repeated executions of the same operation do not result in unintended effects or duplication. It helps preserve data consistency in the face of network errors, retries, or failures.
Body
Three-letter currency code
"SGD"
The amount to be withdrawn through this payout.
"100.00"
Payout reference information displayed to the recipient's bank
15"UQPAY PAYOUT"
Payout remark information
"Payment to supplier"
The UQPAY account ID to receive the payout funds via internal transfer. Both long and short account IDs are accepted.
- If omitted, the payout is sent to the pre-configured external bank account (default behavior).
- If provided, the payout is processed as a UQPAY internal transfer to the specified account. Pass the account ID of the caller.
"18523f72-f4de-4f9c-bb8e-ec7d1c4f32be"
Response
Payout created successfully
Payout UUID
"PO1968582687224500224"
Three-letter currency code
"SGD"
The payout amount submitted in the request.
"100.00"
The fee charged for the payout, denominated in payout_currency.
The total amount debited from your balance.
- Fee deducted from the payout:
debited_amount = payout_amount - Fee charged separately:
debited_amount = payout_amount + payout_fee
The amount sent to the downstream payout provider.
- Fee deducted from the payout:
transfer_amount = payout_amount - payout_fee - Fee charged separately:
transfer_amount = payout_amount
Payout reference information displayed to the recipient's bank
15"UQPAY PAYOUT"
Payout status enumeration.
INITIATED: Payout has been initiated.PROCESSING: Payout is being processed (bank is processing).COMPLETED: Payout completed successfully.FAILED: Payout failed.FAILED_REFUNDED: Payout failed and funds have been refunded.
INITIATED, PROCESSING, COMPLETED, FAILED, FAILED_REFUNDED "INITIATED"
Payout creation time
"2025-09-18T15:47:41+08:00"
Payout remark information
"Payment to supplier"
Payout completion time. An empty string means no completion time is available.
""

