Plaid logo
Docs
ALL DOCS

Virtual Accounts (UK and Europe)

  • Introduction to Virtual Accounts
  • Managing your Virtual Account
  • Payment Confirmation
  • Payouts
  • Refunds
  • Account Sweeping
  • Add Virtual Accounts to your app
Plaid logo
Docs
Plaid.com
Get API keys
Open nav

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.

  1. Follow the Payment Confirmation flow to pay into your virtual account.

  2. 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.
  3. Issue a refund by calling /payment_initiation/payment/reverse, providing the payment_id from the payment made in Step 3, and optionally an amount for partial refunds. Store the refund_id and status from the response.

    • If you have configured transaction webhooks, you will receive a status update that the Refund transitioned from INITIATED to EXECUTED.

    • Alternatively, if not using webhooks, you can confirm the transaction has been executed by calling /wallet/transaction/get with the transaction_id.

    • You can also confirm that the original payment was refunded by calling /payment_initiation/payment/get with the payment_id to see the refund_id as part of the payment’s details.

  4. 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 the amount_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.

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.

Was this helpful?
Developer community
GitHub
GitHub
Stack Overflow
Stack Overflow
YouTube
YouTube
Twitter
Twitter
Discord
Discord