Create Payout Request
Endpoint: POST /v2/gc/payment-requests
Description: Initiate a payout or remittance to a registered beneficiary, optionally using a locked FX rate token from the Payout Inquiry API.
Request
Request Body Field Descriptions (JSON)
requestId
string(32)
Yes
Unique request ID (UUID recommended) used for idempotency.
amount
string(18)
Yes
Payout amount in payoutCurrency (decimal string, e.g. "23.57").
payoutCurrency
string(8)
Yes
ISO 4217 currency code of the payout (e.g. USD, EUR).
payoutType
string
No
Payout channel type. Enum: ``OVERSEA_PAYMENT|WITHDRAW`.
subMerchantId
string(32)
Conditional
Sub-merchant identifier. Provide when submitting the payout on behalf of a sub-merchant. Optional in general; required when the merchant operates in PSP mode.
beneficiaryId
string(64)
No
Registered beneficiary ID returned by the Create Beneficiary API. Provide either this field or beneficiaryAccountName + beneficiaryAccountNumber.
beneficiaryAccountName
string(256)
No
Full name of the beneficiary's bank account. Provide either beneficiaryAccountName + beneficiaryAccountNumber, or beneficiaryId — not both.
beneficiaryAccountNumber
string(256)
No
Beneficiary's bank account number. Required together with beneficiaryAccountName when beneficiaryId is not provided.
receiveCurrency
string(8)
No
ISO 4217 currency code that the beneficiary will receive (for cross-currency payouts).
clearingType
string
No
Clearing method. Enum: AUTO | SWIFT | LOCAL.
swiftCode
string(256)
No
SWIFT/BIC code of the beneficiary's bank (required for SWIFT clearing).
feeBear
string
No
Fee-bearing arrangement. Enum: SHA (shared) | OUR (sender) | BEN (beneficiary).
feeChargeMode
string
No
Remittance fee (system handling fee) collection method. Enum: OUT (external deduction from account balance) | IN (internal deduction from payment amount).
useCode
string
No
Remittance purpose code (e.g. GOODSTRADE, SOFTWARE, ADVERTISEMENT).
remitType
string
No
Remittance speed. Enum: SPEED | NORMAL | FAST. Default NORMAL.
tradeSide
string
No
Trade direction used with FX token. Enum: CUSTOMER_SELL | CUSTOMER_BUY. Default CUSTOMER_SELL.
pobo
string
No
Pay-on-behalf-of flag. Enum: N (default) | Y.
payerId
string(128)
No
Identifier of the payer when pobo=Y.
remark
string(105)
No
Free-text remark or payment reference attached to the payout.
webhookUrl
string(256)
No
Callback URL to receive the PAYMENT_INITIAL/PAYMENT_RESULT webhook notifications when the payout outcome is available.
remitPurpose
string
No
High-level remittance purpose. Enum: GOODSTRADE | SERVICETRADE | OTHERS.
token
string(32)
No
FX rate lock token obtained from the Payout Inquiry API. Required for cross-currency payouts where a rate has been pre-locked.
originalRequestId
string(32)
No
The requestId of a previous payout request; used for supplementary or correction submissions.
clearingNetwork
string
No
Clearing network override. Enum: UNIONPAY | NCPS.
connectionMode
string
No
Connection mode for specific payment rails.
detailPath
string(256)
No
File reference path (from the File Upload API, POST /v2/gc/files/upload) pointing to a batch transaction detail file. Required for DOMESTIC_PAYMENT batch payouts.
purchaseCategory
string
No
Purchase category of the goods being paid for. Enum: CLOTHES_SHOES | DAILY_SUPPLIES_AND_COSMETICS | ELECTRONICS_AND_HOME_APPLIANCES | TOYS_KIDS_BABIES. Required when payoutType=OVERSEA_PAYMENT and the beneficiary account is an Alipay wallet.
notifyUrl
string(256)
No
Async notification callback URL (must be a valid http/https URL).
sourceType
string
No
Request source channel. Enum: PORTAL | API.
Field details and conditional rules
{% hint style="info" %} The fields below have scenario-based rules. Validate payoutType, payoutCurrency, and settlement path fields together before submitting. {% endhint %}
Request sample
Response
Response Field Descriptions
code
number
Response code.
data
object
Payout request submission result.
message
string
Response message.
neoResponseId
string
Unique NeoX response identifier.
data object fields:
id
string
NeoX identifier for this payout request. Use this to track the payout via Get Detail Payout Request.
requestId
string
Echo of the requestId submitted in the request.
serialNum
string
Platform serial number assigned to this payout transaction.
status
string
Initial processing status. Fixed value on create: PROCESSING.
Response sample
FX-lock gotcha: for a cross-currency payout (payoutCurrency different from the beneficiary's accountCurrency), this call fails with INVALID TOKEN unless you first call Payout Inquiry to lock a rate and pass its token here (or one is still cached server-side from a recent inquiry for the same sub-merchant/beneficiary/amount). Same-currency payouts don't need this step.
Notes
Requires Bearer token in the Authorization header.
The Accept-Language header can be used to specify the response language (Support: "vi", "en").
Use a unique
requestIdfor each request to avoid duplicate payout submissions.Provide either
beneficiaryId(preferred), orbeneficiaryAccountNametogether withbeneficiaryAccountNumber— not both simultaneously.For cross-currency payouts where a rate has been pre-locked, pass the
tokenreturned by the Payout Inquiry API before it expires.The payout outcome is delivered asynchronously via the
PAYMENT_INITIAL/PAYMENT_RESULTwebhooks to thewebhookUrlsupplied in the request. Poll the result using Get Detail Payout Request (GET /v2/gc/payment-requests).The
detailPathfield must reference apathvalue returned by the File Upload API (POST /v2/gc/files/upload).
Last updated
Was this helpful?