Callback Notifications
After a successful payment in the Bank App, the platform sends a server-to-server notification to your Callback URL. The payload contains the payment outcome and attributes required for fulfillment and reconciliation, along with a signature you must verify.
When it is sent
Trigger: after successful payment execution.
Primary signal: use the callback as the source of truth for order fulfillment.
If a callback is delayed or rejected by your server, you may cross-check with
GET /v2/rtp/{id}
.
A notification is considered successfully received only if your server responds with HTTP 200 OK.
Notification structure
Content-Type: application/json
{
"result": {
"rtpId": "string (GUID)",
"rtpStatus": "Accepted",
"orderId": "string",
"payId": "string (GUID)",
"amount": 0,
"commission": 0,
"currency": "MDL",
"payerName": "string",
"payerIban": "string",
"executedAt": "YYYY-MM-DDThh:mm:ss±hh:mm"
},
"signature": "string (Base64)"
}
Fields
result
object
Wrapper for notification data.
result.rtpId
string (GUID)
RTP unique identifier.
result.rtpStatus
enum
Notification status. Possible values: Accepted.
result.orderId
string
Merchant order identifier (if provided at create).
result.payId
string (GUID)
Unique payment identifier.
result.amount
number (decimal)
Payment amount.
result.commission
number (decimal)
Payment commission.
result.currency
string (ISO 4217)
Payment currency. Possible values: MDL
.
result.payerName
string
Payer abbreviated name (e.g., “John D.”).
result.payerIban
string
Payer IBAN.
result.executedAt
string (ISO 8601-1:2019)
Payment execution timestamp.
signature
string (Base64)
Validation signature for integrity and authenticity.
Example notification
{
"result": {
"rtpId": "123e4567-e89b-12d3-a456-426614174000",
"rtpStatus": "Accepted",
"orderId": "123",
"payId": "c56a4180-65aa-42ec-a945-5fd21dec0538",
"amount": 100.00,
"commission": 1.00,
"currency": "MDL",
"payerName": "John D.",
"payerIban": "MD24AG000225100014156789",
"executedAt": "2029-10-22T10:32:28+03:00"
},
"signature": "r4KwwIUXQGHhcEM7C4um8o9rSrGEriTRcYQuBbmjEec="
}
Signature validation
Merchants receive a Signature Key (in maibmerchants project settings). Validate every callback as follows:
Take all fields from the
result
object (do not include the top-levelsignature
).Exclude any field that is
null
or an empty string.Format
amount
andcommission
with exactly two decimals (e.g.,0.50
,2.31
).Sort the remaining field names alphabetically (case-insensitive).
Concatenate the corresponding field values using
:
as a separator, in the sorted order.Append
:
and the Signature Key to the end of the string.Compute SHA-256 over the resulting string (binary).
Encode the hash with Base64 → this must equal the incoming
signature
.
If the calculated signature does not match the received
signature
, do not fulfill the order and respond with a non-200 status to allow redelivery.
Last updated