---
title: "Refund a payment"
method: POST
path: "/payments/{paymentId}/refund"
tags: ["Payments"]
---

# Refund a payment

`POST /payments/{paymentId}/refund`

Initiates a new refund against a previously captured payment

## Path parameters

- `paymentId` string, required

## Request body

- RefundRequest — Represents a request to refund all or part of an existing payment
  - `amount` integer — Amount to be refunded on this transaction, or null for full refund. In the lowest denomination of the currency of the payment. This means that `1234` in GBP represents `£12.34`.
  - `merchantTransactionId` string — Your unique identifier that can be used when a connection issue occurs and you don't receive a paymentId. This is an optional field that can be used when querying `GET v1/payments`, `GET v1/payouts` or `GET v1/payments/{paymentId}/refunds`. We will validate the uniqueness of the merchantTransactionId value per retail channel. If a payment/payout/refund is created with merchantTransactionId `abc`, no other payment/payout/refund can be created with `abc`. The merchantTransactionId is a contract between BR-DGE and a merchant. This field will not be mapped downstream to any PSP. In the event that you provide a merchantTransactionId in the second (or third) leg of a 3DS payment, we will ignore this value and will only use the value provided in the initial request.
  - `customerRefundCode` string — You may provide your own code to be used in refunds, which will be provided to the PSP if it is supported. Each PSP may have different validation requirements for this code.

## Response `201`

Refund request completed successfully.

