Skip to content

Create Payout Order

HTTP Request

TIP

POST baseUrl + /api/payOut

Request Headers

HeaderNameRequiredValue
Content-TypeYapplication/json
MerchantIdYMerchantId
SignYSign

RequestBody

ParameterRequiredTypeExampleDescription
accountNameYstring(40)JohnBeneficiary Name
accountNoYstring(32)pls refer to Payout Account TypeBeneficiary Account
accountTypeYintpls refer toPayout Account TypeBeneficiary Account Type
currencyYstring(32)MXNCurrency code
amountYdecimal(20,0)[40,15000]Amount(only support integer)
bankIdYintpls refer toPayout Bank ListBank id
mchOrderNoYstring(32)P123456Merchant order number
notifyUrlYstring(250)http://abc.com/webhooks (callback) address
nonceStrYstring(32)16283812xxxxRandom string
idTypeNstring(32)No distinction between types for the time beingPayout Payee ID Type
idCardNstring(32)User's real ID numberBeneficiary ID number
phoneNstring(32)+52xxxxxxxBeneficiary phonenumber
emailNstring(32)xyz@gamil.comBeneficiary email
remarkYstring(32)remarkOrder remarks

TIP

Note that callback/webhook addresses only support https or http protocol addresses. If the address is an ip address, be sure to use a public domain name.

ResponseBody

ParameterTypeParameter Description
merchantIdintMerchantId
mchOrderNostring(32)Merchant order number
orderNostring(32)Platform order number
amountdecimal(20,0)Amount
feedecimal(20,0)fee
orderStatusstringOrder Statuspls refer toPayout Order Status Enum
json
{
  "msg": "SUCCESS",
  "code": 200,
  "data": {
    "merchantId": "100001",
    "mchOrderNo": "M1656907083234",
    "orderNo": "PAYOUT8232147367892025344",
    "amount": 100,
    "fee": 0,
    "orderStatus": "PROCESSING"
  }
}

Payout payment sequence diagram

SPEI PAYOUT

  1. The merchant requests the /api/payOut interface to submit a payment order.
  2. Cashy pre-processes payment orders. (Verify some necessary parameters)
  3. Return the processing result to the merchant. (If successfully received, the platform order number and other information will be returned; if failed, the corresponding synchronization rejection reason will be returned)

X. After the merchant obtains the result of 3, he can check the order status at any time through the PayoutQuery API.

  1. SPEI will verify the order. If the verification passes, it will be sent to the beneficiary bank. If it fails, the reason for the failure will be returned.

W1. For the first order callback, if the transaction is rejected by the SPEI system, it will be notified that the order failed and the reason for the order failure will be carried. If it is successfully sent to the beneficiary bank, the callback order will be successful.

  1. The beneficiary bank verifies the transaction. If the verification passes, it will be deposited into beneficiary account. If it fails, the failure reason will be returned (eg : account block,account not exits). (This process takes about 2 minutes)
  2. After receiving the payment, the user takes the initiative to refund the money.

W2. If the beneficiary bank rejects the payment/the user actively initiates a refund, there will be a second order callback and the failure reason will be returned.

Query Payout Order

HTTP Request

TIP

POST baseUrl + /api/payOutQuery

Request Headers

HeaderNameRequiredValue
Content-TypeYapplication/json
MerchantIdYMerchantId
SignYSign

RequestBody

ParameterRequiredTypeExampleDescription
mchOrderNoNstring(32)P123456Merchant order number
orderNoNstring(32)PAYIN12345Platform order number
nonceStrYstring(32)1628381288000Random string

TIP

We recommend using orderNo (platform order number) first. At least one of the platform order number and merchant order number needs to be passed.

ResponseBody

json
{
  "msg": "SUCCESS",
  "code": 200,
  "data": {
    "merchantId": "100001",
    "mchOrderNo": "M1656756338536",
    "orderNo": "PAYOUT8231515112790892544",
    "amount": 100.0,
    "fee": null,
    "orderStatus": "PAYING",
    "completionTime": null,
    "resultDesc": "SUCCESS"
  }
}
ParameterTypeDescription
merchantIdintMerchantId
mchOrderNostring(32)Merchant order number
orderNostring(32)Platform order number
channelOrderNostring(32)Channel order number
amountdecimal(20,2)Amount
feedecimal(20,2)fee
orderStatusstring(32)Order Statuspls refer toPayout Order Status Enum
completionTimedateCompletion time yyyy-MM-dd HH:mm:ss
resultDescstring(64)Order Status,pls refer toOrder Status Description

Async Webhook Notification

HTTP Request

TIP

POST : notifyUrlnotifyUrlis provided by the merchant

Request Headers

HeaderNameRequiredValue
Content-TypeYapplication/json
MerchantIdYMerchantId
SignYSign

Webhook RequestBody

json
{
  "orderStatus": "SUCCESS",
  "amount": 100.0,
  "fee": 0,
  "mchOrderNo": "2a6421c4-3758-4d1a-b47e-f7d0e7133f9e",
  "merchantId": "100001",
  "orderNo": "PAYOUT8388679728902370944",
  "completionTime": "2022-08-08 08:08:08",
  "resultDesc": "SUCCESS"
}
ParameterTypeDescription
merchantIdintMerchantId
mchOrderNostring(32)Merchant order number
orderNostring(32)Platform order number
channelOrderNostring(32)Channel order number
amountdecimal(20,2)Amount
feedecimal(20,4)fee
orderStatusstring(32)pls refer toPayout Order Status
resultDescstring(64)pls refer toOrder Status Description
completionTimedateComplete time

TIP

fee and completionTime only have a value if the order is successfully paid.

TIP

Please respond with SUCCESS if the process is successful. For other responses, we will consider the callback to have failed. After the callback fails, it will be retried in 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 minutes, and the callback will be retried 10 times in total.

Released under the MIT License.