Processing Refunds

PayNearMe enables clients to issue both partial and full-amount refunds to consumers from both the Business Portal and via the /refund_payment API. Refund requests can be made for both credit/debit card transactions and ACH transactions once the cancellation window has passed. After submitting the refund request, both the consumer and client receive refund confirmation emails. PayNearMe also provides clients with a report at their desired cadence that details all the card and ACH refunds processed for a given time period.

🚧

ACH Refunds

ACH refunds can take over five banking days to complete after initiating a refund request. This timeline depends on your bank's funding cycles and any non-banking days (such as holidays or weekends) that occur between the initial request and when the funds move. Additionally, PayNearMe will not complete a refund request for an ACH payment if we receive a return against the original transaction during that refund window. For more information on transaction and refund timelines, see ACH Transaction Timelines.

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.

Initiate a Refund from the Payment Details Page

To process a refund from the Payment Details page, complete the following steps:

  1. From the portal homepage, click View in the Payments section.

  2. Search for the desired payment by the following:

    • Status (NOTE: Only “Completed” payments can be refunded).
    • Payment Date
    • Customer Name
    • Email
    • Phone
    • Confirmation Number
  3. Select the desired transaction from the Payments data grid. That transaction’s Payment Details screen displays.

  4. 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).

Initiate a Refund from the Agent Interface

Complete the following steps to refund a consumer payment from the Agent Interface:

  1. From the Agent Interface homepage, enter the required search term. The portal displays the Account Details screen.

  2. 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.

  3. 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).

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:

  1. Click the Admin tab.

  2. Scroll to the desired user account and hover over the arrow that displays next to its listing.

  3. Select the Edit option from the menu that pops up. The Update User screen displays.

  4. Deselect the checkbox that displays next to the Refund Electronic Payments permission.

  5. 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:

ParameterDescriptionTypeRequired?
pnm_payment_identifierA unique ID generated for each transaction.stringR
refund_amountThe decimal amount that you want to refund. This parameter is only required for partial-amount refunds.decO
refund_currencyThe three-letter currency code. Currently the only supported value is USD. This parameter is only required for partial-amount refunds.enumO
site_identifierThe merchant’s unique Site ID.stringR
timestampThe Unix Epoch time of the call.stringR
versionThe version of the API you’re using. This version must match the version associated with your API key pair. The most updated version of the API is 3.0.stringR
signatureThe 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.stringR

Full Amount Refund Code Sample

curl --request POST \
     --url https://api.paynearme-sandbox.com/json-api/refund_payment \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "site_identifier": "S2411573363",
  "timestamp": 1716327151,
  "version": "3.0",
  "signature": "9c72a5fe2418d37d443ab23a0e8fd30f669fb9b978cd5039a0e8fb6c17f9a453",
  "pnm_payment_identifier": 342104401427
}
'
{
  "status": "ok",
  "payment": {
    "payment_made": "2023-10-12 12:34:38 -0700",
    "payment_amount": "210.99",
    "payment_currency": "USD",
    "payment_status": "refunded",
    "payment_type": "credit",
    "payment_account": "Credit Card 1512",
    "payment_method_identifier": "198fd2a399aae",
    "net_payment_amount": "200.00",
    "net_payment_currency": "USD",
    "payment_processing_fee": "10.99",
    "payment_processing_fee_currency": "USD",
    "pnm_processing_fee": "10.99",
    "pnm_processing_fee_currency": "USD",
    "settled_to_site": "false",
    "date_settled_to_merchant": "",
    "pnm_payment_identifier": "208735364879",
    "retailer_identifier": "FM941470905",
    "pricing_schedule_name": "consumer",
    "site_channel": "consumer",
    "merchant_settlements": {
      "merchant_settlement": {
        "settlement_method_identifier": "SM397064850",
        "settlement_type": "net_payment",
        "settlement_amount": "200.00",
        "settlement_currency": "USD"
      }
    },
    "refund": {
      "refund_status": "started",
      "refund_amount": "210.99",
      "refund_currency": "USD",
      "unsettle_to_merchant_amount": "200.00",
      "unsettle_to_merchant_currency": "USD",
      "unsettled_from_collector_amount": "0.00"
    }
  }
}

Partial Amount Refund Code Sample

curl --request POST \
     --url https://api.paynearme-sandbox.com/json-api/refund_payment \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "site_identifier": "S2411573363",
  "timestamp": 1716327151,
  "version": "3.0",
  "signature": "9c72a5fe2418d37d443ab23a0e8fd30f669fb9b978cd5039a0e8fb6c17f9a453",
  "pnm_payment_identifier": 342104401427,
  "refund_amount": 125,
  "refund_currency": "USD"
}
'
{
  "status": "ok",
  "payment": {
    "payment_made": "2023-10-16 13:00:22 -0700",
    "payment_amount": "504.99",
    "payment_currency": "USD",
    "payment_status": "refunded",
    "payment_type": "debit",
    "payment_account": "Debit Card 3136",
    "payment_method_identifier": "c5f2addb3aa90",
    "net_payment_amount": "500.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": "false",
    "date_settled_to_merchant": "",
    "pnm_payment_identifier": "118558762320",
    "retailer_identifier": "FM346217710",
    "pricing_schedule_name": "all",
    "site_channel": "all",
    "merchant_settlements": {
      "merchant_settlement": {
        "settlement_method_identifier": "SM397064850",
        "settlement_type": "net_payment",
        "settlement_amount": "500.00",
        "settlement_currency": "USD"
      }
    },
    "refund": {
      "refund_status": "started",
      "refund_amount": "125.00",
      "refund_currency": "USD",
      "unsettle_to_merchant_amount": "125.00",
      "unsettle_to_merchant_currency": "USD",
      "unsettled_from_collector_amount": "0.00"
    }
  }
}