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.
Important: all Mobile Money C2B/B2C payments must be processed only with verified phone numbers.
Before proceeding with the request, please confirm that the phone number:
This requirement is essential for minimizing fraud risk.
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, 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,
'customer_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 initiated |
| 1 | in progress | Operation is in progress |
| 2 | success | Operation is successful |
| 3 | failed | Operation failed |
| 4 | cancelled | Operation cancelled |
Please note that it is necessary to assign the final transaction status only based on this parameter, the final statuses are 2, 3, 4 for the payment system (mobile money, card and bank transfers)
Depending on the type of request you may see the following code
| Code | Operation |
|---|---|
| 16 | payment_b2c |
| 17 | payment_c2b |
| Code | Name | Note |
|---|---|---|
| BIF | Burundian franc | The Republic of Burundi, betting and non-betting merchants |
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.
In the case of POS terminals usage Merchant tech system receives callbacks after every successful operation performed on POS. The merchant_id parameter contains a unique identifier of the POS on which the operation was performed. The operation_type parameter contains a type of performed operation. So operations are initiated on POS terminals and information about successful ones is sent to the Merchant tech system with callbacks to configured URL.
You can route requests via "method_id" as an alternative to "provider_id" for more flexible routing. This feature is configured separately in agreement with technical support. Please note, In case of using "method_id" the "country" parameter is mandatory
| ID | Method |
|---|---|
| 7 | Lumicash |
| 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 |
|---|---|---|
| 28 | Lumicash | Check provider id with your manager |
25700000000 - This is the format of the phone number you have to send in the payment requests.
Client-Side Transaction Flow
Une demande d’approbation de transaction a été initiée. Pour la finaliser, composez *163# et sélectionnez l’option 2 dans les 4 prochaines minutes. La transaction sera effectuée avec succès uniquement après votre approbation.
| c2b minimum | b2c minimum | Maximum transaction limit |
|---|---|---|
| BIF 1000.00 | BIF 2000.00 | BIF 1'000'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) |
| customer_user_id required | string <= 200 characters Unique customer identifier on the merchant’s side (e.g., internal user ID, CRM ID). |
| 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 | integer (providerDef) Enum: 9 10 11 12 14 15 16 17 19 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": "25700000000",
- "customer_user_id": "user-123456",
- "order_id": "16280954971628095497",
- "amount": "1000.00",
- "currency": "BIF",
- "country": "BI",
- "provider_id": 10,
- "extra": {
- "customer_name": "Name Surname",
- "customer_ip": "203.0.113.45",
- "customer_phone": "25700000000",
- "customer_doc_type": "ID",
- "customer_doc_number": "A123456789"
}, - "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "",
- "transaction_ref": "",
- "status": 1,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.03/1.14|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",
- "confirm_type": 0
}{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "operation_type": 17,
- "customer_id": "25700000000",
- "amount": 100,
- "order_id": "16280954971628095497",
- "transaction_id": "1234567",
- "transaction_ref": "QR555RQ",
- "status": 2,
- "provider_id": 10,
- "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"
}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) |
| customer_user_id required | string <= 200 characters Unique customer identifier on the merchant’s side (e.g., internal user ID, CRM ID). |
| 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 | integer (providerDef) Enum: 9 10 11 12 14 15 16 17 19 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": "25700000000",
- "customer_user_id": "user-123456",
- "order_id": "16280954971628095497",
- "amount": "1000.00",
- "currency": "BIF",
- "country": "BI",
- "provider_id": 10,
- "extra": {
- "customer_name": "Name Surname",
- "customer_ip": "203.0.113.45",
- "customer_phone": "25700000000",
- "customer_doc_type": "ID",
- "customer_doc_number": "A123456789"
}, - "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "C1234567.555.999",
- "transaction_ref": "",
- "status": 2,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.03/1.14|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",
- "confirm_type": 0
}{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "operation_type": 16,
- "customer_id": "25700000000",
- "amount": 100,
- "order_id": "16280954971628095497",
- "transaction_id": "1234567",
- "transaction_ref": "QR555RQ",
- "status": 2,
- "provider_id": 10,
- "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 |
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": "",
- "transaction_ref": "",
- "status": 1,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider_result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.03/1.14|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",
- "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) Enum: 9 10 11 12 14 15 16 17 19 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": 10,
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "banks": [
- {
- "code": "000001",
- "name": "OK"
}
], - "result": {
- "code": 0,
- "message": "OK"
}
}Separate functionality. This section documents the Backoffice API (
bo-api.avadapay.tech) — a different API from the merchant Payment API documented above. It is not part of thepayment_c2b/payment_b2c/statusintegration and uses its own base URL and authentication (OAuth 2.0 Client Credentials, not request signatures).
| Payment API | Backoffice API | |
|---|---|---|
| Base URL | https://api.avadapay.tech |
https://bo-api.avadapay.tech |
| Authentication | Request signature (signature) |
OAuth 2.0 Client Credentials, Authorization: Bearer |
| Credentials | Merchant ID and secret key | Client ID and Client Secret from the Backoffice |
This feature gives Backoffice entities programmatic access to the BO API through the OAuth 2.0 Client Credentials Grant, decoupled from any interactive user session.
The flow has three sequential stages:
client_id / client_secret pair bound to a specific
entity, through the Backoffice UI (see Getting credentials)./oauth/token (see Authentication).Authorization header to call protected
BO API endpoints.The access token's lifetime is 1800 seconds (30 minutes). Once it expires, request a new one using the same credentials.
is_api_user). The roles available to the entity
for API access are listed in the access token under api_user_roles (see section 5.4).403 no_api_user_roles (see
Errors).expires_in) —
regenerating does not immediately revoke tokens already issued.Warning. Regenerating credentials for an entity used by a live integration will break that integration until the consumer updates its stored credentials.
POST /api/v1/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}
The same parameters can be sent as application/json.
curl -X POST 'https://bo-api.avadapay.tech/api/v1/oauth/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id=<CLIENT_ID>&client_secret=<CLIENT_SECRET>'
{
"access_token": "string",
"token_type": "Bearer",
"expires_in": 1800
}
This grant does not issue a refresh token. Once the token expires (expires_in), repeat the
request above with the same client_id and client_secret to get a new one. Re-requesting a
token needs no additional confirmation and can be done as often as needed, within rate limits
(429 when exceeded).
The access token carries an entities claim — an array with a single element, corresponding to
the entity the credentials were issued for:
| Field | Type | Description |
|---|---|---|
entity_type |
string | Entity type |
entity_id |
integer or null | Entity identifier |
roles |
array[string] | Full list of roles assigned to the entity |
api_user_roles |
array[string] | Subset of roles eligible for API access |
The token also carries an auth_method claim set to client_credentials, marking how the token
was obtained.
GET /api/v1/{endpoint}
Authorization: Bearer {ACCESS_TOKEN}
curl -X GET 'https://bo-api.avadapay.tech/api/v1/merchant-accounts?clients[]=<CLIENT>' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
The scope of the request is resolved automatically from the entity carried in the token.
There's no need to pass X-ENTITY-TYPE / X-ENTITY-ID headers.
Requesting data belonging to an entity other than the one in the token is rejected (see Errors).
Send requests only to https://bo-api.avadapay.tech: a token used on another partner's
domain is rejected with 403 entity_domain_mismatch.
| Code | Value | When it occurs |
|---|---|---|
| 200 | — | Request succeeded, within the token's scope |
| 400 | invalid_request |
POST /oauth/token: a required parameter is missing |
| 400 | unsupported_grant_type |
POST /oauth/token: grant_type is not client_credentials |
| 400 | — | Invalid query parameter, or a merchant/branch outside the token's entity. The body carries message (and errors per parameter) instead of error |
| 401 | invalid_client |
POST /oauth/token: unknown Client ID or wrong Client Secret |
| 401 | unauthorized |
The access token is missing, invalid or has expired |
| 403 | no_api_user_roles |
The entity has no role eligible for API access |
| 403 | insufficient_role |
A role is present, but isn't among the roles allowed for the requested endpoint |
| 403 | out_of_entity_scope |
The request falls outside the scope of the entity carried in the token |
| 403 | entity_domain_mismatch |
The token belongs to another partner — use bo-api.avadapay.tech |
| 403 | unknown_host |
The request was sent to an unknown domain |
| 429 | — | Too many requests — retry later |
| 503 | — | Service temporarily unavailable — retry later |
Examples:
{ "error": "out_of_entity_scope" }
{
"message": "The currency field must be an integer.",
"errors": { "currency": ["The currency field must be an integer."] }
}
Access control is enforced at independent levels: the request domain must belong to the
token's partner, a role check (api_user_roles) against the endpoint's requirements, and an
entity-scope check. Passing one check doesn't guarantee passing the others.
Unified endpoint for retrieving merchant balances. Replaces the five separate balance endpoints previously used per entity type. Carries no query logic of its own on the BO API side — the request is proxied to the Balance Service as-is.
GET /api/v1/merchant-accounts
Authorization: Bearer {ACCESS_TOKEN}
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
clients[] |
array[integer] | no | Merchant identifier (client). For merchant_brand and merchant_company entities, omitting this parameter automatically scopes the query to the entity's own client. |
date |
string (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS) |
no | Balance snapshot date. Omitting it returns the current balance. |
branch |
integer | no | Branch identifier. |
currency |
integer | no | Currency numeric code (ISO 4217). |
integration |
integer | no | Provider integration identifier. |
provider_id |
integer | no | Provider ID. |
The scope of the query is determined by the entity type carried in the access token:
entity_type |
Scope resolution |
|---|---|
merchant_brand |
Automatically scoped to its own client, matching entity_id |
merchant_company |
Automatically resolved to a client_id + branch_id pair |
wl_partner |
Automatically scoped to the whitelabel matching entity_id |
wl_branch |
Automatically scoped to its own branch |
{
"accounts": [
{
"country": "KEN",
"country_name": "Kenya",
"currency": 404,
"public_id": "1011104044040000000000XXXXXXXXXXXXXXXXXX",
"total_amount": "1500.00",
"hold_amount": "200.00",
"available_amount": "1300.00",
"client": 3017,
"merchant_name": "Demo Merchant",
"branch": 223,
"payment_method": 1,
"payment_method_name": "M-Pesa",
"provider_id": 9052,
"provider_id_name": "9052-M-Pesa-KEN"
}
]
}
The date field is present in the response root only when the corresponding query parameter was
supplied. Field relationship: available_amount = total_amount − hold_amount.
Note. country carries the short country code; the full name is in the separate
country_name field. provider_id carries the Provider ID (gate), with its name in
provider_id_name; the naming format depends on the specific provider integration.
No parameters (merchant_brand entity):
curl -X GET 'https://bo-api.avadapay.tech/api/v1/merchant-accounts' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
The query is automatically scoped to the entity's own client.
Explicit clients[] and date:
curl -X GET 'https://bo-api.avadapay.tech/api/v1/merchant-accounts?clients[]=1225&date=2026-09-10' \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
Requesting another merchant's data (merchant_brand entity):
curl -X GET 'https://bo-api.avadapay.tech/api/v1/merchant-accounts?clients[]=3024' \
-H 'Authorization: Bearer <ACCESS_TOKEN_FOR_A_DIFFERENT_MERCHANT>'
Response: 400 {"message": "clients do not match current merchant brand."}.
Exchanges a client_id / client_secret pair for a JWT access token
(OAuth 2.0 Client Credentials Grant). The token is valid for expires_in seconds (1800).
No refresh token is issued — request a new token with the same credentials once the
current one expires.
| grant_type required | string Value: "client_credentials" |
| client_id required | string |
| client_secret required | string |
{- "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx.xxxxx",
- "token_type": "Bearer",
- "expires_in": 1800
}Unified endpoint for retrieving merchant balances. Replaces the five entity-specific balance endpoints previously used for each entity type. Carries no balance logic of its own — the request is proxied to the Balance Service as-is.
The scope of the query is resolved automatically from the entity carried in the access token; see the scope resolution table for how each entity type is scoped.
| clients[] | Array of integers Example: clients[]=3017 Merchant identifiers ( |
| date | string Example: date=2026-10-22 Balance snapshot date, |
| branch | integer Branch identifier. |
| currency | integer Example: currency=404 Currency numeric code (ISO 4217), e.g. |
| integration | integer Provider integration identifier. |
| provider_id | integer Provider ID. |
{- "date": "2026-10-22",
- "accounts": [
- {
- "country": "KEN",
- "country_name": "Kenya",
- "currency": 404,
- "public_id": "1011104044040000000000XXXXXXXXXXXXXXXXXX",
- "total_amount": "1500.00",
- "hold_amount": "200.00",
- "available_amount": "1300.00",
- "client": 3017,
- "merchant_name": "Demo Merchant",
- "branch": 223,
- "payment_method": 1,
- "payment_method_name": "M-Pesa",
- "provider_id": 9052,
- "provider_id_name": "9052-M-Pesa-KEN"
}
]
}Merchant sends a request to the API method to create a bulk payment. Also, it is possible to get detailed information about the existing bulk payment, cancel processing of the existing bulk payment. Once the mass payment is initiated, the system will start processing payments for each client from the array in the bulk payment request
| 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 |
| bulk_id required | string Bulk id |
| currency required | string (currencyDef) Currency code in ISO 4217 format from the list of availabe currencies |
required | Array of objects (bulkitemsDef) |
| 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",
- "bulk_id": "0000000001",
- "currency": "BIF",
- "items": [
- {
- "order_id": "16280954971628095497",
- "customer_id": "25700000000",
- "amount": "100.00",
- "country": "BI",
- "provider_id": 10
}
], - "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "bulk_id": "0000000001",
- "status": 0,
- "result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.27|1.01",
- "service_date_time": "2020-11-25 10:08:32.832969"
}| public_id required | string Example: f54ec96649be11ebb3780242ac130002 Merchant public ID |
Get details of bulk payments
| merchant_id required | string (merchantIdDef) Unique Merchant ID received during the merchant registration |
| bulk_id required | string |
| page required | integer |
| page_size required | integer |
| signature | 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",
- "bulk_id": "0000000001",
- "page": 1,
- "page_size": 100,
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "bulk_id": "0000000001",
- "status": 2,
- "total": 3,
- "total_initiated": 0,
- "total_in_progress": 0,
- "total_successed": 3,
- "total_failed": 0,
- "items": [
- {
- "order_id": "16280954971628095497",
- "customer_id": "25700000000",
- "amount": 100,
- "status": 2
}
], - "service_id": 1,
- "service_version": "1.27|1.01",
- "service_date_time": "2020-11-25 10:08:32.832969"
}Note that already executed transactions from the array will not be cancelled on request
| public_id required | string Example: f54ec96649be11ebb3780242ac130002 Merchant public ID |
Cancel processing bulk payments
| merchant_id required | string (merchantIdDef) Unique Merchant ID received during the merchant registration |
| bulk_id required | string |
| signature | 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",
- "bulk_id": "0000000001",
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "bulk_id": "0000000001",
- "status": 4,
- "result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.27|1.01",
- "service_date_time": "2020-11-25 10:08:32.832969"
}Method should be called from the POS terminal or any other Avadapay valid external system for the initiation of the cash top-up operation to the customer account in the merchant system. Merchant gets information about the operation via the message that is sent to a predefined call back URL.
{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "operation_type": 20,
- "customer_id": "25700000000",
- "amount": 100,
- "order_id": "16280954971628095497",
- "transaction_id": "1234567",
- "transaction_ref": "QR555RQ",
- "status": 2,
- "provider_id": 10,
- "destination_id": "",
- "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"
}Method should be called from the POS terminal or any other Avadapay valid external system for the initiation of the cash pay-out operation from the customer account in the merchant system. Note, that such operation requires pre-authorization on the merchant system and it can be done in various ways. In some cases, it is just an OTP confirmation sent to a customer’s phone, but in other cases, pre-allocation of money is also required that shall be done by calling the payment_c2b operation from the customer’s space in the merchant system. In such case, the amount that the customer is willing to withdraw is moved to a temporary account that is hard-locked with this particular customer and will stay there until the method withdrawal is called.
If the confirm_type response parameter is a non-zero merchant, send the second withdrawal 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 | |
| provider_id | string Provider_id |
| callback_url | string callback_url |
| 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": "25700000000",
- "order_id": "16280954971628095497",
- "amount": "100.00",
- "currency": "BIF",
- "country": "BI",
- "provider_id": "1003",
- "signature": "d7d6d76b0e22c6f9d369fa6c24f107053d12bfd24d3b154f2deb6676bf179c123134e1f20879c803be455d81cfe792f00cd8892c26ce7cf5a05beebb9c80843e"
}{- "order_id": "16280954971628095497",
- "transaction_id": "",
- "transaction_ref": "",
- "status": 7,
- "result": {
- "code": 0,
- "message": "OK"
}, - "provider result": {
- "code": 0,
- "message": "OK"
}, - "service_id": 1,
- "service_version": "1.03/1.14|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",
- "confirm_type": 0
}{- "merchant_id": "e0fecd91fcb24f348048193b3fb34875ba3722b4",
- "operation_type": 21,
- "customer_id": "25700000000",
- "amount": 100,
- "order_id": "16280954971628095497",
- "transaction_id": "1234567",
- "transaction_ref": "QR555RQ",
- "status": 2,
- "provider_id": 10,
- "destination_id": "",
- "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"
}