QR MPM Refund Payment

Overview

Service to process refunds for MPM (Merchant Presented Mode) QRIS transactions. Supports both full and partial refunds.

Direction: Merchant to Manjo
Version: 1.0
Service Code: 78 HTTP Method: POST
Path: ../v1.0/qr/qr-mpm-refund


Request Structure

HTTP Headers

Field Attribute Type Description Example
Content-Type M String Media type of resource application/json
Authorization M String Access token with Bearer format Bearer YWFlNTQ4NTEyZTE5ZjZi...
X-TIMESTAMP M String Client's local timestamp (yyyy-MM-ddTHH:mm:ssTZD) 2025-11-27T07:16:37.598+07:00
X-SIGNATURE M String HMAC_SHA512 signature using clientSecret 0347f2a8a9e533530e4fc34d1ab0c78a...
ORIGIN O String Merchant domain www.hostname.com
X-IP-ADDRESS O String Merchant IP address 172.24.281.24
X-PARTNER-ID M String(36) Unique merchant ID EP9613058999
X-EXTERNAL-ID M String(36) Unique reference number per day XTID-08oy4jf326
X-DEVICE-ID O String Device ID 09864ADCASA
CHANNEL-ID M String(5) Device identification 05

X-SIGNATURE Formula:

stringToSign = HTTPMethod + ":" + EndpointUrl + ":" + AccessToken + ":" + Lowercase(HexEncode(SHA256(minify(RequestBody)))) + ":" + TimeStamp
signature = HMAC_SHA512(clientSecret, stringToSign)

Request Body

{
	"merchantId": "EP96130589",
	"externalStoreId": "A0000001086",
	"originalPartnerReferenceNo": "DIRECT-API-NMS-12ajd1mir8",
	"originalReferenceNo": "A0000001703",
	"originalExternalId": "10052019",
	"partnerRefundNo": "MRF-tqktcivp64",
	"refundAmount": {
		"value": "10000.00",
		"currency": "IDR"
	},
	"reason": "Customer complain",
	"additionalInfo": {
		"paymentId": "99"
	}
}

Parameter Details

Parameter Attribute Type Description Example
merchantId M String(64) Unique merchant identifier "EP96130589"
externalStoreId O String(64) External store ID "A0000001086"
originalPartnerReferenceNo M String(64) Original partner reference from QRIS generation "DIRECT-API-NMS-12ajd1mir8"
originalReferenceNo M String(64) Original reference from QRIS generation (Manjo) "A0000001703"
originalExternalId M String Original X-EXTERNAL-ID from QRIS generation "10052019"
partnerRefundNo M String(64) Merchant's unique refund reference number "MRF-tqktcivp64"
refundAmount.value M String(16,2) Refund amount (2 decimals) "10000.00"
refundAmount.currency M String(3) Currency (ISO4217) "IDR"
reason M String(256) Refund reason "Customer complain"
additionalInfo.paymentId M String(2) Payment code (99 for Manjo QRIS) "99"

Response Structure

HTTP Headers Response

Content-Type: application/json
X-TIMESTAMP: 2020-12-23T08:10:18+07:00

Response Body

{
	"responseCode": "2007800",
	"responseMessage": "Successful",
	"originalPartnerReferenceNo": "DIRECT-API-NMS-12ajd1mir8",
	"originalReferenceNo": "A0000001703",
	"originalExternalId": "10052019",
	"refundNo": "RF-70G7-721071-1jac11603005-20251127-37648",
	"partnerRefundNo": "MRF-tqktcivp64",
	"refundAmount": {
		"value": "10000.00",
		"currency": "IDR"
	},
	"refundTime": "2025-11-27T14:16:39.209256321+07:00",
	"additionalInfo": {
		"acqName": "manjo",
		"merchantName": "PRODACTION",
		"mpan": "9360085801751257039",
		"issuerName": "Midazpay",
		"customerName": "JOSS GONDES",
		"cpan": "9360082112345678919",
		"refundMethod": "Partial",
		"refundOrder": 1,
		"rcSwitching": "00",
		"errSwitching": "Success",
		"amountTrx": "50450.00",
		"rrn": "1jac41603007"
	}
}

Response Parameter Details

