> ## Documentation Index
> Fetch the complete documentation index at: https://doc.haipay.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Cameroon Payment API

<Warning>
  **Before reading this API document, please make sure to check [**API Description Guide**](/docs/en/guide/api_description_guide) first.**
</Warning>

## **Transaction Limits**

| Transaction Type | Limit             |
| :--------------- | :---------------- |
| Collection       | XAF: 1000-5000000 |
| Disbursement     | XAF: 1000-5000000 |

> **Amount Decimal Places:** XAF — 0 decimal places

## **Collection API**

<Tip title={"Cameroon Collection Payment Flow"}>
  1. Cameroon collection supports Mobile Money (EWALLET) only. If no phone number is provided in the request, the returned `payUrl` redirects the user to a phone number input page.
  2. 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.
  3. If the operator requires OTP, the user enters the OTP on the cashier page to complete the payment.
</Tip>

### **Collection Application**

**Brief Description:**

* Create a collection order

**URL: `/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)                                                                                                           |
| email           | 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)                                                                                                                                                  |
| inBankCode      | Yes      | String | [Payment Method Code](#inBankCode)                                                                                                                                                  |
| 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                                                                                                                                                                           |

#####

request

```json theme={null}
{
    "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=="
}
```

response

```json theme={null}
{
    "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=="
    }
}
```

Response data field description

| 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

**URL: `/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                                                                                                         |

request

```json theme={null}
{
    "appId": 1054,
    "orderId": "M22222000028",
    "sign": "EmyJGm3ELzG4FsOd0Krs9ncbSjo4oTGuXWML+7djYla3+VAwd9wS17z38p/7U2ZAjroO04XrE7YXcB1o76Dtyipj3h3bJzs7FYma1QNkMUdt9hh7m8U6hMsMQX7vIWHtXNwz4pbTSC75+kQWXaCew7KoE6LXECdJU8AISgNgeki2TK9R0pCfshr0Z2SZBPeuT6OvIH5LdmqgdZhuqnffGU2qnXk4KMkO848e6/WALLBR+LE1wyKHfPnYVcuKSMVYxkvKyyIL5JIPEgW0o5bh4RCbaUn3NZtyYwrU1uQ3ZDFRThm9j6XAQP+LBlmq3nOePqBtp/VDVarRaV+7FbQg3A=="
}
```

response

```json theme={null}
{
    "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=="
    }
}
```

Response data field description

| 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**<a id="inBankCode" />

| 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**

<Tip>
  Cameroon disbursement supports Mobile Money (EWALLET) only. The `accountNo` must be a Cameroon mobile number (12 digits starting with 237).
</Tip>

### **Disbursement Apply**

**Description:**

* Create a Disbursement order

**URL: `/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](#bankCode)                                                                                                                                                       |
| 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                                                                                                                                                                      |
| email         | 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                                                                                                                                                                              |

#####

request

```json theme={null}
{
    "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=="
}
```

response

```json theme={null}
{
    "status": "1",
    "error": "00000000",
    "msg": "",
    "data": {
    "orderId": "M100000450013",
    "orderNo": "3023062014149637",
    "sign": "LmhUnkw5j0pMiimsG8rKwdNNZGvXH5MpSmD6mdHZwq1SQwuK5BohmdEoqKB/jkMk28o3da4Cxh6Q+tW97+yTCemRrF+dMaHA73rpOeUuujKQl/UcFvJuMhfLBa2tp09L71NzoBqpPD6aXf37mYAz8E1HmERwFPpac5FVxIYanHG8cqmMLJYsVmHTSxWavgWU03ys9UczBePkBiR8sl2FSOhFABB0wAP28lswrV/ABS68IsLKtyd1fyI3GBfSbIK5nDEEnlE+EdElFdLs9taAxJImeVF1x4eT47+bkPJ2qS8z3K8QGzKLF3W+8SiRZGfSwDTsLKH+2Vycvy5auRl+ag=="
}
}
```

Return `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

**URL: `/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                                                               |

request

```json theme={null}
{
    "appId": 1000,
    "orderId": "M1234567111",
    "orderNo": "3022111516571436",
    "sign": "ZxkVZL+GAyv0VhvWn4IvuYahTzxgQuthkuV2ONWiqIfIDb2avvHlFOUJVzqZi1q8CPHXZm1ltanRTRVTxfsuftLvGeDioUHglWt46/RU6c1OPznpLGsZ35Q3n5tW2y1EnOsxPynXBFLuDQy+aZ3l9u6AQ30T0zQexMGT+IxuFkmUp02g/6juaHa5ZgNMv7lN67ixIp162wrM7OJuaOif872QijSceRdZhzaMGImAwB0D4MosRV4WMBOKkwgPdmS7GuZN66YUidXk3wTGqX3MYRw6M0kj4eNegSUwPXvp4q4p0KO8Y3xUMld54GY2ApX3WN3CBtC/vpJqEszjGBbbGg=="
}
```

response — Order Failed

```json theme={null}
{
    "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=="
}
}
```

response — Order Successful

```json theme={null}
{
    "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=="
}
}
```

Return `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**<a id="bankCode" />

| 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     |

## Related Topics

* [Common API](/docs/en/api/version2/CommonApi)
* [HaiPay API Description and Common Rules](/docs/en/guide/api_description_guide)
* [Global Cashier Payment API](/docs/en/V20260701/api/version2/GlobalCashier)
