Getting Started 
Environment Setup 
Before you begin, make sure you have completed the Set Up Test Environment step.
| Test | https://p-gate-uat.checus.com/aggregate-pay/api/gateway/<PATH> | 
| Production | https://pay-gate-hk-prod.checus.com/aggregate-pay/api/gateway/<PATH> | 
Interaction Flow 

Key APIs 
| Interaction | Direction | API / Method | 
|---|---|---|
| Create payout request | Merchant→Checus | /paymentOrderPay | 
| Payout result webhook | Checus→Merchant | /disbursementResultNotifyUrl | 
| Query payout | Merchant→Checus | /paymentOrderQry | 
Integration Steps 
Before you start
- Download the payout application template and collect the user's payout details in your app or website.
- Construct request parameters according to the “Filling Rules” table in the Payout Application Template (fields with pink background are required).
- Payout requests are irreversible once submitted.
1. Create a payout session 
Call Apply for Payout/paymentOrderPay with POST to create a payout.
Each order you submit must pass idempotency checks. Include a unique orderId in the request.
If Checus detects a duplicate orderId, it returns code=ORDER_REPEAT together with the current order status.
2. Obtain payout results 
Method 1. Result notification
After processing, Checus calls your Payout Result Notification/disbursementResultNotifyUrl . It may retry multiple times until you return a successful response.
Callbacks usually occur when the transaction reaches a terminal state (e.g., Success, Failed, Bounceback); if the Processing state requires merchant/user awareness, a prior notification may be sent.
How to configure the callback URL:
- Pass via API: provide notifyUrlin/paymentOrderPay, effective for the current order only;
- Platform setting: configure a global callback URL in the Merchant Portal, applied to all orders.
Upon receiving the notification, you should return a processing result. If there is no response or a failure is returned, Checus retries at the following intervals: 0s / 30s / 300s / 600s / 3600s / 43200s, up to 6 retries. 
Method 2. Proactively query the result
If no notification is received or the order status is unclear, call Payout Query/paymentOrderQry to obtain the result.
Use the response
codeto judge whether the query itself succeeded, and usedata.statusto determine the payout status.
Payout status list
2.1 Main status enum
| Status | Description | Guidance | 
|---|---|---|
| SUCCESS | Payout succeeded | - | 
| PENDING | Payout processing | 1. After submission the order enters PENDING until a terminal state (SUCCESS / FAILED / BOUNCEBACK). 2. Multiple situations may occur under PENDING; see sub-status section. | 
| FAILED | Payout failed | Refer to Error Codes for causes | 
| BOUNCEBACK | Funds returned | In some countries, financial systems may return funds after initially returning success due to reasons such as: – Invalid/frozen beneficiary account – Bank or clearing network issues The order status changes from SUCCESStoBOUNCEBACK, and funds are returned to the merchant account. | 
2.2 Sub-status (for PENDING)
| Main Status | Sub-status | Description | Merchant guidance | 
|---|---|---|---|
| PENDING | PEND_RFI_MATERIAL | Materials required | Financial system triggered review; submit supplementary materials. Check email/portal notifications and upload required files. | 
| PENDING | REVIEW | Under review | Materials submitted; Checus reviewing, feedback expected in 0–3 business days. No action needed. | 
| PENDING | TRANSMIT | Processing | Transaction in progress; wait for the final result. | 
Error Codes
- Error codes are grouped by scenario: - Category - Description - Server request limits - Returned when frequency/IP rules trigger protection - Merchant configuration - Signature keys, contract activation, and other onboarding checks - Order submission - Parameter format, duplicate orders, system errors during submission - Order validation - Amount limits, beneficiary info checks, risk control restrictions - Order query - Errors related to the query API 
- Error examples Synchronous response example (e.g., error when creating payout): json- { "msg": "Invalid account or not active", "code": "INVALID_ACCOUNT" }- Asynchronous callback example (e.g., transaction failed): json- { "appId": "4701b0a908a14312b3c8452b448256dw", "code": "APPLY_SUCCESS", "data": { "transactionUtcTime": "2024-08-29T12:50:38 +0000", "status": "FAILD", "responseCode": "INVALID_ACCOUNT", "responseMsg": "Invalid account or not active" // other fields omitted }, "msg": "Success.", "notifyType": "PAYOUT" }
- Server request limit error codes - Code - Description - Notes - REQ_TIME_OVER_TIME - requestTime effective in two minutes - Request time differs from server by >2m - ILLEGAL_IP_REQUEST - illegal ip request - Request IP not in allowlist; contact Checus - TOO_MANY_REQUEST - Exceed request limitation, please retry later - Rate limited; retry later 
- Merchant configuration error codes - Subcategory - Code - Description - Notes - Signature/keys - MERCHANT_APP_INVALID - Signature key is not configured. - Key not configured - Signature/keys - SIGN_VERIFY_FAILED - The signature verify failed. - Signature failed - Contract/merchant - CONTRACT_INVALID - Merchant has not signed the contract or payment methods. - Not contracted or methods not enabled - Contract/merchant - MERCHANT_INVALID - The merchant has been offline. - Merchant status issue 
- Order submission error codes - Subcategory - Code - Description - Notes - Request validation - PARAMS_INVALID - The {field} is incorrect. - Field format invalid - Request validation - ORDER_REPEAT - The order number repeat. - Duplicate order - System error - SYSTEM_ERROR - System is busy, Please try again later. - Try again later 
- Order validation error codes - Subcategory - Code - Description - Notes - Payment method and amount limits - PAYMENT_METHOD_NOT_AVAILABLE - The payment method is not available. - Payment method unavailable - AMOUNT_LIMIT_UNMATCHED - The amount does not meet the limit requirements - Amount does not meet limits - AMOUNT_NOT_ENOUGH - Insufficient balance - Insufficient balance - Beneficiary account/info validation - INVALID_ACCOUNT - Invalid account or not active - Invalid or inactive beneficiary - ACCOUNT_BLOCKED - Account blocked or frozen - Account frozen - INVALID_EMAIL - Email address is incorrect. - Invalid email format - MISMATCHED_NAME - Payee name does not match the account - Name/account mismatch - Sub-merchant info issues - SUBMERCHANT_NOT_REGISTERED - The subMerchantNo is not registered - Sub-merchant not filed or incorrect - SUBMERCHANT_REGISTRATION_FAILED - The subMerchantNo registration failed - Sub-merchant registration failed - Risk control and others - RFI_BLACKLIST - Rejected due to failure of beneficiary to submit request information - Compliance materials not submitted - DECLINED_BY_RISK - Beneficiary bank rejected credit - Declined by risk control - PAYMENT_FAILED - Payment failed - Payment failed 
- Order query error codes - Code - Description - Notes - ORDER_NOT_EXIST - The order does not exist. - Order does not exist or is processing 