- RefundResponse
  - `code` string — [Response Code](https://docs.br-dge.io/docs/response-codes) signifying the outcome of the request.
  - `message` string — A description of the outcome of the request.
  - `id` string — The ID of this request. If you can include these when querying the outcome of individual requests, we can track down the root cause faster.
  - `psp` PspInfo
    - `name` string, required — Name of Payment Service Provider (PSPs). Please see [PSP Integrations] for a list of possible PSPs. [PSP Integrations]: https://docs.br-dge.io/docs/psp-integrations
    - `transactionId` string, required — Identifier provided by the PSP this payment was routed to.
    - `switchAccountId` string — Internal switch account identifier for the PSP account that was used to perform the transaction. This is an internally-assigned identifier, not a value provided by the PSP. Please note: PSP account switching feature is still under development and this field is not present in GET responses and notifications yet.
    - `pspToken` string — The token created by the PSP for the payment instrument.
    - `pspCardFingerprint` string — The PSP fingerprint for the payment instrument.
    - `provisionedUserId` string — PSP-specific user ID that was provisioned by the PSP when processing the payment.
    - `additionalInfo` union — Any additional information returned from interaction with PSP
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `customerFirstName` string — Customer's first name
        - `customerLastName` string — Customer's last name
        - `customerDateOfBirth` string, date — Customer's date of birth
        - `customerIpAddress` string, ipv4 — IP address of the customer
        - `customerId` string — The ID of the customer in your system.
        - `paysafecardCustomerId` string — Paysafecard identifier for the customer
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `customerPaymentOptionId` string — Identifier for the customer Payment Option
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `customerPaymentOptionId` string — Identifier for the customer Payment Option
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `customer` TrueLayerCustomer — Contains TrueLayer customer information.
          - `address` Address
            - `firstName` string — First name of the occupant. Please use only letters, spaces and these symbols: `-'.`
            - `lastName` string — Last name of the occupant. Please use only letters, spaces and these symbols: `-'.`
            - `phoneNumber` string — Telephone number of the occupant Please use only numbers, spaces and an optional leading +.
            - `buildingNumberOrName` string — The building number or name. Providing a building number or name separate from `address1` is recommended as some payment service provider (PSP) APIs have a separate field. If you are unsure whether you need to collect this data, please raise a ticket with support on the BR-DGE Support Portal at <https://docs.br-dge.io/docs/support#contact-support>. Please use only letters, spaces and these symbols: `-'.`
            - `address1` string — First line of the address. Please use only letters, numbers, spaces and these symbols: `'[]()@?!\-/.,_&*:;+=`
            - `address2` string — Second line of the address. Please use only letters, numbers, spaces and these symbols: `'[]()@?!\-/.,_&*:;+=`
            - `address3` string — Third line of the address. Please use only letters, numbers, spaces and these symbols: `'[]()@?!\-/.,_&*:;+=`
            - `town` string — Town of the address. Please use only letters, numbers, spaces and these symbols: `'[]()@?!\-/.,_&*:;+=`
            - `county` string — County of the address. Please use only letters, numbers, spaces and these symbols: `'[]()@?!\-/.,_&*:;+=`
            - `postcode` string — Postcode of the address. Please use at least one and no more than 9 alphanumeric characters (excl. spaces).
            - `country` string — ISO 3166 Alpha-2 Country code
          - `dateOfBirth` string, date — Date of birth of the referenced person. While this field is not required by the BR-DGE API; it is highly recommended as some PSPs recommend the inclusion of this field. If you have any questions about whether you should provide customer date of birth, please raise a ticket with the [BR-DGE Support Centre](https://support.br-dge.io/support/home).
          - `customerId` string — The ID of the customer in TrueLayer's system
          - `name` string — Customer's full name
        - `providerId` string — ID of the bank or other financial institution used in this payment in TrueLayer's system
        - `paymentSourceId` string — ID of the customer's payment source used to perform the payment in TrueLayer's system
        - `originalTransactionId` string
        - `accountNumber` string — 8 digit bank account number.
        - `sortCode` string — 6 digit sort code (no spaces or dashes).
        - `iban` string — Valid ISO 13616 International Bank Account Number (no spaces). Consists of a 2 letter country code, followed by 2 check digits, and then by up to 30 alphanumeric characters (also known as the BBAN).
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `fingerprint` string — The fingerprint associated to the authorized order's payment method
        - `name` string — The name of the revolut customer.
        - `emailAddress` string — The email address of the revolut customer
        - `paymentRevTag` string — Unique handle for a Revolut customer.
        - `revolutCustomerId` string, uuid — The unique identifier for the revolut customer.
        - `billingAddress` RevolutPayBillingAddress
          - `street_line_1` string — First line of street address information for Revolut customer.
          - `street_line_2` string — Second line of street address information for Revolut customer..
          - `region` string — The region associated with the address.
          - `city` string — The region associated with the address.
          - `country_code` string — 2 letter country code of the country associated with the address.
          - `postcode` string — The postcode associated with the address.
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `vaultId` string — Vault ID generated by PayPal referring to the customer's stored PayPal wallet.
        - `paymentSource` PaymentSource — Details of the PayPal account used to complete the payment for the PayPal Order.
          - `name` string — Full name of customer.
          - `email` string — Email address of the customer.
          - `accountId` string — PayPal account ID.
          - `vaultId` string — Vault ID generated by PayPal referring to the customer's stored PayPal wallet.
      - object
        - `type` string — Discriminator field. Please see the discriminator mapping for the `AdditionalInfo` schema.
        - `pin` string — voucher pin
        - `serialNumber` string — voucher serial number
    - `rawPspResponses` RawPspResponse[], nullable
      - `httpStatusCode` integer — The http response code for the given call to the external system
      - `body` string — The response body of the http request to the external system. This is the raw response with sensitive data redacted. We make no guarantees about the format of this field. It is psp dependant. The majority of these responses are in `application/json` but note for certain types of error response they may be `text/html` or `application/xml`
      - `pspName` string, required — Name of Payment Service Provider (PSPs). Please see [PSP Integrations] for a list of possible PSPs. [PSP Integrations]: https://docs.br-dge.io/docs/psp-integrations
      - `headers` object — A key/value map of the http headers from the external system.
    - `paymentAccountReference` string — The Payment Account Reference (PAR) linked the the payment-instrument, if available. See our [dedicated PAR guide](https://docs.br-dge.io/docs/payment-account-reference) for more info.
  - `installmentsPlan` InstallmentsPlan — Information about any installments plan was that was linked to the payment request and the outcome of its activation or acceptance.
    - `code` string — [Response Code](https://docs.br-dge.io/docs/response-codes) signifying the outcome of the request.
    - `message` string — A description of the outcome of the request.
    - `provider` string — Full name of the provider of this installments plan.
    - `operation` string — The type of operation being made: Activation: a new plan has been activated Cancellation: an existing plan has been cancelled
    - `planActivationId` string — Unique code that identifies the acceptance or activation of the installments plan. This code comes from the installments plan provider, not from BR-DGE.
  - `merchantTransactionId` string — Your unique identifier that can be used when a connection issue occurs and you don't receive a paymentId. This is an optional field that can be used when querying `GET v1/payments`, `GET v1/payouts` or `GET v1/payments/{paymentId}/refunds`. We will validate the uniqueness of the merchantTransactionId value per retail channel. If a payment/payout/refund is created with merchantTransactionId `abc`, no other payment/payout/refund can be created with `abc`. The merchantTransactionId is a contract between BR-DGE and a merchant. This field will not be mapped downstream to any PSP. In the event that you provide a merchantTransactionId in the second (or third) leg of a 3DS payment, we will ignore this value and will only use the value provided in the initial request.
  - `customerRefundCode` string — You may provide your own code to be used in refunds, which will be provided to the PSP if it is supported. Each PSP may have different validation requirements for this code.

## Other responses

- `202` — Pending
- `400` — Bad request - the request was in an invalid format or contained invalid information. If have any questions about why you are receiving these responses, please raise a ticket with support on the BR-DGE Support Portal at <https://docs.br-dge.io/docs/support#contact-support> with the `id` from the response so we track down the individual requests on our end.
- `401` — Unauthorized request.
- `409` — Indicates a request conflict.
- `500` — An internal server error occurred upstream while processing the request. If you have any questions about why you are receiving these responses, please raise a ticket with support on the BR-DGE Support Portal at <https://comcarde.atlassian.net/servicedesk/customer/portals> with the `id` from the response so we track down the individual requests on our end.
- `502` — An error occurred upstream while processing the request, possibly on payment processor. If have any questions about why you are receiving these responses, please raise a ticket with support on the BR-DGE Support Portal at <https://docs.br-dge.io/docs/support#contact-support> with the ID from the response so we track down the individual requests on our end.

---

[API](https://skmtc.net/br-dge/apis/br-dge-transaction-rest-api.md) · [All operations](https://skmtc.net/br-dge/apis/br-dge-transaction-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/br-dge/br-dge-transaction-rest-api/revisions/a9c0feac5523/schema)
