Create a Payout

Send funds to a beneficiary's bank account or e-wallet. Use this endpoint to pay suppliers, employees, contractors, or your own accounts across supported regions and currencies.
Request Parameters
When payout = PAY_INTO_BANK_ACCOUNT
requestIdstring
required
Idempotency key. Assign a unique value (e.g., UUID) per payout to safely retry without creating duplicates.
businessSceneCodestring
Business scene code that identifies the payout type. See BusinessSceneCode.
purposeCodestring
required
Payment purpose code. See PurposeCode.

Valid Values:

GDS — Payment for goods.
GST — General service trade.
ACM — Payment for goods.
COM — Commission payment.
TOA — Transfer to own account, same-name withdrawal.
SAL — Salary/payroll.
TXS — Government-imposed charges including income tax, customs duties, and transfer payments.
sourceAmountAmount conditional
Source currency amount debited from the payer's account. currency is required on both sourceAmount and payoutAmount, but only one value may be specified. See Data Types.
payoutAmountAmount
Target currency amount (received by the beneficiary). currency is required on both sourceAmount and payoutAmount, but only one value may be specified. See Data Types.
beneficiaryBeneficiary
required
Beneficiary (recipient) information. Provide bank details.
Show child parametersShow child parameters
payerPayer conditional
Payer (sender) information. Defaults to the onboarded account details. Required when the On-Behalf-Of payment preference is specified.
Show child parametersShow child parameters
transferQuoteQuote
Exchange rate quote for this payout. Omit for same-currency payouts. For cross-currency payouts, omit to use the live market rate, or pass quoteId from Consult a Payout to lock in a specific rate.
Show child parametersShow child parameters
fvtPreferencestring
Full Value Transfer preference. Specify to request guaranteed full-amount delivery to the beneficiary (payer covers all intermediary fees).

Valid Values:

NEED_FVT — Request full value transfer.
oboPreferencestring
On-Behalf-Of routing preference. When set to NEED_OBO, WorldFirst forwards the specified payer details to the receiving bank. Note that WorldFirst cannot control how payer information appears on bank statements and is not liable for any discrepancies.

Valid Values:

NEED_OBO — Route the payout on behalf of the specified payer rather than WorldFirst. Only applicable to OBO-supported channels.
NO_OBO — Do not apply any On-Behalf-Of routing; the payout is routed under WorldFirst by default.
paymentTypestring
Payment channel type. Use together with paymentNetwork.

Valid Values:

LOCAL — Local clearing (e.g., ACH, SEPA, Faster Payments).
CROSS — Cross-border wire transfer via SWIFT.
paymentNetworkstring
Specific clearing network. Use together with paymentType. See PaymentNetwork.
referencestring
Bank transfer reference text. May appear on the beneficiary's bank statement, depending on the local clearing system and receiving bank.
transferMemostring
Internal transfer memo for your own records. Not visible to the beneficiary.
Response Parameters
resultResult
See Result.
idstring
Unique payout ID assigned by the system. Use this ID to subsequent status updates.
statusstring
Current payout status. Payouts are processed asynchronously; the initial status is typically PROCESSING. See PayoutStatus.
createdAtdatetime
Timestamp when the task was created. ISO 8601 extended format (e.g., 2026-04-27T12:08:56+08:00).
failureCodestring
Failure reason code. Returned when status is FAILED. Inspect this field to determine the cause and whether to retry.
failureMessagestring
A plain-text description of the failure reason. Returned when status is FAILED.
payerPayer
Payer information as recorded for this payout.
Show child parametersShow child parameters
beneficiaryBeneficiary
Beneficiary information as recorded for this payout.
Show child parametersShow child parameters
sourceAmountAmount
Source currency amount debited from the payer's account. See Data Types.
payoutAmountAmount
Target currency amount received by the beneficiary. See Data Types.
businessSceneCodestring
Business scene code applied to this payout. See BusinessSceneCode.
purposeCodestring
Payment purpose code applied. See PurposeCode.
transferQuoteQuote
Exchange rate applied to this payout. Returned for cross-currency payouts.
Show child parametersShow child parameters
feeAmountAmount
Total service fee for this payout. See Data Types.
feeItemListarray
Itemized fee breakdown. Returned when multiple fee components apply.
Show child parametersShow child parameters
originalFeeRatestring
Original fee rate before any promotional discounts.
feeRatestring
Actual fee rate after promotional discounts are applied.
originalFeeAmountAmount
Original service fee before promotional discounts. See Data Types.
discountFeeAmountAmount
Promotional fee reduction amount. Returned when a promotion is applied. See Data Types.
availableQuotaAmount
Remaining FX settlement quota. Returned when the payout involves currency settlement. See Data Types.
promotionListarray
Active promotions applied to this payout.
Show child parametersShow child parameters
fvtPreferencestring
Full Value Transfer preference applied.
oboPreferencestring
On-Behalf-Of routing preference applied.
paymentTypestring
Payment channel type resolved for this payout.

Valid Values:

