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.
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' => '080000000',
'country' => 'KE',
'order_id' => 'order_3444298767545',
'amount' => 1000,
'currency' => 'CDF',
'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 |
|---|---|---|
| ARG | Argentine Peso | Republic of Argentine |
| BRL | Brazilian Real | Federative Republic of Brazil |
| CLP | Chilean Peso | Republic of Chile |
| COL | Colombian Peso | Republic of Colombia |
| EGP | Egyptian Pound | Arab Republic of Egypt |
Responses for confirmation requests have the same format as original operation responses.
C2b 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 |
|---|---|---|
| 14 | Simulator | For testing purposes |
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
}
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9985 | CVU | C2B only |
| Provider_id | customer_email | customer_name | customer_doc_number | customer_doc_type |
|---|---|---|---|---|
| 9985 | * | * | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9985 | ARS 1000.00 | ARS - | ARS 1'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9405 | BankTransfer | Check provider id with your manager |
| 9954 | PIX | Check provider id with your manager |
5500000000000 - 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 |
|---|---|---|---|---|---|
| 9954 | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | No Extra Required | customer_email | customer_name | customer_ip | return_url |
|---|---|---|---|---|---|
| 9954 | * |
"extra":
{
"qr": "000201010211212.pix2561qrcode.avivpay.com.br/v1/1c1231232"
},
| Provider_id | No Extra Required | customer_email | customer_name | return_url | customer_doc_number |
|---|---|---|---|---|---|
| 9954 | * | * |
C2B for 9405
customer_name
customer_email
customer_doc_type (Example: "customer_doc_type": "CPF")
customer_doc_number (Should be customer CPF number)
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
B2C for 9405
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9405 | BRL 5.00 | BRL 5.00 | BRL C2B 4'999.00 / B2C 15'000.00 |
| 9954 | BRL 10.00 | BRL 10.00 | BRL C2B 15'000.00 / B2C 5'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9965 | Webpay | Check provider id with your manager |
| 9964 | Khipu | Check provider id with your manager |
| 9963 | Mach | Check provider id with your manager |
| 9962 | Pago | Check provider id with your manager |
| 9961 | Bank Transfer | Check provider id with your manager |
| Provider_id | No Extra Required | customer_email | customer_name | customer_doc_type | return_url |
|---|---|---|---|---|---|
| 9965, 9964, 9963, 9962 | * | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | bank_code | customer_acc_number | customer_doc_number | customer_name | customer_email | customer_acc_type | customer_doc_type |
|---|---|---|---|---|---|---|---|
| 9961 | * | * | * | * | * | * | * |
Regardless of the extra parameters used for these methods, we strongly recommend specifying at least: customer_email, customer_name to unify the solution and the ability to use SR
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9965, 9964, 9963, 9962 | CLP 1000.00 | - | CLP 2'000'000.00 |
| 9961 | - | CLP 1000.00 | CLP 2'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 9988 | Nequi | |
| 10282 | Bank Transfer |
3000000000 - 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_doc_type | return_url | customer_acc_number | customer_doc_number |
|---|---|---|---|---|---|---|---|
| 9988 | * | * | * | * | * |
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
Customer initiates the withdrawal on Merchant side.
Merchant receives the list of available banks and its codes via get banks API Method
Customer selects on the Merchant’s side the Bank and specifies their recipient’s bank account
Merchant sends B2C request to the platform where customer_id is customer bank account number and sets extra data * bank_code got from get banks API Method response * Extra parameters used:
| Provider_id | bank_code | customer_acc_number | customer_doc_number | customer_name | customer_email | customer_doc_type |
|---|---|---|---|---|---|---|
| 10282 | * | * | * | * | * | * |
Platform transfers funds to the Customer's bank account
Merchant gets a callback (or requests the status) from the platform with the final state of the operation
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 9988 | COP 10000.00 | - | COP 3'000'000.00 |
| 10282 | - | COP 10000.00 | COP 4'000'000.00 |
| Provider ID | Provider Name | Notes |
|---|---|---|
| 10325, 10327 | Vodafone | Check provider id with your manager |
| 10324, 10326 | Orange | Check provider id with your manager |
00000000000 - this is the format of the phone number/account id you have to send in the payment requests.
"extra":
{
"customer_redirect": "https://checkout.provider.com/202511131111MqKRft39377/pay"
},
| Provider_id | c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|---|
| 10324, 10325 | EGP 10.00 | EGP 100.00 | EGP 60'000.00 |
| 10326, 10327 | EGP 500.00 | EGP 5.00 | EGP 60'000.00 |
| 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 | string (countryDef) Country code in ISO 3166-1 alpha-2 format as defined in the payment providers. |
| callback_url | string URL to notify the merchant via callback. Recommended |
| provider_id required | integer (providerDef) Provider ID. Can be one of the option from this list. |
object Extra parameters | |
| 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": "254900000001",
- "order_id": "16280954971628095497",
- "amount": "100.00",
- "currency": "CDF",
- "country": "KE",
- "provider_id": 14,
- "extra": {
- "customer_name": "Name Surname"
}, - "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "732007046722",
- "transaction_ref": "MP.33234.342.CP33",
- "status": 1,
- "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": "254900000001",
- "amount": 100,
- "order_id": "16280954971628095497",
- "transaction_id": "1234567",
- "transaction_ref": "QR555RQ",
- "status": 2,
- "provider_id": 14,
- "destination_id": "",
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.03/1.0|1.0/1.26|1.0/1.0|1.01/1.0|1.01/1.0||1.01/1.27",
- "service_date_time": "2020-11-25 10:08:32.832969",
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}| 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 | string (countryDef) Country code in ISO 3166-1 alpha-2 format as defined in the payment providers. |
| callback_url | string URL to notify the merchant via callback |
| provider_id required | integer (providerDef) Provider ID. Can be one of the option from this list. |
object Extra parameters | |
| 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": "254900000001",
- "order_id": "16280954971628095497",
- "amount": "100.00",
- "currency": "CDF",
- "country": "KE",
- "provider_id": 14,
- "extra": {
- "customer_name": "Name Surname"
}, - "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "732007046722",
- "transaction_ref": "MP.33234.342.CP33",
- "status": 1,
- "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"
}| 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": "532007056722",
- "transaction_ref": "",
- "status": 1,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "extra": {
- "customer_message": "Complete the payment by following the instructions received by USSD"
}, - "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 available banks
| merchant_id required | string (merchantIdDef) Unique Merchant ID received during the merchant registration |
| provider_id required | integer (providerDef) Provider ID. Can be one of the option from this list. |
| 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",
- "provider_id": 14,
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "banks": [
- {
- "code": "000001",
- "name": "OK"
}
], - "result": {
- "code": 0,
- "message": "OK"
}
}