Refunds
Learn how ICEPAY refunds work, how to issue full or partial refunds, track their status, and understand when the customer receives the funds.
A refund returns all or part of a completed payment to the customer.
Depending on your setup, you can issue a refund from the ICEPAY Portal, from a supported ready-made integration, or through the Checkout API.
The way the money is returned depends on the original payment method.
How a refund works
Section titled “How a refund works”A typical refund follows these steps:
-
Find the original payment
A refund is always associated with an existing payment.
-
Choose the amount
You can refund the entire payment or only part of it.
-
Create the refund
The refund is submitted through the ICEPAY Portal, your e-commerce integration, or the Checkout API.
-
ICEPAY processes the refund
Some refunds complete immediately, while others remain
pendingwhile they are being processed. -
The funds are returned
The refund is sent using the refund method associated with the original payment method.
Full and partial refunds
Section titled “Full and partial refunds”ICEPAY supports both full and partial refunds.
Returns the full refundable amount of the original payment to the customer.
Returns only part of the original payment amount.
More than one partial refund can be created as long as the combined refunded amount does not exceed the refundable amount of the payment.
For example, if a customer paid €100.00:
Original payment €100.00First refund -€25.00Second refund -€30.00─────────────────────────────Remaining refundable €45.00The total of all refunds cannot exceed the amount available on the original payment.
Issue a refund from the ICEPAY Portal
Section titled “Issue a refund from the ICEPAY Portal”You can create a refund directly from the ICEPAY Portal.
- Sign in to the ICEPAY Portal.
- Go to Payments.
- Find and open the payment you want to refund.
- Check whether the payment is refundable.
- Select the refund option.
- Enter the amount you want to refund.
- Confirm the refund.
The payment page also shows previously created refunds and their current statuses.
Refund statuses
Section titled “Refund statuses”A refund has its own lifecycle, separate from the original payment.
For refunds created through the current Checkout API, the relevant statuses are:
The refund has been created and ICEPAY is still processing it.
In most cases, API refunds move from pending to completed within
24 hours.
ICEPAY has completed the processing required to return the funds.
The customer may still need to wait for their bank, card issuer, or payment provider to make the refund visible.
Refused refunds
Section titled “Refused refunds”In the ICEPAY Portal, a refund that cannot be processed may also be shown as Refused.
The refund could not be processed successfully.
Check the refund and payment details for more information or contact ICEPAY if the reason is unclear.
How long does a refund take?
Section titled “How long does a refund take?”Refund processing time depends on the original payment method and the customer’s bank or payment provider.
Refunds are generally returned within 5 business days, but this can vary.
A refund reaching completed in ICEPAY means the refund has been sent from
ICEPAY’s side. It does not guarantee that it is already visible to the customer.
Card refunds
Section titled “Card refunds”Card refunds can take longer to appear.
After ICEPAY processes the refund:
- the refund is normally sent to the relevant card issuer within 1 business day;
- the issuer may take up to 14 business days to make the refund visible to the cardholder.
If the refund is shown as completed but the customer still cannot see it, the customer should first contact their card issuer.
After 14 days, ICEPAY can provide an Acquirer Reference Number (ARN) where available.
The ARN can help the card issuer trace the refund through the card payment network.
How the customer receives the refund
Section titled “How the customer receives the refund”The refund route depends on the original payment method.
| Original payment method | Refund method |
|---|---|
| Visa & Mastercard | Returned to the original card |
| iDEAL | Wero | Returned through IBAN |
| Bancontact | Returned to the original card |
| EPS | Returned through IBAN |
| Online Überweisen | Returned through IBAN |
| Pay by Bank | Returned through IBAN |
| Direct debit | Returned through IBAN |
| PayPal | Returned through PayPal |
The exact refund behaviour of a payment method is documented on the Payment methods page.
Cancel a refund
Section titled “Cancel a refund”A refund can be cancelled while it is still pending.
To cancel a pending refund in the ICEPAY Portal:
- Open the original payment.
- Find the refund in the payment’s refund overview.
- Select the option to cancel the refund.
Once the refund has already been processed, it can no longer be cancelled.
Why can’t I create a refund?
Section titled “Why can’t I create a refund?”A payment may not be refundable for several reasons.
Refunds are not enabled
Section titled “Refunds are not enabled”Refunding may not be enabled for your ICEPAY Account or merchant.
If you expect refunds to be available but the option is missing, contact ICEPAY.
The payment is not refundable
Section titled “The payment is not refundable”Refunds can only be created when the original payment is in a state that allows a refund.
For example, a payment that was never successfully completed cannot simply be refunded because no successful payment exists to return.
Required bank information is not available yet
Section titled “Required bank information is not available yet”Some payment methods require information such as an IBAN or BIC to return the funds.
That information may not always be available immediately after the payment.
If the refund option is temporarily unavailable, check the payment again later.
The refundable amount has already been used
Section titled “The refundable amount has already been used”Previous full or partial refunds reduce the remaining amount that can be refunded.
A new refund cannot cause the combined refunded amount to exceed the available amount of the original payment.
Refunds in a custom integration
Section titled “Refunds in a custom integration”If you integrate directly with the ICEPAY Checkout API, create a refund for an existing payment using:
POST /api/payments/{key}/refundA refund request contains:
| Field | Required | Description |
|---|---|---|
reference |
Yes | Your reference for the refund. |
description |
No | A description or reason for the refund. |
amount.value |
Yes | Amount to refund in minor currency units. |
The currency does not need to be supplied. ICEPAY uses the currency of the original payment.
For example:
{ "reference": "RFD-00069", "description": "Received chocolate dip instead of sprinkles", "amount": { "value": 299 }}As with payment amounts, refund values use minor currency units.
For example:
| Refund amount | API value |
|---|---|
| €0.01 | 1 |
| €2.99 | 299 |
| €10.00 | 1000 |
See the API endpoint, request format, and implementation examples for creating refunds.
Identifying refunds
Section titled “Identifying refunds”Every refund created through the Checkout API has its own unique refund key.
For example:
pr-01j1sr38kspvq2z5xek20y565wThis is separate from the original payment key:
pi-01j1sr24qph973tf3hgsvqe7h7For custom integrations, store the refund key with your own refund record.
You can also supply your own refund reference to associate the refund with
your internal system.
Tracking refund updates
Section titled “Tracking refund updates”When a payment has refunds, its payment representation contains a refunds
array.
For example:
{ "refunds": [ { "key": "pr-01j1sr38kspvq2z5xek20y565w", "status": "completed", "amount": { "value": 299, "currency": "eur" }, "description": "Received chocolate dip instead of sprinkles", "reference": "RFD-00069" } ]}If several refunds have been created for the same payment, the array contains multiple refund entries.
Refund webhooks
Section titled “Refund webhooks”When an API refund changes to completed, ICEPAY sends an update to the
webhookUrl configured on the original payment.
The webhook contains the payment together with its current refunds array.
Using refunds with a ready-made integration
Section titled “Using refunds with a ready-made integration”If your e-commerce integration supports refunds directly, it may allow you to start the refund from the order in your store.
In that case, the integration normally handles:
- identifying the original ICEPAY payment;
- creating the refund;
- sending the correct amount;
- keeping the refund or order state synchronised.
You should generally use the refund functionality provided by your integration instead of manually creating a second refund for the same order in the ICEPAY Portal.
What this means for you
Section titled “What this means for you”If you manage payments in the ICEPAY Portal
Section titled “If you manage payments in the ICEPAY Portal”You can create full or partial refunds from the original payment and follow their status from the Portal.
Keep in mind that:
- a refund may first remain
pending; - a completed refund may take additional time to reach the customer;
- refund processing differs between payment methods;
- pending refunds can be cancelled;
- the total of multiple refunds cannot exceed the refundable payment amount.
If you use a ready-made integration
Section titled “If you use a ready-made integration”Use the refund functionality provided by your e-commerce integration when it is available.
The integration normally handles the technical communication with ICEPAY, while you can manage the refund from the order in your store.
If you build a custom integration
Section titled “If you build a custom integration”Your integration should:
- associate refunds with the original payment;
- store the unique ICEPAY refund key;
- use minor currency units for refund amounts;
- keep each refund’s status separately;
- process refund updates from the original payment’s webhook;
- handle multiple refunds on the same payment;
- make refund-related webhook processing idempotent;
- not treat your own refund
referenceas a unique ICEPAY identifier.

