Download OpenAPI specification:
This API is part of the our ecosystem. It allows you to make payments, find out the status of transactions and much more. Here you will find the latest documentation on setting up your solution.
| Provider ID | Provider Name | Country | Notes |
|---|---|---|---|
| 14 | Simulator | ANY | For testing |
During tests runs, using 14 provider ID (simulator) the callback is not returned and the transaction remains in the "in progress" status and if successful you will see in the response
{
"order_id": "54321",
"transaction_id": "12345",
"transaction_ref": "",
"status": 1,
"result": {
"code": 0,
"message": "OK"
},
"provider_result": {
"code": -8888,
"message": "Good"
},
"service_id": 1,
"service_version": "1.03/1.14|1.0/1.26|1.0/1.0|1.01/1.01|1.01/1.01||1.01/1.27",
"service_date_time": "2023-05-15 10:00:00.000000",
"confirm_type": 0
}
Merchant’s request and callback have to be signed to verify sent data. To generate the signature all sent parameters from the payload are included in the order they were sent. The parameter signature should be excluded, of course, and added to the payload after generating.
Note: to generate a correct signature you need a secretKey received with other credentials.
function calculateSignature(array $data, string $secretKey, string $currentParamPrefix = '', int $depth = 16, int $currentRecursionLevel = 0 ): string
{
if ($currentRecursionLevel >= $depth) {
throw new Exception('Recursion level exceeded');
}
$stringForSignature = '';
foreach ($data as $key => $value) {
if (is_array($value)) {
$stringForSignature .= calculateSignature(
$value,
$secretKey,
"$currentParamPrefix$key.",
$depth,
$currentRecursionLevel + 1
);
} else if ($key !== 'signature') {
$stringForSignature .= "$currentParamPrefix$key" . $value;
}
}
if ($currentRecursionLevel == 0) {
return strtolower(hash_hmac('sha512', $stringForSignature, $secretKey));
} else {
return $StringForSignature;
}
}
$postData = [
'merchant_id' => 'fffed61be9780b97c5e4c65e4e07bb6b',
'provider_id' => 10,
'client_id' => '254000000000',
'country' => 'KE',
'order_id' => 'order_3444298767545',
'amount' => 1000,
'currency' => 'KES',
'callback_url' => 'https://my.callback.url'
];
$secretKey = "cf11635572c1e8d77297207152dc0791ad91f22b32d23c758ce3ba2637202ad8f7290ba41f2243cccf32edde1dfb8bf0f5dea62525309e293b3adb2c76eed6a5";
$signature = calculateSignature($postData, $secretKey);
$postData['signature'] = $signature;
Examples in other languages are available on request
| Code | Name | Description |
|---|---|---|
| -1 | undefined | Operation status is undefined (for example in an error situation) |
| 0 | initiated | Operation is initiated |
| 1 | in progress | Operation is in progress |
| 2 | success | Operation is successful |
| 3 | failed | Operation is failed |
| 4 | cancelled | Operation is cancelled |
Depending on the type of request you may see the following code
| Code | Operation |
|---|---|
| 16 | payment_b2c |
| 17 | payment_c2b |
| Code | Name | Locations |
|---|---|---|
| CDF | Congolese Franc | DRC |
| KES | Kenyan shilling | the Republic of Kenya |
| GMD | Gambian Dalasi | Gambia |
| MWK | Malawian kwacha | Malawi |
| NGN | Naira | Nigeria |
| RWF | Rwandan franc | Rwanda |
| TZS | Tanzanian shilling | Tanzania |
| UGX | Ugandan shilling | Uganda |
| XOF | CFA franc BCEAO | Benin, Burkina Faso, Ivory Coast, Guinea-Bissau, Mali, Niger, Senegal, Togo |
| ZMW | Zambian Kwacha | Zambia |
| EGP | Egyptian pound | Egypt |
Responses for confirmation requests have the same format as original operation responses.
Transaction status is sent via callback because it needs a confirmation by client done asynchronously. Usually the callback should be sent in 2-3 minutes maximum. In case of missing callback there is a way to get the transaction status using API method status. It needs the order ID as an parameter and returns a status of the performed transaction.
Payment gateway considers the Merchant system response as successful if HTTP 200 was received.
| Provider ID | Provider Name | Notes |
|---|---|---|
| MOOV | ||
| 9210 | MTN |
2290000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 9210 | * |
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 9210 | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9210 | XOF 100.00 | XOF 100.00 | XOF 1'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9209 | Orange | |
| Moov |
22600000000 - This is the format of the phone number you have to send in the payment requests.
*144*4*6*montant#| Provider_id | No Extra Required | customer_email | customer_name | return_url | otp |
|---|---|---|---|---|---|
| 9209 | * |
Example Request:
{
"merchant_id": "your merchant id",
"customer_id": "2250705145655",
"order_id": "test_161225_01_1",
"amount": "1100",
"currency": "XOF",
"country": "BF",
"callback_url": "your callback url",
"provider_id": "9209",
"signature": "1c594d338bc3f413bd61cb97d697e98ad5772071da533",
"extra": {
"otp": "5647"
},
}
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 9209 | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9209 | XOF 200.00 | XOF 200.00 | XOF 1'000'000.00 |
Note: for 9209 deposits and withdrawals are made in multiples of 5.
| Provider ID | Provider Name | Notes |
|---|---|---|
| 802, 9062, 702 | Orange | |
| 803, 9063, 703, 9131 | MTN |
237000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 802, 803 | * | |||
| 702, 703, 9131 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 9062, 9063 | * | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 802,803 | * | ||||
| 702, 703, 9131 | * | * | |||
| 9062, 9063 | * | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9062, 9063, 802, 803 | XAF 500.00 | XAF 500.00 | XAF 500'000.00 |
| 702, 703, 9131 | XAF 100.00 | XAF 100.00 | XAF 10'000.00 (C2B) XAF 1'000'000.00 (B2C) |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2197 | Orange | Client's phone should start from 0: 0800000000 |
| 2198 | Airtel | Client's phone shouldn't start from 0: 999000000 |
| 2196 | Vodacom | 243000000000 - This is the format of the phone number sent in the request |
| 2199 | Africel | Client's phone should start from 0: 0900000000 |
The flow is standard, no need to pass extra parameters
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2196, 2197, 2198, 2199 | CDF 500.00 | CDF 500.00 | CDF 1'500'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9227 | WavePGT GMB | Check provider id with your manager |
For 9227
C2B
B2C
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9227 | GMD 10.00 | GMD 10.00 | GMD No Limit |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2303, 2333, 699, 805, 9196, 2430 | MTN | Check provider id with your manager |
| 2304, 2334, 806, 9197 | Orange | Check provider id with your manager |
| 2305, 2335, 804, 9198 | Moov | Check provider id with your manager |
| 2306, 2336, 9199, 2431 | Wave | Check provider id with your manager |
2250000000000 - This is the format of the phone number you have to send in the payment requests.
For B2C payments, you should send a customer full name in the payment requests. Parameter extra->customer_name. Please see the example in the API Methods section.
C2B
Example of a status request:
{
"merchant_id":"cdeffe6210c7fdc7402c13b215455bd8ddec02da0c",
"order_id":"55584tty848rt",
"customer_id":"2250768000000",
"extra":{
"otp":"7374"
},
"signature":"d7d6d76bd12bfd24dytu6u6c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 9196, 9198, 2430 | * | |||
| 2303, 2305, 2333, 2335, 699, 804, 805 | * | * |
#144*82#| Provider_id | No Extra Required | customer_email | customer_name | return_url | otp |
|---|---|---|---|---|---|
| 9197 | * |
Example Request:
{
"merchant_id": "your merchant id",
"customer_id": "2250705145655",
"order_id": "test_161225_01_1",
"amount": "1100",
"currency": "XOF",
"country": "BF",
"callback_url": "your callback url",
"provider_id": "9197",
"signature": "1c594d338bc3f413bd61cb97d697e98ad5772071da533",
"extra": {
"otp": "5647"
},
}
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 9199, 2336 | * | * | |||
| 2431 | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 2304, 2306, 2334 | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 9196, 9198, 2430, 9197, 9199, 2431 | * | |||
| 2303, 2305, 2333, 2335, 2304, 2306, 2334, 2336 | * | |||
| 699, 804, 805, 806 | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 804, 805 | XOF 100.00 | XOF 500.00 | XOF 2'000'000.00 |
| 699 | XOF 10.00 | XOF 10.00 | XOF 1'000'000.00 |
| 2336 | XOF 5.00 | XOF 1.00 | XOF 550'000.00 |
| 806 | XOF 300.00 | XOF 500.00 | XOF 2'000'000.00 |
| 2430, 2431 | XOF 1.00 | XOF 1.00 | XOF no limit |
| 9196, 9197, 9198, 9199 | XOF 200.00 | XOF 200.00 | XOF 1'000'000.00 |
Note: for 9196, 9197, 9198, 9199 deposits and withdrawals are made in multiples of 5.
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2087 | Airtel | |
| 2088 | TNM |
265000000000 - This is the format of the phone number you have to send in the payment requests.
For C2B payments, the flow is standard, no need to pass extra parameters For B2C payments, you should send a customer full name in the payment requests. Parameter extra->customer_name. Please see the example in the API Methods section.
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2087, 2088 | MWK 50.00 | MWK 50.00 | MWK 750'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9015 | Wire Transfer |
0000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 9015 | * | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | customer_doc_number | customer_doc_type | return_url |
|---|---|---|---|---|---|---|
| 9015 | * | * | * | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9015 | MAD 20.00 | MAD 100.00 | MAD 5'000.00 (C2B) MAD 1'000.00 (B2C) |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2311, 706, 9122, 9143, 9231 | BankTransfer | |
| 2312, 9230 | BankTransfer OPay | |
| 707, 9123 | Bank Card |
Bank Transfer / Pay Attitude / OPay / Palmpay / Card payment C2B (deposit) scenario:
OPay payment B2C (withdrawal) scenario:
Bank Transfer B2C (withdrawal) scenario:
B2C Bank Transfer request example:
{
"merchant_id":"e0fecd91fcb24f348048193b3fb34875ba3722b4",
"order_id":"0900000001",
"customer_id":"16280954971628095497",
"amount":"100.00",
"currency":"NGN",
"provider_id":5026,
"extra":{
"customer_name":"Name Lastname",
"customer_email": "Name@domen.com",
"bank_code":"000001"
},
"signature":"d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}
In the synchronized response, you will get the bank payment details that need to be share to the user. This is listed in the "extra" part
{
"order_id": "90900000001",
"transaction_id": "",
"transaction_ref": "",
"status": 1,
"result": {
"code": 0,
"message": "OK"
},
"provider_result": {
"code": -8888,
"message": ""
},
"service_id": 1,
"service_version": "1.03/1.14|1.0/2.0|1.0/1.0|1.01/1.0|1.01/2.0||1.02/1.27",
"service_date_time": "2024-04-20 01:08:42.797957",
"extra": {
"transfer_amount": 100,
"account_name": "Test Ltd / Test Limited",
"account_number": "4000000000",
"bank_name": "Premium Trust Bank"
},
"confirm_type": 0
}
For other provider_id in the case of bank transfers, a payment page implementation is required
C2B:
B2C:
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9143 | NGN 1.00 | NGN 1.00 | NGN no limit (C2B) NGN 100'000'000.00 (B2C) |
| 707, 9123 | NGN 100.00 | NGN -.00 | NGN 200'000.00 |
| 706, 9122, 9231, 9230 | NGN 100.00 | NGN 100.00 | NGN 10'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2313 | Vodafone | |
| 2314 | Orange | |
| 2315 | Etisalat | |
| 873 | M-Wallet |
22898200000 - This is the format of the phone number you have to send in the payment requests.
C2B
B2C
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 424, 425, 426 | EGP 350.00 | EGP 350.00 | EGP 15'000.00 |
| 873 | EGP 15.00 | EGP 100.00 | EGP 60'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2354, 2398, 9203 | Orange Money | |
| 2355, 2401, 9205 | Wave | |
| 2356, 2399, 9204 | Free Money | |
| 2400 | E Money |
221000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2398, 2399, 2400 | * | |||
| 2354, 2356 | * | * | ||
| 9204 | * |
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 2401, 2335 | * | * | |||
| 9205 | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2398, 2399, 2400, 2354, 2356, 2401, 2335 | * | |||
| 9203, 9204, 9205 | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9203, 9204, 9205 | XOF 200.00 | XOF 200.00 | XOF 1'000'000.00 |
| 2355 | XOF 100.00 | XOF 100.00 | XOF 500'000.00 |
Note: for 9203, 9204, 9205 deposits and withdrawals are made in multiples of 5.
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2353 | Bank Transfer |
27000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2353 | ZAR -.00 | ZAR -.00 | ZAR -.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2361 | Orange Money |
232000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2361 | SLE -.00 | SLE -.00 | SLE -.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2351 | Airtel | |
| 2352 | MTN |
250000000000 - This is the format of the phone number you have to send in the payment requests.
For C2B payments you should send a customer full name and customer email in the payment requests. Parameters extra->customer_name and extra->customer_email. Please see the example in the API Methods section.
You can get the link in the parameter extra->customer_redirect in the response of the status method. After receiving the link, you should redirect the customer to this page to confirm the transaction using OTP code.
For B2C payments you should send a customer full name in the payment requests. Parameter extra->customer_name. Please see the example in the API Methods section.
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 2351, 2352 | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2351, 2352 | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2351, 2352 | RWF 100.00 | RWF 100.00 | RWF 10'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2109, 2111, 2308, 2323, 2339, 2403, 2507 | YAS (exTigo) | Check provider id with your manager |
| 2110, 2112, 2307, 2322, 2340, 2506 | Vodacom | Check provider id with your manager |
| 2108, 2113, 2309, 2338, 2404, 2508 | HaloPesa | Check provider id with your manager |
| 2107, 2114, 2310, 2337, 2402, 2509 | Airtel | Check provider id with your manager |
| 2405 | Bank Transfer | Check provider id with your manager |
255000000000 - This is the format of the phone number you have to send in the payment requests.
For C2B payments, you should send a customer full name and customer email in the payment requests. Parameters extra->customer_name and extra->customer_email. Please see the example in the API Methods section.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2337, 2338, 2339, 2340, 2402, 2403, 2404, 2506, 2507, 2508, 2509 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2337, 2338, 2339, 2340, 2506, 2507, 2508, 2509 | * | * | ||
| 2402, 2403, 2404 | * |
You should set account number as customer_id and send customer full name and bank BIC("Bank Identifier Code", ask your bank) in the payment request. Parameters extra->customer_name and extra->bic. Please see the example in the API Methods section.
You should send a customer document type and document number in the payment requests. Parameters extra->customer_doc_type and extra->customer_doc_number. The customer_doc_type parameter can have one of the following values: * intl_passport - for International Passport * driving_license - for Driving License * national_id - for National ID
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2337, 2338, 2344, 2345 | TZS 100.00 | TZS 100.00 | TZS 3'000'000.00 |
| 2310, 2309, 2308, 2307 | TZS 1000.00 | TZS 7500.00 (2000 TZS for 391-394) | TZS 3'000'000.00 |
| 2337, 2338, 2339, 2340, 2405 | TZS 1000.00 | TZS 7500.00 | TZS 3'000'000.00 |
| 2402, 2403, 2404, 2506, 2507, 2508, 2509 | TZS 1000.00 | TZS 1000.00 | TZS 5'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2357, 2358 | MOOV Money | |
| 2359, 2360 | TOGOCOM |
228000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2357, 2358, 2359 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2357, 2358, 2359 | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit | Maximum per day |
|---|---|---|---|---|
| 2359 | XOF 100.00 | XOF 100.00 | XOF 1'000'000.00 (C2B) XOF 500'000.00 (B2C) | XOF 200k / 2m with KYC |
| 2358 | XOF 5.00 | XOF 5.00 | XOF 1'000'000.00 | XOF 200k / 2m with KYC |
| 2357 | XOF 200.00 | XOF 500.00 | XOF 1'000'000.00 | XOF 200k / 2m with KYC |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2105, 808 | Airtel | |
| 2106, 809 | MTN |
256709000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 808, 809 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 2105, 2106 | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 808, 809, 2105, 2106 | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 808, 809 | UGX 500.00 | UGX 500.00 | UGX 5'000'000.00 |
| 2105, 2106 | UGX 500.00 | UGX 900.00 | UGX 4'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 2118, 2332, 2370, 2505 | Airtel | |
| 2119, 2371, 2504 | MTN | |
| 2372 | Zamtel |
260000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2370, 2371, 2372, 2119, 2118, 2332, 2504, 2505 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2370, 2371, 2372, 2119, 2118, 2332, 2504, 2505 | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 2370, 2371, 2372, 2119, 2118, 2332, 2504, 2505 | ZMW 1.00 | ZMW 1.00 | ZMW 20'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 701, 2391 | Airtel | |
| 700, 9125 | MTN | |
| 2390, 2392, 2393, 798 | Mpesa |
254000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2390, 2391, 2392, 2393, 700, 701, 798, 9125 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 2390, 2391, 2392, 2393, 700, 701, 798, 9125 | * | * |
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 798, 2393 | KES 10.00 | KES 80.00 | KES 250'000.00 |
| 700, 701, 9125 | KES 10.00 | KES 10.00 | KES 10'000.00 (C2B) KES 8'500.00 (B2C) |
| 2390, 2391, 2392 | KES 1.00 | KES 250.00 | KES 150'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 705, 981, 9255 | Airtel | |
| 704, 980, 9127, 9252, 2502 | MTN | |
| 982, 9253, 2503 | Vodafone | |
| 9254 | Bank Transfer |
233000000000 - This is the format of the phone number you have to send in the payment requests.
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 704, 9127, 980, 981, 982, 9252, 9253, 9255, 2502, 2503 | * | * |
| Provider_id | No Extra Required | customer_email | customer_name | return_url |
|---|---|---|---|---|
| 704, 9127, 980, 981, 982, 9252, 9253, 9255, 2502, 2503 | * | * |
Example request:
{
"merchant_id": "cdeffe87da339a801a07cee670b40ff303b92065",
"customer_id": "2030050920719", // Bank account number
"order_id": "test_b2c_9254_gha_ghs_200126_01_1",
"amount": "1",
"currency": "GHS",
"country": "GH",
"provider_id": "9254",
"callback_url": " ", // Your callback URL
"extra": {
"customer_name": "John Doe",
"bank_code": "FBL"
}
}
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9252, 9253, 9255, 9254 | GHS 1.00 | GHS 1.00 | GHS 20'000.00 |
| 981, 982 | GHS 100.00 | GHS 10.00 | GHS 25'000.00 |
| 980 | GHS 1.00 | GHS 1.00 | GHS 2'000.00 |
| 704, 9127 | GHS 10.00 | GHS 10.00 | GHS 1'000.00 |
| 2502, 2503 | GHS 10.00 | GHS 10.00 | GHS No limit |
| public_id required | string Example: f54ec96649be11ebb3780242ac130002 Merchant public ID |
Parameters to initiate a customer to the merchant payment
| merchant_id required | string (merchantIdDef) Unique Merchant ID received during the merchant registration |
| customer_id required | string (customerIdDef) Customer ID (usually mobile phone number of the customer) |
| order_id required | string (orderIdDef) The unique value is generated by the transaction initiator for each Operation. Max length is 128 symbols. Allowed symbols: [a-z], [A-Z], [0-9], “_” (underscore character), “-” (hyphen), “:” (colon), “.” (dot). For example, GUID or TIMESTAMP can be used as an order_id. This parameter provides API idempotency. It means that requests with identical nonce from the same transaction initiator will have identical responses and The corresponding operation won’t be repeated. |
| amount required | string Amount to pay, should be in format with two digits after point |
| currency required | string (currencyDef) Currency code in ISO 4217 format from the list of availabe currencies |
| country | |
| callback_url | string URL to notify the merchant via callback. Recommended |
| provider_id required | |
| signature required | string (signatureDef) Merchant’s request and callback have to be signed to verify sent data. To generate the signature all sent parameters are included in the order they were sent. The parameter signature should be excluded, of course. Example can be found here |
{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "customer_id": "0900000001",
- "order_id": "16280954971628095497",
- "amount": "100.00",
- "currency": "KES",
- "country": "KE",
- "provider_id": 14,
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "732007046722",
- "transaction_ref": "MP.33234.342.CP33",
- "status": 2,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": 11.1,
- "service_date_time": "2020-11-25 10:08:32.832969"
}{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "operation_type": 17,
- "customer_id": "0900000001",
- "amount": 100,
- "order_id": "16280954971628095497",
- "transaction_id": "1234567",
- "transaction_ref": "QR555RQ",
- "status": 2,
- "provider_id": 14,
- "destination_id": "",
- "result": {
- "code": 0,
- "message": "OK"
}, - "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}Cashless payment from the merchant to the customer. If the confirm_type response parameter is a non-zero merchant, send the second payment_b2c request with confirmation data according to the section Confirmation Types.
| public_id required | string Example: f54ec96649be11ebb3780242ac130002 Merchant public ID |
Parameters to initiate the merchant to the customer payment
| merchant_id required | string (merchantIdDef) Unique Merchant ID received during the merchant registration |
| customer_id required | string (customerIdDef) Customer ID (usually mobile phone number of the customer) |
| order_id required | string (orderIdDef) The unique value is generated by the transaction initiator for each Operation. Max length is 128 symbols. Allowed symbols: [a-z], [A-Z], [0-9], “_” (underscore character), “-” (hyphen), “:” (colon), “.” (dot). For example, GUID or TIMESTAMP can be used as an order_id. This parameter provides API idempotency. It means that requests with identical nonce from the same transaction initiator will have identical responses and The corresponding operation won’t be repeated. |
| amount required | string Amount to pay, with two digits after point |
| currency required | string (currencyDef) Currency code in ISO 4217 format from the list of availabe currencies |
| country | |
| callback_url | string URL to notify the merchant via callback |
| provider_id required | |
| signature required | string (signatureDef) Merchant’s request and callback have to be signed to verify sent data. To generate the signature all sent parameters are included in the order they were sent. The parameter signature should be excluded, of course. Example can be found here |
{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "customer_id": "0900000001",
- "order_id": "16280954971628095497",
- "amount": "100.00",
- "currency": "KES",
- "country": "KE",
- "provider_id": 14,
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "532007056722",
- "transaction_ref": "",
- "status": 2,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 11,
- "service_version": 11.1,
- "service_date_time": "2020-11-25 10:08:32.832969",
- "confirm_type": 0
}| public_id required | string Example: f54ec96649be11ebb3780242ac130002 Merchant public ID |
Get the status of the performed transaction
| merchant_id required | string (merchantIdDef) Unique Merchant ID received during the merchant registration |
| order_id required | string (orderIdDef) The unique value is generated by the transaction initiator for each Operation. Max length is 128 symbols. Allowed symbols: [a-z], [A-Z], [0-9], “_” (underscore character), “-” (hyphen), “:” (colon), “.” (dot). For example, GUID or TIMESTAMP can be used as an order_id. This parameter provides API idempotency. It means that requests with identical nonce from the same transaction initiator will have identical responses and The corresponding operation won’t be repeated. |
| signature required | string (signatureDef) Merchant’s request and callback have to be signed to verify sent data. To generate the signature all sent parameters are included in the order they were sent. The parameter signature should be excluded, of course. Example can be found here |
{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "order_id": "16280954971628095497",
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "732007046722",
- "transaction_ref": "MP.33234.342.CP33",
- "status": 2,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": 11.1,
- "service_date_time": "2020-11-25 10:08:32.832969"
}