Automatically refund payments from external sources

Learn how to set up automatic refunds, reducing the need for manual refunds and reconciliation.

By default, you receive the external_payment_received webhook when you receive a payment from an external source instead of through TrueLayer's APIs.

You can choose to change the behaviour of this webhook. The new behaviour is that you don't receive the webhook for an initial payment from an external account, and that the payment is automatically refunded. This can be useful to:

  • Reduce your exposure to payments from unverified payment sources.
  • Decrease the amount of manual reconciliation required to refund incorrect payments.
  • Ensure that pay-ins to your merchant account are closed-loop, so you can refund and pay them back more easily.

When you might receive payments from an external source

When you receive an external payment, you get the external_payment_received webhook by default. This is typically in one of two scenarios.

External deposits

An external deposit is when a payment enters your merchant account through a method other than a TrueLayer API. This can include:

  • Top-up payments made to the merchant account from an IBAN you have whitelisted.
  • Payments made directly to your merchant account's sort code and account number or IBAN.
    A common example of this would be if a user paid you via a Send again function in their banking app, or by bank transfer.

Returns

A return occurs when a payment from your merchant account to an external account is blocked or rejected by the bank after it has entered the executed status. In this case, the payment is sent back to the merchant account as a return.

When you receive a return, it displays as an External Deposit in Console, and you get the external_payment_received webhook.

You receive a return in the following two scenarios:

  • When you send an open-loop payout and it is blocked or rejected.
  • If you have automatic refunds enabled, but the external deposit cannot be automatically refunded and is returned instead.

How to enable automatic refunds

In order to enable automatic refunds, you need to contact us and request this feature. When you contact us, you should provide the following information:

  • The client_id of any merchant accounts to enable automatic refunds for, and whether to enable them for GBP, EUR, or both.
  • The IBAN for any external payment sources you want to whitelist, so that external payments from them aren't refunded automatically.
    Typically, you would do this for any accounts you own and use to top up your merchant account.

❗️

Disable any related internal processes before enabling this

You may already have automatic or manual processes to screen and handle external deposits. If this is the case, ensure you disable them before you enable automatic refunds. If you don't do this, you may issue multiple refunds for a single payment and lose money.

Default behaviour without automatic refunds

In order to understand how automatic refunds work, you should first understand the default external deposit behaviour.

By default, when a payment from an external source settles in your merchant account, you receive the external_payment_received webhook. At the same time, the payment is added to the payments view in Console, with a Type of External Deposit.

Generally, you would then want to screen the payment to confirm it was expected.

Behaviour with automatic refunds enabled

When you contact us and enable automatic refunds, any payments from an external source are sent back as an open-loop payout after 1 hour. This means that the number of payment events increases, but less action and reconciliation is needed from you.

The typical flow of an automatically refunded external deposit is:

  1. A payment is sent from an external source and settles in your merchant account.
    The first payment shows as an External Deposit in Console, and you receive no webhook.
  2. After 1 hour, the payment is refunded back to the external source.
    The second payment shows as an Open-Loop Payout in console, and you receive no webhook.

In some rare cases, it's not possible to refund the payment. Generally, this only applies to payments made over the CHAPS payment system or if the account is blocked or closed.

If it's not possible to refund the payment, there's a third step to the flow:

  1. The refunded payment is sent back to the merchant account and settles.
    The third payment shows as an External Deposit in Console, and you also receive the external_payment_received webhook.
    We recommend that you contact the end user in this case to confirm the payment is correct.

How an automatic refund displays in Console

When you have automatic refunds enabled, you don't receive any webhooks for external deposits that are refunded. The exception to this is if a payment cannot be refunded (for example, if the remitter account is blocked), where you receive a webhook.

This means that you can see external deposits in Console only. When you receive an external deposit, there are two entries in the payments view:

  1. The inbound payment, which has a Type of External Deposit.
  2. The outbound refund, which has a Type of Open-Loop Payout.
An example of what an external deposit and associated automatic refund look like in Console.

An example of what an external deposit and associated automatic refund look like in Console. You can check whether the External Deposit and Open-Loop Payout are linked by checking the remitter IBAN for the payments.