Business Portal users with the “Refund Electronic Payments” permissions can refund a credit/debit card or ACH transaction from either the Agent Interface or the Payment Details page.
NOTE: ACH refund functionality is in Limited Availability - For ACH transactions, refunds cannot be initiated for five business days after the last payment attempt (including retry payments). This policy ensures that clients do not refund transactions that are still subject to ACH returns.
Processing Refunds Documentation
ACH Full Refund Example
ACH Partial Refund Example
Refunding via the Business Portal
Business Portal users with the “Refund Electronic Payments” permissions can refund a credit/debit card or ACH transaction from either the Agent Interface or the Payment Details page. If allowed, refunds can be initiated once for either partial or full amounts within the configurable refund timeframe for your site, which can be between 1-120 days. Only transactions in the “Complete” status and outside the cancellation window can be refunded. The cancellation window for a transaction depends on network cutoff times (for debit and credit transactions) or your ACH payment configuration (e.g., same-day payment submissions vs next-day payment submissions). The Business Portal will display whether a transaction can be canceled or refunded. NOTE: For ACH transactions, refunds cannot be initiated for five business days after the last payment attempt (including retry payments). This policy ensures that clients do not refund transactions that are still subject to ACH returns.
Initiate a Refund from the Payment Details Page
To process a refund from the Payment Details page, complete the following steps:
-
From the portal homepage, click View in the Payments section.
- Search for the desired payment by the following:
- Status (NOTE: Only “Completed” payments can be refunded).
- Payment Date
- Member Name
- Phone
- Confirmation Number
-
Select the desired transaction from the Payments data grid. That transaction’s Payment Details screen displays.
-
Click one of the following refund options:
-
For partial amount refunds, click Request a Partial Refund. A Partial Refund page displays where you can enter the amount you’d like to refund. After entering the amount, click Submit and then OK on the confirmation message. The portal returns you to the Payment Details screen with a message indicating if the partial-amount refund request was successful (NOTE: Once you’ve initiated a refund request, the portal removes the option to refund more money to the consumer for this transaction).
-
For full-amount refunds, click Request a Full Refund. The portal displays a message asking you to confirm the refund. Click OK to confirm the refund. The portal returns you to the Payment Details screen with a message indicating if the full-amount refund request was successful (NOTE: Once you’ve initiated a refund request, the portal removes the option to refund more money to the consumer for this transaction).
-
For partial amount refunds, click Request a Partial Refund. A Partial Refund page displays where you can enter the amount you’d like to refund. After entering the amount, click Submit and then OK on the confirmation message. The portal returns you to the Payment Details screen with a message indicating if the partial-amount refund request was successful (NOTE: Once you’ve initiated a refund request, the portal removes the option to refund more money to the consumer for this transaction).
Initiate a Refund from the Agent Interface
Complete the following steps to refund a consumer payment from the Agent Interface:
- From the Agent Interface homepage, enter the required search term. The portal displays the Account Details screen.
-
Click the Transactions tab to view the account’s transaction history. Scroll through the list in the data grid to find the desired transaction and then click its Confirmation Number. The transaction’s Payment Details page displays.
-
Click one of the following refund options:
-
For partial amount refunds, click the Request a Partial Refund button. A Partial Refund page displays where you can enter the amount you’d like to refund. After entering the amount, click Submit and then Confirm on the confirmation message. The portal returns you to the Payment Details screen with a message indicating if the partial-amount refund request was successful (NOTE: Once you’ve initiated a refund request, the portal removes the option to refund more money to the consumer for this transaction).
-
For full-amount refunds, click the Request Full Refund button. The portal displays a message asking you to confirm the refund. Click Confirm to confirm the refund. The portal returns you to the Payment Details screen with a message indicating if the full-amount refund request was successful (NOTE: Once you’ve initiated a refund request, the portal removes the option to refund more money to the consumer for this transaction).
-
For partial amount refunds, click the Request a Partial Refund button. A Partial Refund page displays where you can enter the amount you’d like to refund. After entering the amount, click Submit and then Confirm on the confirmation message. The portal returns you to the Payment Details screen with a message indicating if the partial-amount refund request was successful (NOTE: Once you’ve initiated a refund request, the portal removes the option to refund more money to the consumer for this transaction).
Removing the Refund Permission from a User Account
To remove the ability to refund a transaction from a specific user account, log into the Business Portal and complete the following steps:
-
Click the Admin tab.
- Scroll to the desired user account and hover over the arrow that displays next to its listing.
-
Select the Edit option from the menu that pops up. The Update User screen displays.
- Deselect the checkbox that displays next to the Refund Electronic Payments permission.
Click Update. The Business Portal returns you to the User Accounts page and displays a message indicating whether or not the user account was successfully updated.
Refunding via API
Refunding a payment through the API follows the same timing parameters and requirements as Business Portal refunds. All payments must be settled or funded to use the /refund_payment endpoint. Use the pnm_payment_identifier to find the payment you want to refund and include the following parameters:
| Parameter | Description | Type | Req |
|---|---|---|---|
| pnm_payment_identifier | A unique ID generated for each transaction. | string | R |
| refund_amount | The decimal amount that you want to refund. This parameter is only required for partial-amount refunds. | dec | O |
| refund_currency | The three-letter currency code. Currently the only supported value is USD. This parameter is only required for partial-amount refunds. | enum | O |
| site_identifier | The merchant’s unique Site ID. | string | R |
| timestamp | The Unix Epoch time of the call. | string | R |
| version | The version of the API you’re using. This version must match the version associated with your API key pair. | string | R |
| signature | The HMAC signature that is calculated by running your API Secret Key and the alphabetized, concatenated parameters of the request’s payload through the SHA256 message digest algorithm. | string | R |
Full Amount Refund Request
curl -X POST https://api.paynearme-sandbox.com/json-api/refund_payment -L \
-d pnm_payment_identifier=4706328482 \
-d version=3.0 \
-d timestamp=1642708833 \
-d site_identifier=S2155373459 \
-d signature=ef8ae6347bf5c04985f859d382a98f193fc90348ef0c2e41161682273ef303cd
Response
{
"response_code": "0",
"status": "ok",
"payment": {
"payment_made": "2021-10-27 15:00:50 -0700",
"payment_amount": "104.99",
"payment_currency": "USD",
"payment_status": "refunded",
"payment_type": "debit",
"payment_account": "Debit Card 9998",
"payment_method_identifier": "d94aea72f7359",
"net_payment_amount": "100.00",
"net_payment_currency": "USD",
"payment_processing_fee": "4.99",
"payment_processing_fee_currency": "USD",
"pnm_processing_fee": "4.99",
"pnm_processing_fee_currency": "USD",
"settled_to_site": "true",
"date_settled_to_merchant": "2021-11-04",
"pnm_payment_identifier": "470632848248",
"retailer_identifier": "FM346217710",
"pricing_schedule_name": "consumer",
"site_channel": "consumer",
"merchant_settlements": {
"merchant_settlement": {
"settlement_method_identifier": "SM736220738",
"settlement_type": "net_payment",
"settlement_amount": "100.00",
"settlement_currency": "USD"
}
},
"refund": {
"refund_status": "started",
"refund_amount": "104.99",
"refund_currency": "USD",
"unsettle_to_merchant_amount": "100.00",
"unsettle_to_merchant_currency": "USD",
"unsettled_from_collector_amount": "0.00"
}
}
}
Partial Amount Refund Request
curl -X POST https://api.paynearme-sandbox.com/json-api/refund_payment -L \
-d pnm_payment_identifier=207197026867 \
-d refund_amount=20 \
-d refund_currency=USD \
-d version=2.0 \
-d timestamp=1688658094 \
-d site_identifier=CARDAMOM \
-d signature=83a8fbe36f4782294a43cd016434e6ee
Response
{
"response_code": "0",
"status": "ok",
"payment": {
"payment_made": "2023-07-06 08:29:56 -0700",
"payment_amount": "59.54",
"payment_currency": "USD",
"payment_status": "refunded",
"payment_type": "ach",
"payment_account": "CNB Bank 3660",
"payment_method_identifier": "57d082bff821e",
"net_payment_amount": "55.55",
"net_payment_currency": "USD",
"payment_processing_fee": "3.99",
"payment_processing_fee_currency": "USD",
"pnm_processing_fee": "3.99",
"pnm_processing_fee_currency": "USD",
"settled_to_site": "false",
"date_settled_to_merchant": "",
"pnm_payment_identifier": "207197026867",
"retailer_identifier": "FM967382862",
"site_payment_identifier": "SPI-123",
"pricing_schedule_name": "consumer",
"site_channel": "consumer",
"merchant_settlements": {
"merchant_settlement": {
"settlement_method_identifier": "SM389129453",
"settlement_type": "net_payment",
"settlement_amount": "55.55",
"settlement_currency": "USD"
}
},
"refund": {
"refund_status": "started",
"refund_amount": "20.00",
"refund_currency": "USD",
"unsettle_to_merchant_amount": "20.00",
"unsettle_to_merchant_currency": "USD",
"unsettled_from_collector_amount": "0.00"
}
}
}
Comments
0 comments
Please sign in to leave a comment.