API Details
The Refund Payment service allows you to refund an Open Banking payment.
When you initiate a refund request, a new refund object is created.
The refund request object may be in one of three statuses:
- REFUND_PENDING
- REFUND_COMPLETE
- REFUND_REJECTED
Successful Refund
Where a refund request is successful:
- The user calls the
/payments/{paymentId}/refunds
service. Provided the referenced payment is inPAYMENT_RECEIVED
status (and all other Refund Configuration constraints are met), a refund object is created inREFUND_PENDING
status. Note that the status of the original payment is unchanged (it remains inPAYMENT_RECEIVED
status). - A Credit Transfer payment is initiated to the customer account linked to the provided
paymentId
. - The payment is successfully processed - funds are credited to the PSU. The refund object’s status is updated to
REFUND_COMPLETE
. - A Payment Refunded webhook notifies the merchant of the successful refund. See Open Banking Payment Refunded Event in the Webhooks section for more details.
Unsuccessful Refund
Where a refund request is unsuccessful:
- The user calls the
/payments/{paymentId}/refunds
service and all validations (as mentioned above) are passed. - A Credit Transfer payment is initiated to the customer account linked to the provided
paymentId
but cannot be processed e.g. the PSU’s account is closed. - The refund object is updated to
REFUND_REJECTED
. - A Payment Refund Rejected webhook notifies the merchant of the unsuccessful refund. See Open Banking Payment Refunded Rejected Event in the Webhooks section for more details.
Refund Options
It is possible to issue a:
- Full refund.
- Partial refund.
- Full refund and a compensation amount.
The value of your refund is handled in the API via the refundAmount
and compensatioinAmount
values.
Refund Configuration
To allow merchants to manage the refund process, it is possible to apply limits on the value of refunds. The following settings may all be configured per merchant; please discuss your requirements with your Account Manager:
Setting | Description | Default |
Refund Amount Limit per Payment | The maximum amount that can be refunded against a payment. The sum of all (partial) refunds against a single payment cannot exceed this number | 0 |
Maximum Refund Percentage per Transaction | Percentage of the original transaction amount that can be Refunded in a single refund (whole numbers only, no decimal places, e.g. 1% is acceptable, 0.1% is not) | 0 |
Refunds Period | The maximum Refund period in days; it is not possible to initiate a refund for a payment that is older than this configured number of days. | 540 |
These configurations are evaluated when you make a refund request.
A refund will be initiated where:
- The payment you want to refund is in
PAYMENT_RECEIVED
status. - The refund amount does not exceed:
- The (global) maximum refund amount
- The refund transaction amount limit.
- The refund occurs within the defined refunds period.
Remittance Information
For GBP payments:
To provide remittance information for GBP payments, use remittanceInformation.reference
.
Note that:
- A maximum of 18 characters are allowed.
- The text used must conform to the following regular expression:
^[a-zA-Z0-9\- ,.]*$
For EUR payments:
To provide remittance information for EUR payments, use remittanceInformation.unstructured
Note that:
- A maximum of 120 characters are allowed.
- In SEPA, the following characters are supported:
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 / - ? : ( ) . , ‘ + Space |
A unique End-to-End identifier will be applied automatically or if you prefer to use your own identifier, provide a value for endToEndIdentification
.
Refund for Non-Nuapay-Account Owners
In Open Banking UK, the OBIE specification allows for merchants to retrieve their payers’ account details. This feature is available for banks that have implemented the specification v3.1.6 (or later).
To use the PSU account details:
- Call the Retrieve Payment API.
- If the details have been retrieved from the payer’s bank, they are included in the
debtorAccount
object. - Use the details to initiate a payment to the PSU.
- As you do not have a Nuapay account, you will need to use the account details to create a beneficiary and initiate the payment via another system.
When working with our APIs, please use the Sandbox URI when testing and the Live URI when you move to Production.
LIVE https://api.nuapay.com/tpp SANDBOX https://sandbox.nuapay.com/tpp
If you haven't done so already and would like to do some testing, please Request Sandbox Access
Important: Endpoints and Webhooks may be extended from time to time and any changes we make will follow our Versioning and Backward Compatibility rules. This means that the code that you write today must be designed to be robust enough to handle any future changes (where a new object is added to (or removed from) a specific API response, for example).