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
Close search modal
Ask Bill!
Ask Bill!
Hi! I'm Bill! You can ask me all about the Plaid API. Try asking questions like:
    Note: Bill isn't perfect. He's just a robot platypus that reads our docs for fun. You should treat his answers with the same healthy skepticism you might treat any other answer on the internet. This chat may be logged for quality and training purposes. Please don't send Bill any PII -- he's scared of intimacy. All chats with Bill are subject to Plaid's Privacy Policy.
    Plaid.com
    Log in
    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
    Discord
    Discord