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
{
"referenceNo": "A0000001702",
"originalPartnerReferenceNo": "DIRECT-API-NMS-6giumc6rde",
"transactionStatus": "00",
"transactionStatusDesc": "Success",
"customerNumber": "08123456789",
"accountType": "10",
"destinationAccountNumber": "1234567890",
"destinationAccountName": "Merchant Name",
"amount": {
"value": "10000.00",
"currency": "IDR"
},
"externalStoreId": "STORE-001",
"additionalInfo": {
"trxAmount": "10000.00",
"tips": "0.00"
},
"custName": "John Doe",
"acqName": "Bank ABC",
"issuerName": "Bank XYZ",
"rrn": "000000123456",
"TrxTime": "20250101123059"
}
Parameter Details
| Parameter | Attribute | Type | Description |
|---|---|---|---|
referenceNo |
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 '{
"referenceNo": "A0000001702",
"originalPartnerReferenceNo": "ORD-12345",
"transactionStatus": "00",
"amount": {
"value": "50000.00",
"currency": "IDR"
},
"custName": "Budi Santoso",
"acqName": "Manjo",
"issuerName": "Bank BCA",
"rrn": "123456789012",
"TrxTime": "20250115170111",
"additionalInfo": {
"trxAmount": "50000.00",
"tips": "0.00"
}
}'
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).