Parameter Attribute Type Description Example
responseCode M String(7) Response code "2007800"
responseMessage M String(150) Response description "Successful"
originalPartnerReferenceNo M String(64) Echo of original partner reference "DIRECT-API-NMS-12ajd1mir8"
originalReferenceNo M String(64) Echo of original reference number "A0000001703"
originalExternalId M String Echo of original external ID "10052019"
refundNo M String(64) Refund reference from switching "RF-70G7-721071-1jac11603005-20251127-37648"
partnerRefundNo M String(64) Echo of merchant's refund reference "MRF-tqktcivp64"
refundAmount.value M String(16,2) Approved refund amount "10000.00"
refundAmount.currency M String(3) Currency "IDR"
refundTime M String(25) Refund timestamp (ISO 8601) "2025-11-27T14:16:39.209256321+07:00"
additionalInfo.acqName O String(25) Acquirer name "manjo"
additionalInfo.merchantName O String(25) Merchant name "PRODACTION"
additionalInfo.mpan O String(50) Merchant PAN "9360085801751257039"
additionalInfo.issuerName O String(25) Issuer name "Midazpay"
additionalInfo.customerName O String(25) Customer name "JOSS GONDES"
additionalInfo.cpan O String(50) Customer PAN "9360082112345678919"
additionalInfo.refundMethod M String(25) Refund method (Partial/Full) "Partial"
additionalInfo.refundOrder M String(2) Refund sequence number 1
additionalInfo.rcSwitching M String(25) Switching response code "00"
additionalInfo.errSwitching M String(60) Switching error description "Success"
additionalInfo.amountTrx M String(16,2) Original transaction amount "50450.00"
additionalInfo.rrn M String(25) RRN from switching "1jac41603007"

Error Codes

HTTP Code Service Code Case Code Message Category Description
200 78 00 Success Successful Refund successful
202 78 00 Success Request In Progress Transaction still processing
400 78 01 Invalid Field Format {field name} Message Invalid field format
400 78 02 Invalid Mandatory Field {field name} Message Missing/invalid mandatory field
401 78 00 Unauthorized. {reason} System Invalid signature or client key
401 78 01 Invalid token System Invalid/expired access token
404 78 01 Transaction Not Found Business Original transaction not found
404 78 13 Invalid Amount Business Refund amount doesn't match
409 78 00 Conflict System X-EXTERNAL-ID already used today

Response Code Format: httpcode(3) + servicecode(2) + casecode(2)


Implementation Examples

Example Request

curl -X POST \
  'https://api.manjo.com/v1.0/qr/qr-mpm-refund' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YWFlNTQ4NTEyZTE5ZjZi...' \
  -H 'X-TIMESTAMP: 2025-11-27T07:16:37.598+07:00' \
  -H 'X-SIGNATURE: 0347f2a8a9e533530e4fc34d1ab0c78a...' \
  -H 'X-PARTNER-ID: EP9613058999' \
  -H 'X-EXTERNAL-ID: XTID-08oy4jf326' \
  -H 'X-IP-ADDRESS: 172.24.281.24' \
  -H 'CHANNEL-ID: 05' \
  -d '{
    "merchantId": "EP96130589",
    "originalPartnerReferenceNo": "DIRECT-API-NMS-12ajd1mir8",
    "originalReferenceNo": "A0000001703",
    "originalExternalId": "10052019",
    "partnerRefundNo": "MRF-tqktcivp64",
    "refundAmount": {
      "value": "10000.00",
      "currency": "IDR"
    },
    "reason": "Customer complain",
    "additionalInfo": {
      "paymentId": "99"
    }
  }'

Example Success Response (Partial Refund)

{
	"responseCode": "2007800",
	"responseMessage": "Successful",
	"originalPartnerReferenceNo": "DIRECT-API-NMS-12ajd1mir8",
	"originalReferenceNo": "A0000001703",
	"originalExternalId": "10052019",
	"refundNo": "RF-70G7-721071-1jac11603005-20251127-37648",
	"partnerRefundNo": "MRF-tqktcivp64",
	"refundAmount": {
		"value": "10000.00",
		"currency": "IDR"
	},
	"refundTime": "2025-11-27T14:16:39.209256321+07:00",
	"additionalInfo": {
		"refundMethod": "Partial",
		"refundOrder": 1,
		"rcSwitching": "00",
		"errSwitching": "Success",
		"amountTrx": "50450.00",
		"rrn": "1jac41603007"
	}
}

Example Processing Response

{
	"responseCode": "2027800",
	"responseMessage": "Request In Progress",
	"originalPartnerReferenceNo": "DIRECT-API-NMS-12ajd1mir8",
	"originalReferenceNo": "A0000001703",
	"partnerRefundNo": "MRF-tqktcivp64"
}

Example Invalid Amount Response

{
	"responseCode": "4047813",
	"responseMessage": "Invalid Amount",
	"originalPartnerReferenceNo": "DIRECT-API-NMS-12ajd1mir8",
	"originalReferenceNo": "A0000001703",
	"partnerRefundNo": "MRF-tqktcivp64",
	"refundAmount": {
		"value": "60000.00",
		"currency": "IDR"
	}
}

Important Notes

  1. X-EXTERNAL-ID must be unique per merchant per day
  2. partnerRefundNo must be unique for each refund request
  3. Partial Refunds: Multiple partial refunds are allowed until the total refunded amount equals the original transaction amount
  4. Refund Order: For partial refunds, refundOrder indicates the sequence number of the refund
  5. Refund Time: Refund processing may take time; check status using query API if response is 202 (processing)
  6. Amount Validation: Refund amount cannot exceed the original transaction amount minus any previous refunds
  7. Original References: All original reference numbers must match the ones from the successful payment transaction

Version: 1.0
Last Updated: November 2024
Service Owner: Manjo QRIS Team