Refunds
Refund a Payment Initiation payment
Refunds enable you to refund your end users. You can issue refunds for any Payment Initiation payments that have settled in your virtual account.
The original payment must be in a settled state to be refunded.
To refund partially, specify the amount as part of the request.
If the amount is not specified, the refund amount will be equal to all of the remaining payment amount that has not been refunded yet.
If the remaining payment amount is less than one unit of currency (e.g. 1 GBP or 1 EUR), the refund will fail.
Execute a Refund
Make sure your virtual account is set up before following these steps. For more information on setting up an account, see Managing virtual accounts.
Follow the Payment Confirmation flow to pay into your virtual account.
Call
/wallet/get
to check your virtual account balance for sufficient funds.- If you have insufficient funds, fund your virtual account before proceeding. After funding your virtual account, you can check the updated balance by calling
/wallet/get
.
- If you have insufficient funds, fund your virtual account before proceeding. After funding your virtual account, you can check the updated balance by calling
Issue a refund by calling
/payment_initiation/payment/reverse
, providing thepayment_id
from the payment made in Step 3, and optionally anamount
for partial refunds. Store therefund_id
andstatus
from the response.If you have configured transaction webhooks, you will receive a status update that the Refund transitioned from
INITIATED
toEXECUTED
.Alternatively, if not using webhooks, you can confirm the transaction has been executed by calling
/wallet/transaction/get
with thetransaction_id
.You can also confirm that the original payment was refunded by calling
/payment_initiation/payment/get
with thepayment_id
to see therefund_id
as part of the payment’s details.
If you have previously executed any partial refunds for the payment, you can still issue subsequent refunds if this payment has sufficient remaining amount.
- To check if the payment has sufficient remaining amount, call
/payment_initiation/payment/get
and fetch theamount_refunded
field, which represents the amount that has been refunded already. Subtract this from the payment amount to calculate the amount still available to refund.
- To check if the payment has sufficient remaining amount, call
A successful refund will transition to the EXECUTED
status. If a refund is in a FAILED
status, you may try again, with a new idempotency_key
, until you have a refund in an EXECUTED
status for the payment. Refunds should transition to EXECUTED
or FAILED
automatically. If this does not occur,
Testing Refunds
You can begin testing Refunds in Sandbox by following the steps listed in the Add Virtual Accounts to your App guide. For Production access you will first need to submit a product access request Support ticket.