Card-on-file Refund
Overview
A card-on-file refund is the process of reversing an already complete purchase or preauthorization transaction. You are able to card-on-file refund any amount up to the total amount of the transaction.
Card-on-file refunds are also able to be issued with or without the card being present if a card card is used. If a Union Pay or Interac card is used the card will need to be present. If you want to initiate a card-on-file refund you need to orderId and transactionId of the original transaction from the original purchase. In the event that the card-on-file refund cannot be processed due to a communication error or other issues, a card-present refund can be performed by the POS application.
If you want to issue a card-present refund that isn't linked to a specific transaction, you can learn about it HERE.
Request Structure
| Element | Type | Description | Size | Required |
|---|---|---|---|---|
| apiVersion | String | API version number | V20 | Required |
| istConfigCode | String | Moneris provided integration configuration code | V25 | Required |
| dataId | String | Merchant defined unique identifier for the data object | V50 | Required |
| dataTimestamp | String | Date and time of the request (YYYY-MM-DD HH:MM:SS) | F19 | Required |
| data | Object | Object that contains all transaction requests | — | — |
| request | Array | Contains data applicable to transaction request | — | — |
| orderId | String | Order ID from Purchase | V50 | Required |
| transactionId | String | Transaction ID from Purchase response | V50 | Required |
| idempotencyKey | String | Unique transaction identifier to avoid duplicate request | V50 | Required |
| linkId | String | Id used to group related transactions | V50 | Optional |
| terminalId | String | Destination Terminal ID | F8 | Optional |
| userName | String | Unique identifier for clerk / user | V30 | Optional |
| customIdData | String | Custom field | V50 | Optional |
| action | String | "refund" | V50 | Required |
| totalAmount | String | Total transaction amount | V9 | Required |
| dynamicDescriptor | String | Merchant-defined description | V20 | Optional |
| progressStatus | String | If value is set to "True", terminal will return progress to ECR Note: This feature is only available on Direct Integration | V5 | Optional |
| modifier | String | Enum which further classifies transaction | V24 | Optional |
| language | String | Valid values "EN" and "FR". If value is not provided, the payment app will use the language from TMS | F2 | Optional |
| subtotalAmount | String | Amount without taxes or fees | V9 | Optional |
| taxes | Array | Maximum of 5 tax objects | — | — |
| taxName | String | Name to be displayed on receipt (hst, gst etc) | V15 | Optional |
| taxAmount | String | Corresponding amount | V9 | Conditional |
{
"apiVersion":"3.0",
"istConfigCode":"example_istConfigCode",
"dataId":"example_dataId",
"dataTimestamp":"1969-12-31 23:59:59",
"data":{
"request":[
{
"orderId":"example_orderId",
"transactionId":"example_transactionId",
"idempotencyKey":"example_idempotencyKey",
"action":"refund",
"totalAmount":"example_totalAmount"
}
]
}
}Response Structure
| Element | Type | Description | Size | Required |
|---|---|---|---|---|
| apiVersion | String | API version number | V20 | Required |
| statusCode | String | Status code for the overall transaction request | V4 | Required |
| status | String | Description of the statusCode | V4 | Required |
| dataId | String | Merchant defined unique identifier for the data object | V50 | Required |
| dataTimestamp | String | Date and time of the request (YYYY-MM-DD HH:MM:SS) | F19 | Required |
| data | Object | Object that contains all transaction requests | — | — |
| response | Array | Contains data applicable to transaction request | — | — |
| orderId | String | Unique identifier for this request | V50 | Required |
| transactionId | String | Unique identifier for this request | V50 | Required |
| idempotencyKey | String | Unique transaction identifier to avoid duplicate request | V50 | Required |
| linkId | String | Id used to group related transactions | V50 | Optional |
| action | String | "refund" | V50 | Required |
| statusCode | String | Status code for individual request | V4 | Required |
| status | String | Description of the individual statusCode | V50 | Required |
| totalAmount | String | Echo of the Total transaction amount from the request | V9 | Required |
| approvedAmount | String | Payment amount received / approved | V9 | Conditional |
| tenderType | String | Payment Type: Credit, Debit, Gift etc | V50 | Required |
| cardType | String | Card Type: V, M, P, AX etc | V2 | Conditional |
| cardName | String | Card Name: Visa, MasterCard, Interac, Amex etc | V25 | Conditional |
| sequenceNum | String | Sequence Number | V18 | Conditional |
| realTimeUniqueId | String | Real Time Moneris Transaction Unique Identifier | F15 | Conditional |
| responseCode | String | Moneris Host Response Code | V3 | Conditional |
| iso | String | ISO response Code | V2 | Conditional |
| authCode | String | Authorization code returned from the issuing institution | V8 | Conditional |
| formFactor | String | EMV Specific Data | F2 | Conditional |
| maskedPan | String | Masked Primary Account Number (PAN) | V21 | Conditional |
| completed | String | "true" or "false" | V5 | Required |
| receipt | String | Financial receipt data sent using ISO-8895-1 encoding | V4000 | Conditional |
| receiptChoice | String | The choices of how the receipt is being returned to the cardholder at the time of transaction. Valid values include: PRINT (Default Option), EMAIL, SMS, NONE. | V10 | Conditional |
| terminalId | String | Destination Terminal ID | F8 | Required |
| receiptExtension | String | DCC transaction data for compact format receipts | V275 | Conditional |
{
"apiVersion":"3.0",
"statusCode":"example_statusCode",
"status":"example_status",
"dataId":"example_dataId",
"dataTimestamp":"1969-12-31 23:59:59",
"data":{
"response":[
{
"orderId":"example_orderId",
"transactionId":"example_transactionId",
"statusCode":"example_statusCode",
"status":"example_status",
"idempotencyKey":"example_idempotencyKey",
"completed":"true",
"responseCode":"example_responseCode",
"iso":"example_iso",
"approvedAmount":"example_approvedAmount",
"totalAmount":"example_totalAmount",
"tenderType":"example_tenderType",
"cardType":"example_cardType",
"sequenceNum":"example_sequenceNum",
"realTimeUniqueId":"example_realTimeUniqueId",
"authCode":"example_authCode",
"formFactor":"example_formFactor",
"maskedPan":"example_maskedPan",
"action":"refund",
"receipt":"example_receipt",
"receiptChoice":"PRINT",
"terminalId":"example_terminalId"
}
]
}
}Errors
If your response contains errors, visit the Errors page for a detailed description of each one.

