API Payment Notification

Overview
Service to send a notification from Manjo to the Merchant system regarding the payment status of a transaction.
Direction: Manjo to Merchant
Version: 1.0
Service Code: 52
HTTP Method: POST
Path: ../v1.0/qr/qr-mpm-notify
Request Structure
HTTP Headers
| Field | Attribute | Type | Description | Example |
|---|---|---|---|---|
Content-Type |
M | String | Media type of resource | application/json |
Authorization |
C | String | Access token with Bearer format | Bearer eyJhbGciOi... |
X-TIMESTAMP |
M | String | Client's local timestamp (yyyy-MM-ddTHH:mm:ssTZD) | 2020-01-15T17:01:11+07:00 |
X-SIGNATURE |
M | String | HMAC_SHA512 signature using clientSecret | 85be817c55b2c13... |
ORIGIN |
O | String | Merchant domain | www.hostname.com |
X-IP-ADDRESS |
M | String | IP Address of the sender | 172.24.281.24 |
X-PARTNER-ID |
M | String(36) | Unique ID for a partner | 821508239190406... |
X-EXTERNAL-ID |
M | String(36) | Unique reference number per day | 418075935899... |
CHANNEL-ID |
M | String(5) | Device identification (Use "05") | 95221 |
X-SIGNATURE Formula:
stringToSign = HTTPMethod + ":" + EndpointUrl + ":" + AccessToken + ":" + Lowercase(HexEncode(SHA256(minify(RequestBody)))) + ":" + TimeStamp
signature = HMAC_SHA512(clientSecret, stringToSign)
Request Body
{
"originalReferenceNo": "A0000021383",
"originalPartnerReferenceNo": "DIRECT-API-NMS-dt5ykh4sae",
"latestTransactionStatus": "06",
"transactionStatusDesc": "SUCCESS",
"customerNumber": "9360082112345678919",
"accountType": "UNSPECIFIED",
"destinationNumber": "9360085801764127112",
"destinationAccountName": "AYOBORONG",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"sessionId": "E36933",
"bankCode": "93600821",
"externalStoreId": "427",
"additionalInfo": {
"acqName": "manjo",
"issuerName": "Midazpay",
"custName": "TES ",
"tips": "0.00",
"merchantCode": "MT60169117",
"trxTime": "2026-01-27T13:13:54+07:00",
"amountTrx": "10000.00",
"rrn": "1l62d1b01796"
}
}
Parameter Details
| Parameter | Attribute | Type | Description |
|---|---|---|---|
originalReferenceNo |
M | String(64) | Transaction identifier on service provider system |
originalPartnerReferenceNo |
M | String(64) | Transaction identifier on merchant system (partner reference) |
transactionStatus |
M | String(2) | Status of transaction code. 00 = Success 03 = Paid 04 = Pending 05 = Refunded 06 = Cancelled 01 = Failed 02 = Not Found |
transactionStatusDesc |
O | String(100) | Description status transaction |
customerNumber |
O | String(64) | Customer Account Number |
accountType |
O | String(2) | Type of customer account (saving, current/giro, credit, wallet, unspecified) |
destinationAccountNumber |
O | String(25) | Destination account number |
destinationAccountName |
O | String(25) | Destination account name |
amount |
O | Object | Amount Object |
amount.value |
M | String(16,2) | Net amount of transaction (2 decimal digits) |
amount.currency |
M | String(3) | Currency (ISO4217) |
externalStoreId |
O | String(25) | External Store ID |
additionalInfo |
O | Object | Additional Information Object |
additionalInfo.trxAmount |
M | String(16,2) | Net amount of the transaction (2 decimal digits) |
additionalInfo.tips |
M | String(16,2) | Tips amount (2 decimal digits) |
custName |
M | String(36) | Customer/Issuer Name |
acqName |
M | String(36) | Name Acquirer (Manjo) |
issuerName |
M | String(25) | Issuer Name |
rrn |
M | String(25) | Retrieval Reference Number |
TrxTime |
M | String(16) | Transaction date time (yyyyMMddHHmmss) |
Error Codes
| HTTP Code | Service Code | Case Code | Message | Category | Description |
|---|---|---|---|---|---|
| 200 | 52 | 00 | Success | Successful | Success |
| 400 | 52 | 01 | Invalid Field Format {field name} | Message | Invalid format |
| 400 | 52 | 02 | Invalid Mandatory Field {field name} | Message | Missing or invalid format of mandatory field headers or body |
| 401 | 52 | 00 | Unauthorized {reason} | System | General unauthorized error. Possible reasons: invalid signature, invalid client key |
| 401 | 52 | 01 | Invalid token | System | Token found in request is invalid (Access Token Not Exist, Access Token Expiry) |
| 409 | 52 | 00 | Conflict | System | Cannot use same X-EXTERNAL-ID in same day |
Implementation Examples
Example Request (cURL)
curl -X POST \
'https://api.manjo.com/v1.0/qr/qr-mpm-notify' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'X-TIMESTAMP: 2025-01-15T17:01:11+07:00' \
-H 'X-SIGNATURE: <CALCULATED_SIGNATURE>' \
-H 'X-PARTNER-ID: 821508239190...' \
-H 'X-EXTERNAL-ID: 418075935899...' \
-H 'CHANNEL-ID: 95221' \
-d '{
"originalReferenceNo": "A0000021383",
"originalPartnerReferenceNo": "DIRECT-API-NMS-dt5ykh4sae",
"latestTransactionStatus": "06",
"transactionStatusDesc": "SUCCESS",
"customerNumber": "9360082112345678919",
"accountType": "UNSPECIFIED",
"destinationNumber": "9360085801764127112",
"destinationAccountName": "AYOBORONG",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"sessionId": "E36933",
"bankCode": "93600821",
"externalStoreId": "427",
"additionalInfo": {
"acqName": "manjo",
"issuerName": "Midazpay",
"custName": "TES ",
"tips": "0.00",
"merchantCode": "MT60169117",
"trxTime": "2026-01-27T13:13:54+07:00",
"amountTrx": "10000.00",
"rrn": "1l62d1b01796"
}
}'
Important Notes
- Response Code Structure:
httpcode(3)+servicecode(2)+casecode(2). - Date Format: Timestamps in headers use ISO 8601 (
yyyy-MM-ddTHH:mm:ssTZD), whileTrxTimein body usesyyyyMMddHHmmss. - Currency: Amounts for IDR must include 2 decimal places (e.g.,
10000.00).