LOCAL — Local clearing.
CROSS — Cross-border wire transfer via SWIFT.
paymentNetworkstring
Specific clearing network resolved for this payout. See PaymentNetwork.
referencestring
Bank transfer reference text.
transferMemostring
Internal transfer memo.
additionalInfoPayoutAdditionalInfo
Supplementary business fields echoed from the request.
Show child parametersShow child parameters
Error Codes
resultCoderesultStatusresultMessageTroubleshooting
SUCCESSSSuccessN/A
PROCESSINGSrequest is processing.—
UN_SUPPORT_BUSINESSFUnsupported business.Verify `businessSceneCode` value and ensure the currency combination is supported.
CURRENCY_NOT_SUPPORTEDFThe currency is not supported.Confirm that the currency codes in `sourceAmount` and `payoutAmount` are correct.
USER_STATUS_ABNORMALFThe status of the user is abnormal.Retry with a different user that is in a valid status.
CARD_STATUS_INVALIDFCard status is invalid.Check the card status and retry with a valid card.
CONTRACT_NOT_EXISTFContract does not exist.Ensure the required contract is in place before initiating this payout.
CARD_CERTIFICATE_INFO_MISSFCard certificate info is missing.Provide the required certificate information in `beneficiary.bankDetails`.
BALANCE_NOT_ENOUGHFBalance insufficient.Ensure the payer account has sufficient balance.
WAIT_CHANGE_CARD_RETRYFAwaiting card update to retry the transaction.Retry with a different card after a short delay.
AMOUNT_EXCEED_LIMITFAmount exceeds maximum limit.Reduce the payout amount to within the allowed limit.
REPEAT_REQ_INCONSISTENTFRepeated requests are inconsistent.A prior request with the same `requestId` was submitted with different parameters. Use a new `requestId` for a different payout.
WALLET_TEMPLATE_NOT_EXISTFWallet template not exist.Check `beneficiary.walletDetails.walletBrandName`.
CARD_INFO_ABNORMALFCard info abnormal.Check `beneficiary.bankDetails` fields and retry with valid account information.
WALLET_INFO_ABNORMALFWallet info abnormal.Check `beneficiary.walletDetails` fields and retry with valid wallet information.
USER_ACCOUNT_ABNORMALFAccount status abnormal.The payer account is in an abnormal state. Retry with a valid account.
PARAM_ILLEGALFIllegal parameters exist. For example, a non-numeric input, or an invalid date.Verify request fields against this reference. Check `Amount` structure and enum values.
PROCESS_FAILFA general business failure occurred. Do not retry.Do not retry. Contact WorldFirst support with your `requestId`.
UNKNOWN_EXCEPTIONUThe API call is failed, which is caused by unknown reasons.Server error. Retry later; contact WorldFirst support if the issue persists.
USER_NOT_EXISTFThe user does not exist.Retry with correct user information.
USER_NO_PERMISSIONFUser does not have permission.Retry with a user that has the required permissions.
CONTRACT_CHECK_FAILFThe contract check has failed.Check the contract status, then retry.
ACCOUNT_NOT_EXISTFaccount does not exist.Verify the account exists, then retry.
Definition
POST /api/open/v1/payouts/create
Request
{
"requestId": "CTS123456",
"businessSceneCode": "THIRD_PARTY_PAYOUT",
"purposeCode": "GDS",
"payer": {
  "region": "HK",
  "phone": "176xxxxxxxx",
  "email": "123@gmail.com",
  "name": {
    "firstName": "First",
    "lastName": "World",
    "fullName": "First World"
  },
  "address": {
    "address1": "xxxxxx",
    "address2": "xxxxx2",
    "zipCode": "4001001"
  }
},
"beneficiary": {
  "accountType": "BANK_ACCOUNT",
  "entityType": "COMPANY",
  "region": "HK",
  "phone": "176xxxxxxxx",
  "email": "123@gmail.com",
  "address": "xxxxxx",
  "bankDetails": {
    "bankBIC": "HSBCHKHHHKH",
    "accountNumber": "23******3452",
    "accountHolderName": {
      "fullName": "TestName"
    }
  },
  "relationType": "THIRD_PARTY",
  "classificationCode": "0001"
},
"sourceAmount": {
  "currency": "HKD"
},
"payoutAmount": {
  "currency": "USD",
  "value": 10000
},
"transferQuote": {
  "quoteId": "12345678910xxx"
},
"fvtPreference": "NEED_FVT",
"oboPreference": "NEED_OBO",
"reference": "pay to xxx",
"transferMemo": "test memo"
}
Response
{
"result": {
  "resultCode": "SUCCESS",
  "resultMessage": "success",
  "resultStatus": "S"
},
"id": "20260401xxxxx",
"createdAt": "2026-08-08T23:12:13Z",
"businessSceneCode": "THIRD_PARTY_PAYOUT",
"purposeCode": "GDS",
"payer": {
  "region": "HK",
  "phone": "176xxxxxxxx",
  "email": "123@gmail.com",
  "name": {
    "firstName": "First",
    "lastName": "World",
    "fullName": "First World"
  },
  "address": {
    "address1": "xxxxxx",
    "address2": "xxxxx2",
    "zipCode": "4001001"
  }
},
"beneficiary": {
  "accountType": "BANK_ACCOUNT",
  "entityType": "COMPANY",
  "region": "HK",
  "phone": "176xxxxxxxx",
  "email": "123@gmail.com",
  "address": "xxxxxx",
  "bankDetails": {
    "bankBIC": "HSBCHKHHHKH",
    "accountNumber": "23******3452",
    "accountHolderName": {
      "fullName": "TestName"
    }
  },
  "relationType": "THIRD_PARTY",
  "classificationCode": "0001"
},
"sourceAmount": {
  "currency": "HKD"
},
"payoutAmount": {
  "currency": "USD",
  "value": 10000
},
"feeAmount": {
  "currency": "USD",
  "value": 100
},
"transferQuote": {
  "quoteId": "12345678910xxx",
  "currencyPair": "HKD/USD",
  "clientRate": 7.892342342,
  "effectiveAt": "2026-04-19T13:08:26Z",
  "expiresAt": "2026-04-19T13:08:56Z"
},
"fvtPreference": "NEED_FVT",
"oboPreference": "NEED_OBO",
"paymentType": "LOCAL",
"paymentNetwork": "ACH",
"reference": "pay to xxx",
"transferMemo": "test memo"
}