Product overview
EVO payment provides Original Credit Transactions for several business scenarios such as tax refund and online gaming.
How it works
This diagram below describes the whole workflow of Payout.
Step1: Check if the card is available
EVO Payment provides the ability to validate the card with a zero-auth transaction before starting the Original Credit Transactions. Please see chapter Account Status Inquiry (ASI) for more details.This step is optional for users.
Step2: Collect user’s payout information
Collect your user’s payout information based on the API Specification, then send them to your host.Please note that if the user selects to pay with a card, the merchant must obtain the PCI DSS compliance. You have 2 ways to collect card details:
- Use EVO Payment client-side solution to securely encrypt your user's card details.
This option ensures you meet the PCI DSS compliance, as you're only required to submit PCI DSS Self-f-A-Assessment Questionnaire A (SAQ A). See EVO Payment SDK Integration Guide for more details.
- Collect and send raw card data.
This option requires you to assess your PCI DSS compliance according to PCI DSS Self-f-A-Assessment Questionnaire D (SAQ D), the most extensive form of self-certification.In the scenario of Original Credit Transactions, the user only needs to send the card number or encrypted card number.
Step3: Make a payout
- When it’s only a payout transaction
After the user chooses the card and submits the required payout information, you needs to make a payout request to EVO Payment.From your server, you can make an HTTP POST request to EVO Payment endpoint.
/g2/v1/payment/mer/{sid}/payout
and specify the parameters below.
| Body parameter | Required | Description |
|---|---|---|
| merchantTransInfo | M | The reference for the payout, including a unique merchantTransID and merchantTransTime to specify the time you initiate the request. |
| transAmount | M | The currency and value of the payout. The value must follow the currency's minor unit. |
| paymentMethod | M | Use paymentMethod.type to specify different payout method type, such as card, with different payout information that you collect in the previous step. |
| transInitiator | M | The information of device to initiate the transaction. |
| tradeInfo | M | This field is used to indicate the specific scenario of Original Credit Transaction. |
| senderInfo | M | Detail information about the sender who will send the money to the receiver card. Specify this parameter if you can obtain the information from the user. This helps EVO Payment laundering and fraud detection, and increases payout success rates. |
| recipientInfo | M | Detail information about the receiver who will receive the money from the sender. Specify this parameter if you can obtain the information from the user. This helps to increase payout success rates. |
| webhook | O | The URL to receive notification. Specify this to get the notification from EVO Payment after the payout has succeeded. |
| metadata | O | A self-defined reference information that you can specify in the request, and will be echoed back in the response. The metadata message in the response is the same as the metadata in your request message, except of GET request. The metadata in GET response message is the same as the metadata in the POST request message. And the metadata in the notification is the same as the metadata in the POST request message. |
More details about the paymentMethod object: Below is take an example in card scenario
- paymentMethod.type: Set as card in your request.
- paymentMethod.card.payoutCardInfo.cardNumber: Set as card number of the receiver
More details about the tradeInfo object:
tradeInfo.tradeType:
This field is used to define the specific scenario of Original Credit Transaction the user has to use different value in different scenario. For now, EVO Payment can support four valid values:
- Funds_Disbursement: used for tax refund, Payroll, Game Top-up etc.
- Online_Gambling_Payout: used for online gaming.
- Account_Transfer: used for Original Credit Transaction between two accounts that belong to one person in P2P scenario.
- Personal_Transfer: used for Original Credit Transaction between two people in P2P scenario.
Here is an example of using Visa card to make a 10 USD payout:
curl-X POST https://{DOMAIN_NAME.com}/g2/v1/payment/mer/{sid}/payout \
-H "Content-Type: application/json" \
-H "DateTime: 2021-12-31T08:30:59+0800" \
-H "MsgID: 2d21a5715c034efb7e0aa383b885fc7a" \
-H "SignType: SHA256" \
-H "Authorization: YOUR_MESSAGE_SIGNATURE" \
-d'{
"transInitiator": {
"platform": "WEB"
},
"merchantTransInfo": {
"merchantTransID": "{{merchantTransID}}",
"merchantTransTime": "{{merTransTime}}"
},
"tradeInfo": {
"tradeType": "Account_Transfer",
"purposeOfPayment": "13"
},
"transAmount": {
"currency": "HKD",
"value": "1.00"
},
"paymentMethod": {
"type": "card",
"card": {
"payoutCardInfo": {
"cardNumber": "5204730000009725"
}
}
},
"senderInfo": {
"name": {
"firstName": "test1",
"middleName": "test2",
"lastName": "test3"
},
"address": {
"street": "UL",
"city": "UA",
"stateOrProvince": "LA",
"country": "USA"
},
"dateOfBirth": "20000415",
"accountNumber": "123456",
"accountType": "Card_Account"
},
"recipientInfo": {
"name": {
"firstName": "ABC",
"middleName": "DFG",
"lastName": "QWE"
},
"address": {
"street": "AC",
"city": "YU",
"stateOrProvince": "AL",
"country": "USA"
}
},
"webhook": "",
"metadata": "123"
}Here is an example of receiving a response:
{
"metadata": "123",
"paymentMethod": {
"payoutCard": {
"first6No": "476134",
"fundingType": "credit",
"issuingCountry": "SGP",
"last4No": "0019",
"paymentBrand": "Visa",
"productID":"N"
},
"isNetworkToken": false
},
"payout": {
"evoTransInfo": {
"evoTransID": "pay_250904100221000118184371",
"evoTransTime": "2025-09-04T02:02:21Z",
"retrievalReferenceNum": "524710336595",
"traceNum": "336595"
},
"merchantTransInfo": {
"merchantTransID": "T509041756951340689",
"merchantTransTime": "2025-09-04T10:02:20+08:00"
},
"pspTransInfo": {
"authorizationCode": "016407",
"pspTransTime": "2025-09-04T02:02:20Z",
"pspTransID":"MCS0X349T0908",
"retrievalReferenceNum": "524710336595"
},
"status": "Success",
"transAmount": {
"currency": "HKD",
"value": "1.00"
}
},
"pspData": {
"merchantID": "OCT000415123456",
"name": "Visa"
},
"result": {
"code": "S0000",
"message": "Success",
"pspMessage": "Approved or completed successfully",
"pspResponseCode": "00"
}
}- When it's an OCT transaction in P2P scenario
In P2P scenario, when the user decides to send two requests to complete the money transfer, the user has to send an AFT request (POST Payment) and an OCT request (POST payout). The OCT request has to link the AFT request’s merchantTransID in the request URL so that the necessary information can be linked.
Here is an example of request URL when the OCT happens in P2P scenario
(the value of the merchantTransID is an example, this merchantTransID belongs to the AFT transaction)
/g2/v1/payment/mer/{sid}/payout?merchantTransID=T509091757387259148
Step4:Present the payout result
After the user confirms the payout, you can use the result.code and payout.status to inform the user of the payout status.
| Result code | Description |
|---|---|
| S0000 | Success |
| V0008 | Field { } is not applied with |
| C0004 | Request resource merchantTransID {XXX} not exist |
| B0005 | Unsupported function {XXX}, please check your profile setup in EVO Payment |
| B0006 | Unsupported payment brand {XXX}, please check your profile setup in EVO Payment |
| B0033 | The transaction was rejected for security violation |
For other possible result.code values and recommended messages that you can present to your user, see A Appendix in EVO Payment API Specification.
Get the payout detail
The user can send GET Payout to get the detail information of the payout.
From your server, you can make an HTTP GET request to EVO Payment endpoint
(the value of the merchantTransID is an example)
This merchantTransID belongs to the Payout transaction that you want to get
/g2/v1/payment/mer/{sid}/payout?merchantTransID=T509091757387259148
The response is the same as the response of POST payout

