Before reading this API document, please make sure to check API Description Guide first.
Transaction Limits
| Transaction Type | Limit |
|---|---|
| Collection | XAF: 1000-5000000 |
| Disbursement | XAF: 1000-5000000 |
Amount Decimal Places: XAF — 0 decimal places
Collection API
- Cameroon collection supports Mobile Money (EWALLET) only. If no phone number is provided in the request, the returned
payUrlredirects the user to a phone number input page. - After the phone number is submitted, the user either receives an STK push on the phone (enter PIN to confirm) or is redirected to the operator page to complete the payment, depending on the operator.
- If the operator requires OTP, the user enters the OTP on the cashier page to complete the payment.
Collection Application
Brief Description:- Create a collection order
/xaf/collect/apply
Parameters:
| Parameter Name | Required | Type | Description |
|---|---|---|---|
| appId | Yes | Long | Business ID (obtained from backend, needs to pass the corresponding Business ID based on the currency in the URL) |
| orderId | Yes | String | Merchant order number (must be unique, length no more than 48) |
| name | Yes | String | Payer name |
| phone | Yes | String | Payer mobile number (Cameroon mobile number, 12 digits starting with 237) |
| Yes | String | Payer email address | |
| amount | Yes | String | Transaction amount, integer only (no decimal places). Range: 1,000-5,000,000 |
| payType | Yes | String | Payment Method Type |
| inBankCode | Yes | String | Payment Method Code |
| callBackUrl | Yes | String | Redirect URL after successful payment |
| callBackFailUrl | Yes | String | Redirect URL after failed payment |
| notifyUrl | No | String | Callback URL |
| subject | Yes | String | Payment remark |
| body | No | String | Remark details |
| partnerUserId | Yes | String | Unique user identifier (e.g., userId), used for risk control system, must be valid, otherwise it will affect the transaction. Format: digits, letters, or symbols -~!@#$%&*()_. |
| sign | Yes | String | Signature |
{
"appId": 1054,
"orderId": "M233323000059",
"amount": "5000",
"phone": "237612345678",
"email": "johndoe@example.com",
"name": "john doe",
"inBankCode": "MTN",
"payType": "EWALLET",
"callBackUrl": "https://merchant.com/payment/success",
"callBackFailUrl": "https://merchant.com/payment/fail",
"partnerUserId": "149597870",
"sign": "af0gAHkUOyYHu9owQp8NJ4mPEeUW4vuJcjdxqLIzrVw8AvpLSjD1DXupReSG/CyuSkFRyiIvCp5u703AuGGmfgD2gKDH3Ywau41bAbG2jnHJ8mtjiSJ5iWUzanyd4Kr7d1+rETbzUl7/BkW3t0X8UUFdqpxwG8DPUjAwUKfplWDHV7koG51Ozexd80DCsmW6eWdouAZ1uNXGLYmV3ftE3BmfNRtuv1C5bfTJWrTEIOxbF6g2uYOFZTlIgrQgd7/2PsAYwQQXNz8Q8CYl4OxqCv4pXJxaLWPbR5tqZu9og5kn32C9aHW/NlU1y39vzz+4ef81yPAqUV9oHlSMSPrMmw=="
}
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M233323000059",
"orderNo": "6023071013539074",
"payUrl": "https://pay.haipay.asia/cashier/1L9zQS2",
"sign": "YEoA8Y2JzQFGVzwJSqmemm1Kfv/bfyIfCqv2dp7RNzT5B72AQvdD+nt2nR4sL1HWscvmNHyVt5ovAi7MMhy3ziih/sMph+wPx4YjH3W1h5DyBvSlWvaKfKrK5ViomZ0pPYWydwRHnnRnicxToHK9S6qtSy7Q73O0hdz4hJ9p41Th3ycBl2Q9SeqSZYSY1ohcPDhdyRf2y0prb8rHgpBKzxZ5BKX/1bsE9OmsSEHAEYT8OGgko6aNe8XPAhr4G48cpWTftvnGQuzh0O65nuZRI/PF+Axt2zJCVbFHDDSREI9NlAT82ebDqhlVdxQzKE67D1nxgjb3dPmDUYHOBpmwxQ=="
}
}
| Parameter Name | Type | Description |
|---|---|---|
| orderId | String | Merchant order number (must be unique) |
| orderNo | String | Platform order number |
| payUrl | String | Payment link |
| sign | String | Signature |
Collection Query
Brief Description:- Query collection order
/xaf/collect/query
Parameters:
| Parameter Name | Required | Type | Description |
|---|---|---|---|
| appId | Yes | Long | Business ID (obtained from backend, needs to pass the corresponding Business ID based on the currency in the URL) |
| orderId | Yes | String | Merchant order number |
| orderNo | No | String | Platform order number (faster response) |
| sign | Yes | String | Signature |
{
"appId": 1054,
"orderId": "M22222000028",
"sign": "EmyJGm3ELzG4FsOd0Krs9ncbSjo4oTGuXWML+7djYla3+VAwd9wS17z38p/7U2ZAjroO04XrE7YXcB1o76Dtyipj3h3bJzs7FYma1QNkMUdt9hh7m8U6hMsMQX7vIWHtXNwz4pbTSC75+kQWXaCew7KoE6LXECdJU8AISgNgeki2TK9R0pCfshr0Z2SZBPeuT6OvIH5LdmqgdZhuqnffGU2qnXk4KMkO848e6/WALLBR+LE1wyKHfPnYVcuKSMVYxkvKyyIL5JIPEgW0o5bh4RCbaUn3NZtyYwrU1uQ3ZDFRThm9j6XAQP+LBlmq3nOePqBtp/VDVarRaV+7FbQg3A=="
}
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M22222000028",
"orderNo": "6023042811314347",
"amount": "50000",
"actualAmount": "0",
"fee": "0",
"status": 1,
"sign": "fP433ygWVDLVGxYkVnIJj7riGq0U3vyVX+MbBAImxfGLZkZcEAHVEoVYuULZSmXAAXKRSyd67WlDNm+24pougM54ofAoH4HMtCL2tfCoBReFyz3z02AGKkrKE2xWhSpWoqfQoBvzwuN5iGMMu0s9Q1YvqiwJ8WDVIENnmiIyD8qDJN7caHTW2US14/faG+9AvnuIgJ/nu7/jogOlgEYdZdVYU7gcRDE+d47KjlFGswQkJ/h/uzV7cWtUqrtOO7ZnZ3/z33Xx8awokX36QoYcPSWAU0h+Ij9O9402HNhm1eTbYcLU0uI/z8xCAtyAI/tTyiFijpiNlxUKQj+zKILw=="
}
}
| Parameter Name | Type | Description |
|---|---|---|
| orderId | String | Merchant order number (must be unique) |
| orderNo | String | Platform order number |
| amount | String | Transaction amount |
| actualAmount | String | Received amount |
| fee | String | Transaction fee |
| status | Integer | Status (0 Not Started, 1 In Progress, 2 Success (final), 3 Failed (final), -1 Exception Pending Confirmation) |
| payTime | String | Payment success time (when status=2), format: yyyy-MM-dd HH:mm:ss (West Africa Time) |
| errorMsg | String | Failure reason (when status=3) |
| sign | String | Signature |
Payment Methods
| Currency | Payment Type (payType) | Payment Code (inBankCode) | Limit | Status | Description |
|---|---|---|---|---|---|
| XAF | EWALLET | MTN | 1000-5000000 | Available | MTN Mobile Money |
| XAF | EWALLET | ORANGE | 1000-5000000 | Available | Orange Money |
Disbursement API
Cameroon disbursement supports Mobile Money (EWALLET) only. The
accountNo must be a Cameroon mobile number (12 digits starting with 237).Disbursement Apply
Description:- Create a Disbursement order
/xaf/pay/apply
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
| appId | Yes | Long | Business ID (obtained from backend, must match the currency in the URL) |
| orderId | Yes | String | Merchant order ID (must be unique, length ≤ 48) |
| amount | Yes | String | Transaction amount, integer only (no decimal places). Range: 1,000-5,000,000 |
| accountType | Yes | String | Account type: EWALLET (e-wallet) |
| bankCode | Yes | String | Payment Method Code |
| accountNo | Yes | String | User mobile number (Cameroon mobile number, 12 digits starting with 237) |
| name | Yes | String | Recipient name (Format: English characters only, 1–30 characters. Format: “firstName middleName lastName”(middleName is optional and does not support special characters or numbers.)) |
| phone | Yes | String | Real phone number |
| Yes | String | Real email address | |
| notifyUrl | No | String | Callback URL |
| subject | No | String | Payment note (transaction title, product name, payment reason) |
| body | No | String | Detailed note |
| partnerUserId | Yes | String | User unique identifier (e.g., userId). Used by risk control, must be valid. Format: numbers, letters, or common symbols -~!@#$%&*()_. |
| sign | Yes | String | Signature |
{
"appId": 1054,
"orderId": "M100000450012",
"amount": "5000",
"accountType": "EWALLET",
"bankCode": "MTN",
"accountNo": "237612345678",
"name": "john doe",
"phone": "237612345678",
"email": "johndoe@example.com",
"subject": "iphone13",
"body": "ProMotion technology with adaptive refresh rates up to 120Hz",
"partnerUserId": "149597870",
"sign": "I1PeK3eJOVsFFNowxVRqMXpeWm1lr/BcRpBi8WsW4wVo1+5CC3JsrFq/m/L2O69NzKHvtDWi4zia3DL3dPut0yMyUyqL91LNCSaeISbGsQPlhEsQpyTOryS/RKOfsrn2Xo37SCF/phAvndOk2jwwGwqM5xLz1ms9Ukl85wv27QFNrXIMxK2p18oe7MpMYrgf+xvEBE/VqCtKMtN9pO449wWwXzHWNPbZ76s4pAvKwRE9yXQDr7Iw14Dktcnl1FoLM4gWM/obkO+mz6SyAGDuXhVh/+OD/IGNiCyTCNq6ciQY28UnCFV6ZIP40gxsFhfBJKbK+Raw7y1Bh912ifYfug=="
}
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M100000450013",
"orderNo": "3023062014149637",
"sign": "LmhUnkw5j0pMiimsG8rKwdNNZGvXH5MpSmD6mdHZwq1SQwuK5BohmdEoqKB/jkMk28o3da4Cxh6Q+tW97+yTCemRrF+dMaHA73rpOeUuujKQl/UcFvJuMhfLBa2tp09L71NzoBqpPD6aXf37mYAz8E1HmERwFPpac5FVxIYanHG8cqmMLJYsVmHTSxWavgWU03ys9UczBePkBiR8sl2FSOhFABB0wAP28lswrV/ABS68IsLKtyd1fyI3GBfSbIK5nDEEnlE+EdElFdLs9taAxJImeVF1x4eT47+bkPJ2qS8z3K8QGzKLF3W+8SiRZGfSwDTsLKH+2Vycvy5auRl+ag=="
}
}
data Parameter Description
| Parameter | Required | Type | Description |
|---|---|---|---|
| orderId | Yes | String | Merchant order ID (must be unique) |
| orderNo | Yes | String | Platform order ID |
| sign | Yes | String | Signature |
Disbursement Query
Description:- Query a Disbursement order
/xaf/pay/query
Parameters:
| Parameter | Required | Type | Description |
|---|---|---|---|
| appId | Yes | Long | Business ID (obtained from backend, must match the currency in the URL) |
| orderId | Yes | String | Merchant order ID |
| orderNo | No | String | Platform order ID (faster response) |
| sign | Yes | String | Signature |
{
"appId": 1000,
"orderId": "M1234567111",
"orderNo": "3022111516571436",
"sign": "ZxkVZL+GAyv0VhvWn4IvuYahTzxgQuthkuV2ONWiqIfIDb2avvHlFOUJVzqZi1q8CPHXZm1ltanRTRVTxfsuftLvGeDioUHglWt46/RU6c1OPznpLGsZ35Q3n5tW2y1EnOsxPynXBFLuDQy+aZ3l9u6AQ30T0zQexMGT+IxuFkmUp02g/6juaHa5ZgNMv7lN67ixIp162wrM7OJuaOif872QijSceRdZhzaMGImAwB0D4MosRV4WMBOKkwgPdmS7GuZN66YUidXk3wTGqX3MYRw6M0kj4eNegSUwPXvp4q4p0KO8Y3xUMld54GY2ApX3WN3CBtC/vpJqEszjGBbbGg=="
}
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M1234567111",
"orderNo": "3022111516571436",
"amount": "100000",
"fee": "0",
"status": 3,
"errorMsg": "error",
"sign": "KKuvCl0SuNANJs+l2ogDaJm8pmV+Hi+Xa7q27vJ6D1Ehs4aOp13kRbITfJAhczh3T81BE9qwHeJaYwf+r0EypKM9TL6pMwfG8Az4gRy1D57wiUaVjl2PWcvbEqrn1hL0b+btkjvAM9I+CcSv+wuOW3/uku17Ws3FhgJLj9sFsQUBAPjDO+758VnwBytCOLBmljLBXyKgNgpmFQ1/DNkqWl0UNzyLK45Zw3yf5NiwhEFbvW0jlOWlfu/ql4hluISUQG573jEoFCBEnQLb2tQoRZj1QYNRCXPf5lbej0vzqbEwvR9h+ZOf255t1MocJkdIe463DTV5U3KZdVT87HMagw=="
}
}
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M1234567112",
"orderNo": "3022111517401574",
"amount": "100000",
"fee": "1003",
"status": 2,
"payTime": "2024-03-01 23:59:59",
"sign": "khPtOmGq+cpKX0HFAI/lbP0dx4oVyNAnL5oLsdmhDJdASlQm0yg5I3o+MhImYggEsL6c2bo5fP29t54OZFqSdQDfIuNDvGbAMAr4mRBxc0hoHLkBLyyagfVPBLyQA1JY8XV3ZL4ySzQ3ZQnMCfrh2K39ueUuz6HpZ03Hj0KYijVRCXAZaio/L5jfLBT12QXmvIfAHa8s/k9flhK05ENHPep3zjj/MZGOEaX7jkEJLfjK0duypDCa61BRQjM+oePOdVsgleIl1Yf98UAxMDZ/A3912KFHEb+/jvmdnulNbiJFyuT1fEe+j2teUgw3vFsZAtwNWAgxhC7UO+N0Q5z4EA=="
}
}
data Parameter Description
| Parameter | Type | Description |
|---|---|---|
| orderId | String | Merchant order ID (must be unique) |
| orderNo | String | Platform order ID |
| amount | String | Transaction amount |
| fee | String | Fee |
| status | Integer | Order status (0 Not Started, 1 Processing, 2 Disbursement Success (final), 3 Disbursement Failed (final), -1 Exception Pending Confirmation) |
| payTime | String | Payment success time (present when status=2) (West Africa Time), format: yyyy-MM-dd HH:mm:ss |
| errorMsg | String | Payment failure reason (present when status=3) |
| sign | String | Signature |
Payment Methods
| Currency | Payment Type (accountType) | Payment Code (bankCode) | Limit | Status | Description |
|---|---|---|---|---|---|
| XAF | EWALLET | MTN | 1000-5000000 | Available | MTN Mobile Money |
| XAF | EWALLET | ORANGE | 1000-5000000 | Available | Orange Money |

