---
title: "Payout transfer webhooks"
description: "Find out which webhooks Adyen sends for payout-related events."
url: "https://docs.adyen.com/platforms/payout-webhooks"
source_url: "https://docs.adyen.com/platforms/payout-webhooks.md"
canonical: "https://docs.adyen.com/platforms/payout-webhooks"
last_modified: "2023-03-21T10:36:00+01:00"
language: "en"
---

# Payout transfer webhooks

Find out which webhooks Adyen sends for payout-related events.

[View source](/platforms/payout-webhooks.md)

When funds are transferred (paid out) from a balance account to your user's bank account, Adyen sends [Transfer webhooks](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/overview) to inform you of the progress and status changes of the transfer request. Use this guide to learn what payout-related transfer webhook events are sent, and how to configure your system to process them successfully.

When a payout-related transfer is triggered in your balance platform, Adyen sends the following of webhooks:

* [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created), which informs your server that an outgoing transfer is initiated from a balance account in your platform.
* [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated), which informs your server of the transfer status changes.

## Requirements

To keep track of payout-related transfer events in your platform, ensure that:

Before you begin, take into account the following requirements and preparations.

| Requirement                                     | Description                                                                                                                                                                                                                                                                                                                                                                                                  |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Integration type**                            | An Adyen [payout service integration](/payouts/payout-service/integration-checklist/).                                                                                                                                                                                                                                                                                                                       |
| **[Webhooks](/development-resources/webhooks)** | To keep track of payout-related events in your platform, make sure that: - Your server must be able to [receive and accept webhooks](/development-resources/webhooks/configure-and-manage).
- You have [subscribed](/development-resources/webhooks/configure-and-manage#configure-customer-area) to **Transfer webhooks** and **Transaction webhooks** in your [Customer Area](https://ca-test.adyen.com/). |

## Identify payout-related webhooks

You can identify transfer webhooks triggered by payout-related events by looking at the following values:

| Parameter                                                                                                                              | Description                                                                | Value            |
| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ---------------- |
| [category](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-category)   | The category of the transfer.                                              | **bank**         |
| [direction](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-direction) | The direction of the transfer from the perspective of the balance account. | **outgoing**     |
| [type](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-type)           | The type of the transfer.                                                  | **bankTransfer** |

Adyen sends webhooks for the following payout events:

* [Payout transfer initiated](#payout-transfer-initiated)
* [Payout transfer authorized](#payout-transfer-authorised)
* [Payout transfer booked](#payout-transfer-booked)
* [Payout transfer pending](#payout-transfer-pending)
* [Payout transfer failed](#payout-transfer-failed)
* [Payout transfer tracking](#payout-transfer-tracking)
* [Payout transfer tracing](#payout-transfer-tracing)
* [Payout transfer credited](#payout-transfer-credited)
* [Payout transfer returned](#payout-transfer-returned)

The following sections provide code samples for the events that trigger webhooks. These samples consider a use case where you pay out EUR 100.00 from a balance account to a third-party bank account.

## Payout transfer initiated

After the transfer request for a payout is triggered, Adyen sends a [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhook event to inform your server that an outgoing transfer request has been created. The webhook provides information about the transfer, such as:

* The `amount` of the payout.
* The `reference` for the payout.
* The `referenceForBeneficiary`.
* Your user's `balanceAccount` from which the funds will be deducted.
* Details of the `accountHolder` linked to your user's balance account.
* Details of the `counterparty` in the transfer, which is your user's transfer instrument.

**Transfer initiated**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "currency": "EUR",
        "received": -10000
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
        "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 1,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "received",
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.created"
}
```

## Payout transfer authorised

When the transfer request for the payout is authorized, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event to inform your server that the transfer amount has been reserved on the account. This webhook includes the `status` **authorised**.

**Transfer authorised**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "currency": "EUR",
        "received": 0,
        "reserved": -10000
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
        "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 2,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "authorised",
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer booked

When the funds are deducted from your user's balance account, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event with:

* `direction`: **outgoing**
* `status`: **booked**
* `counterparty`: details of the external transfer instrument.
* `events.transactionId`: ID of the transaction

This status is not final. Instant payouts may be rejected by the counterparty's bank and thus [fail](#payout-failed), and regular and wire transfers may be [returned](#payout-returned) by the counterparty's bank.

**Transfer booked**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": -10000,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -10000,
            "currency": "EUR",
            "received": 0,
            "reserved": 10000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 3,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "booked",
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer pending

After the funds are deducted from your user's balance account, the transfer is automatically analyzed to ensure that it complies with Adyen's policies. If a transfer is flagged, Adyen reviews the transfer.

In order to speed up the screening process and reduce the amount of manual effort needed, we recommend that you provide as much information as possible in the transfer request. For example, include all counterparty details in the [accountHolder](https://docs.adyen.com/api-explorer/transfers/latest/post/transfers#request-counterparty-bankAccount-accountHolder) object.

In this case, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event with a `tracking` event type, specifying the following `trackingData` details:

* `status`: **pending**
* `type`: **internalReview**

**Transfer pending**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": -10000,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2024-04-22T12:55:18+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2024-04-22T12:55:20+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2024-04-22T12:55:20+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2024-04-22T12:55:20+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -10000,
            "currency": "EUR",
            "received": 0,
            "reserved": 10000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2024-04-22T12:55:18+02:00"
      },
      {
        "id": "6JKRLZ8LOT47J7RY",
        "trackingData": {
          "status": "pending",
          "type": "internalReview"
        },
        "type": "tracking",
        "updateDate": "2024-04-22T12:55:30+02:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 4,
    "status": "booked",
    "tracking": {
      "status": "pending",
      "type": "internalReview"
    },
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true,
      "score": 0
    },
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

After Adyen reviews the transfer details, we send a webhook to notify you of the outcome.

### Tab: Review passed

If the transfer passed the review:

* For transfers with `priority` **instant**, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook to confirm that the funds have been credited in the counterparty account. The webhook includes a `tracking` event with the tracking `status` **credited**.

  For more information, see an example of the [payout credited webhook](#payout-credited).

* For transfers with any other priority, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with the `tracking` event, specifying the `estimatedArrivalTime`. This field indicates the date and time when the funds will be credited in the counterparty bank account.

  For more information, see an example of the [payout tracking webhook](#payout-tracking).

  This status is not final. Instant payouts may be rejected by the counterparty's bank and thus [fail](#payout-failed), and regular and wire transfers may be [returned](#payout-returned) by the counterparty's bank.

### Tab: Review failed

If the transfer fails Adyen's review process, we send a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with a `tracking` event, specifying the following `trackingData`:

* `reason`: **refusedForRegulatoryReasons**
* `status`: **failed**
* `type`: **internalReview**

If this is the case, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other).

**Transfer failed review**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 1000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": -1000,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bank"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2024-04-22T12:55:18+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2024-04-22T12:55:20+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2024-04-22T12:55:20+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 1000,
            "reserved": -1000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2024-04-22T12:55:20+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -1000,
            "currency": "EUR",
            "received": 0,
            "reserved": 1000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2024-04-22T12:55:18+02:00"
      },
      {
        "id": "6JKRLZ8LOT47J7RY",
        "trackingData": {
          "status": "pending",
          "type": "internalReview"
        },
        "type": "tracking",
        "updateDate": "2024-04-22T12:55:29+02:00"
      },
      {
        "id": "6JKRLZ8LOT47J7RY",
        "trackingData": {
          "reason": "refusedForRegulatoryReasons",
          "status": "failed",
          "type": "internalReview"
        },
        "type": "tracking",
        "updateDate": "2024-04-22T12:57:28+02:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 5,
    "status": "booked",
    "tracking": {
      "reason": "refusedForRegulatoryReasons",
      "status": "failed",
      "type": "internalReview"
    },
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true,
      "score": 0
    },
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer failed

The payout transfer can fail if it is rejected by an external banking system and any automatic retries are unsuccessful. For payouts using instant bank transfers with end-to-end confirmation from the counterparty's bank, this is the status when the counterparty's bank rejects the transfer.

When a payout transfer fails, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with:

* `status`: **failed**
* The `transactionId`
* The `reason` for the failure. For more information, see [Return reason codes](#return-reason-codes).

**Transfer failed**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": 0,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -10000,
            "currency": "EUR",
            "received": 0,
            "reserved": 10000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000004",
        "mutations": [
          {
            "balance": 10000,
            "currency": "EUR",
            "received": 0
          }
        ],
        "reason": "counterpartyAccountNotFound",
        "status": "failed",
        "transactionId": "EVJN42271114222B5JB8BRC76N686ZHBG",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 4,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "failed",
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer tracking

When the transfer is completed, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event with a `tracking` event type, specifying the `estimatedArrivalTime`. This is the estimated time when the funds will be credited in the counterparty bank account.

The estimated time is based on the official clearing system regulations that outline credit fund availability requirements. If the beneficiary bank does not adhere to the official regulations, the actual time of arrival can deviate from the estimate.

Estimated Time of Arrival is currently available for all local payouts. It is *not* available for instant or cross-border payouts.

**Estimated time of arrival**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": -10000,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -10000,
            "currency": "EUR",
            "received": 0,
            "reserved": 10000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      },
      {
        "estimatedArrivalTime": "2023-03-02T07:00:00+00:00",
        "id": "EVJN00000000000000000000000004",
        "trackingData": {
          "estimatedArrivalTime": "2023-03-02T07:00:00+00:00",
          "type": "estimation"
        },
        "type": "tracking",
        "updateDate": "2023-03-01T17:59:34+01:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the transfer",
    "sequenceNumber": 4,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "booked",
    "tracking": {
      "estimatedArrivalTime": "2023-03-02T07:00:00+00:00",
      "type": "estimation"
    },
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer tracing

When you send a transfer to a transfer instrument, Adyen provides tracing data that you and your users can use to trace the transfer through the banking network.

Tracing data includes industry-standard identifiers assigned by the network that processed the transfer. You can use this data to:

* **Share with the recipient**: Give the tracing identifier to the recipient. They can provide it to their bank to locate or investigate the transfer, for example if funds are delayed or missing.
* **Contact the beneficiary bank**: Use the tracing identifier when raising an enquiry with the recipient's bank.
* **Troubleshoot failed or delayed transfers**: Reference the tracing identifier to investigate issues across the payment chain, from the sending bank to the beneficiary bank.

Adyen sends this information in a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook as a `tracing` event. The webhook includes a `tracingData` object within the `events` array. The object contains the following fields:

* `type`: The banking rail or network used for the transfer, for example `ukFps` or `usAch`.
* **A tracing identifier**: The field name depends on the network, for example `fpid` or `achTraceNumber`.

Adyen supports tracing data for the following networks:

| Region | Currency | Network                       | Tracing identifier | Field            |
| ------ | -------- | ----------------------------- | ------------------ | ---------------- |
| UK     | GBP      | Faster Payments Service (FPS) | Faster Payment ID  | `fpid`           |
| US     | USD      | FedACH                        | ACH Trace Number   | `achTraceNumber` |

The following examples show a `balancePlatform.transfer.updated` webhook with tracing data.

### Tab: Transfer sent

When the transfer funds leave Adyen, the webhook includes a `tracing` event with the `tracingData` object.

**Transfer with tracing data**

```json
{
    "data": {
        "accountHolder": {
            "description": "Your description for the account holder",
            "id": "AH00000000000000000000001",
            "reference": "Your reference for the account holder"
        },
        "amount": {
            "currency": "GBP",
            "value": 10000
        },
        "balanceAccount": {
            "description": "Your description for the balance account",
            "id": "BA00000000000000000000001",
            "reference": "Your reference for the balance account"
        },
        "balancePlatform": "YOUR_BALANCE_PLATFORM",
        "balances": [
            {
                "balance": -10000,
                "currency": "GBP",
                "received": 0,
                "reserved": 0
            }
        ],
        "category": "bank",
        "categoryData": {
            "priority": "fast",
            "type": "bankTransfer"
        },
        "counterparty": {
            "bankAccount": {
                "accountHolder": {
                    "fullName": "A. Klaassen",
                    "address": {
                        "city": "London",
                        "country": "GB",
                        "postalCode": "EC2V 6DN",
                        "line1": "1 Poultry"
                    }
                },
                "accountIdentification": {
                    "type": "ukLocal",
                    "sortCode": "202678",
                    "accountNumber": "12345678"
                }
            }
        },
        "creationDate": "2026-04-15T13:30:05+02:00",
        "description": "Your user description for the transfer",
        "direction": "outgoing",
        "events": [
            {
                "bookingDate": "2026-04-15T13:30:18+02:00",
                "id": "EVJN00000000000000000000000001",
                "mutations": [
                    {
                        "currency": "GBP",
                        "received": -10000
                    }
                ],
                "status": "received",
                "type": "accounting"
            },
            {
                "bookingDate": "2026-04-15T13:30:18+02:00",
                "id": "EVJN00000000000000000000000002",
                "mutations": [
                    {
                        "currency": "GBP",
                        "received": 10000,
                        "reserved": -10000
                    }
                ],
                "status": "authorised",
                "type": "accounting"
            },
            {
                "bookingDate": "2026-04-15T13:30:18+02:00",
                "id": "EVJN00000000000000000000000003",
                "mutations": [
                    {
                        "balance": -10000,
                        "currency": "GBP",
                        "received": 0,
                        "reserved": 10000
                    }
                ],
                "status": "booked",
                "transactionId": "EVJN00000000000000000000000000001",
                "type": "accounting",
                "valueDate": "2026-04-16T12:58:25+02:00"
            },
            {
                "estimatedArrivalTime": "2026-04-17T07:00:00+00:00",
                "id": "EVJN00000000000000000000000004",
                "trackingData": {
                    "estimatedArrivalTime": "2026-04-17T07:00:00+00:00",
                    "type": "estimation"
                },
                "type": "tracking",
                "updateDate": "2026-04-16T17:59:34+02:00"
            },
            {
                "id": "EVJN00000000000000000000000005",
                "type": "tracing",
                "updateDate": "2026-04-16T12:58:27+02:00",
                "tracingData": {
                    "type": "ukFps",
                    "fpid": "1A2B3C4D5E6F7G8H 2940082263052082749"
                }
            }
        ],
        "id": "1A2B3C4D5E6F7G8H",
        "reason": "approved",
        "reference": "Your user reference for the transfer",
        "referenceForBeneficiary": "Your user reference for the transfer",
        "sequenceNumber": 5,
        "transactionRulesResult": {
            "allHardBlockRulesPassed": true
        },
        "status": "booked",
        "tracking": {
            "estimatedArrivalTime": "2026-04-17T07:00:00+00:00"
        },
        "type": "bankTransfer"
    },
    "environment": "test",
    "type": "balancePlatform.transfer.updated"
}
```

### Tab: Transfer returned

If the counterparty bank returns the funds, the webhook includes a `networkReason` object with the error details from the payment network. The transfer status changes to `returned`.

The `networkReason` object includes:

* `code`: The reason code from the payment network.
* `description`: An explanation of the reason code.
* `namespace`: The standard used by the network, for example `iso20022TransactionReasonCode` or `iso8583ResponseCode`.

Adyen maps the network-specific reason codes to Adyen reason codes in the `reason` field. You can use these codes to handle failures consistently across all regions and networks. Some reasons indicate temporary issues that you can resolve by retrying the transfer. Others indicate a permanent problem with the bank account details.

For a list of Adyen reason codes, see [Reason codes](#return-reason-codes).

The following example shows a returned transfer with both `tracingData` and `networkReason` objects.

**Returned transfer with network reason**

```json
{
    "data": {
        "accountHolder": {
            "description": "Your description for the account holder",
            "id": "AH00000000000000000000001",
            "reference": "Your reference for the account holder"
        },
        "amount": {
            "currency": "GBP",
            "value": 10000
        },
        "balanceAccount": {
            "description": "Your description for the balance account",
            "id": "BA00000000000000000000001",
            "reference": "Your reference for the balance account"
        },
        "balancePlatform": "YOUR_BALANCE_PLATFORM",
        "balances": [
            {
                "balance": 0,
                "currency": "GBP",
                "received": 0,
                "reserved": 0
            }
        ],
        "category": "bank",
        "categoryData": {
            "priority": "fast",
            "type": "bankTransfer"
        },
        "counterparty": {
            "bankAccount": {
                "accountHolder": {
                    "fullName": "A. Klaassen",
                    "address": {
                        "city": "Amsterdam",
                        "country": "NL",
                        "postalCode": "1011DJ",
                        "stateOrProvince": "NH",
                        "line1": "Simon Carmiggeltstraat 6-50"
                    }
                },
                "accountIdentification": {
                    "type": "ukLocal",
                    "sortCode": "202678",
                    "accountNumber": "12345678"
                }
            }
        },
        "creationDate": "2023-02-28T13:30:05+02:00",
        "description": "Your user description for the transfer",
        "direction": "outgoing",
        "events": [
            {
                "bookingDate": "2023-02-28T13:30:18+02:00",
                "id": "EVJN00000000000000000000000001",
                "mutations": [
                    {
                        "currency": "GBP",
                        "received": -10000
                    }
                ],
                "status": "received",
                "type": "accounting"
            },
            {
                "bookingDate": "2023-02-28T13:30:18+02:00",
                "id": "EVJN00000000000000000000000002",
                "mutations": [
                    {
                        "currency": "GBP",
                        "received": 10000,
                        "reserved": -10000
                    }
                ],
                "status": "authorised",
                "type": "accounting"
            },
            {
                "bookingDate": "2023-02-28T13:30:18+02:00",
                "id": "EVJN00000000000000000000000003",
                "mutations": [
                    {
                        "balance": -10000,
                        "currency": "GBP",
                        "received": 0,
                        "reserved": 10000
                    }
                ],
                "status": "booked",
                "transactionId": "EVJN42272224222B5JB8BRC84N686ZGBP",
                "type": "accounting",
                "valueDate": "2023-03-01T12:58:25+01:00"
            },
            {
                "estimatedArrivalTime": "2023-03-02T07:00:00+00:00",
                "id": "EVJN00000000000000000000000004",
                "trackingData": {
                    "estimatedArrivalTime": "2023-03-02T07:00:00+00:00",
                    "type": "estimation"
                },
                "type": "tracking",
                "updateDate": "2023-03-01T17:59:34+01:00"
            },
            {
                "id": "EVJN00000000000000000000000005",
                "type": "tracing",
                "updateDate": "2023-03-01T12:58:27+01:00",
                "tracingData": {
                    "type": "ukFps",
                    "fpid": "1A2B3C4D5E6F7G8H 2940082263052082749"
                }
            },
            {
                "bookingDate": "2023-02-28T13:30:18+02:00",
                "id": "EVJN00000000000000000000000006",
                "mutations": [
                    {
                        "balance": 10000,
                        "currency": "GBP",
                        "received": 0
                    }
                ],
                "reason": "counterpartyAccountBlocked",
                "networkReason": {
                    "code": "1161",
                    "description": "Beneficiary Account Stopped",
                    "namespace": "ukFpsRejectionCode"
                },
                "status": "returned",
                "transactionId": "EVJN00000000000000000000000000002",
                "type": "accounting",
                "valueDate": "2023-03-01T12:58:25+01:00"
            }
        ],
        "id": "1A2B3C4D5E6F7G8H",
        "reason": "counterpartyAccountBlocked",
        "networkReason": {
            "code": "1161",
            "description": "Beneficiary Account Stopped",
            "namespace": "ukFpsRejectionCode"
        },
        "reference": "Your user reference for the transfer",
        "referenceForBeneficiary": "Your user reference for the transfer",
        "sequenceNumber": 6,
        "transactionRulesResult": {
            "allHardBlockRulesPassed": true
        },
        "status": "returned",
        "type": "bankTransfer"
    },
    "environment": "test",
    "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer credited

If a transfer with `priority` **instant** is completed, then Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event to confirm that the funds have been credited. The webhook includes a `tracking` event type with the tracking `status` **credited**.

**Transfer credited**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": -10000,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "instant",
      "type": "bankTransfer"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -10000,
            "currency": "EUR",
            "received": 0,
            "reserved": 10000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      },
      {
        "id": "EVJN00000000000000000000000004",
        "status": "credited",
        "trackingData": {
          "status": "credited",
          "type": "confirmation"
        },
        "type": "tracking",
        "updateDate": "2023-03-01T12:58:25+01:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the beneficiary",
    "sequenceNumber": 4,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "booked",
    "tracking": {
      "status": "credited",
      "type": "confirmation"
    },
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

## Payout transfer returned

If the payout transfer is returned by the counterparty's bank, then Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event with:

* `status`: **returned**
* The `transactionId`
* The `reason` for not accepting the transfer. For more information, see [Reason codes](#return-reason-codes).

**Transfer returned**

```json
{
  "data": {
    "accountHolder": {
      "description": "Your description for the account holder",
      "id": "AH00000000000000000000001",
      "reference": "Your reference for the account holder"
    },
    "amount": {
      "currency": "EUR",
      "value": 10000
    },
    "balanceAccount": {
      "description": "Your description for the balance account",
      "id": "BA00000000000000000000001",
      "reference": "Your reference for the balance account"
    },
    "balancePlatform": "YOUR_BALANCE_PLATFORM",
    "balances": [
      {
        "balance": 0,
        "currency": "EUR",
        "received": 0,
        "reserved": 0
      }
    ],
    "category": "bank",
    "categoryData": {
      "priority": "regular",
      "type": "bankTransfer"
    },
    "counterparty": {
      "transferInstrumentId": "SE00000000000000000000001"
    },
    "creationDate": "2023-02-28T13:30:05+02:00",
    "description": "Your user description for the transfer",
    "direction": "outgoing",
    "events": [
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000001",
        "mutations": [
          {
            "currency": "EUR",
            "received": -10000
          }
        ],
        "status": "received",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000002",
        "mutations": [
          {
            "currency": "EUR",
            "received": 10000,
            "reserved": -10000
          }
        ],
        "status": "authorised",
        "type": "accounting"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000003",
        "mutations": [
          {
            "balance": -10000,
            "currency": "EUR",
            "received": 0,
            "reserved": 10000
          }
        ],
        "status": "booked",
        "transactionId": "EVJN42272224222B5JB8BRC84N686ZEUR",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      },
      {
        "bookingDate": "2023-02-28T13:30:18+02:00",
        "id": "EVJN00000000000000000000000004",
        "mutations": [
          {
            "balance": 10000,
            "currency": "EUR",
            "received": 0
          }
        ],
        "reason": "counterpartyAccountNotFound",
        "status": "returned",
        "transactionId": "EVJN42271114222B5JB8BRC76N686ZHBG",
        "type": "accounting",
        "valueDate": "2023-03-01T12:58:25+01:00"
      }
    ],
    "id": "6JKRLZ8LOT47J7RY",
    "reason": "approved",
    "reference": "Your user reference for the transfer",
    "referenceForBeneficiary": "Your user reference for the transfer",
    "sequenceNumber": 4,
    "transactionRulesResult": {
      "allHardBlockRulesPassed": true
    },
    "status": "returned",
    "type": "bankTransfer"
  },
  "environment": "test",
  "type": "balancePlatform.transfer.updated"
}
```

### Return reason

Adyen includes a `reason` in the [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook event to keep you informed about why the transfer was returned. The [return reason codes](#return-reason-codes) are based on the response Adyen receives from the user's bank. Some reasons indicate temporary issues that can be resolved when you retry the transfer. Others signify a permanent problem with the user's bank account details and require new bank details before you retry.

Adyen blocks subsequent transfer attempts when a reason code indicates a permanent issue. When a transfer instrument is blocked, new transfer requests made with the user's bank account fail with a 422, "[Transfers to counterparty bank account is blocked.](/platforms/custom-payouts/on-demand-payouts#transfers-to-counterparty-bank-account-is-blocked)" error.

Refer to the [reason codes](#return-reason-codes) table below for a list of reason codes we recommend to retry.

## Return reason codes

The following table describes the reasons why a transfer may be rejected or returned by the counterparty's bank.

| Reason code                   | Description                                                                                                                                            | Remediating action                                                                                                                                                           |   |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - |
| `amountLimitExceeded`         | The counterparty's bank or the payment system rejected this transfer because the value is too high.                                                    | Retry the transfer with a lower amount or with a different route.                                                                                                            |   |
| `counterpartyBankUnavailable` | The counterparty's bank is unavailable for real-time processing.                                                                                       | Retry the transfer later or with a different route.                                                                                                                          |   |
| `counterpartyAccountNotFound` | The counterparty's bank is unable to locate the account with the provided details.                                                                     | Check the bank account details provided in the transfer and retry.                                                                                                           |   |
| `counterpartyAccountClosed`   | The counterparty's bank reported that the account exists, but it is closed.                                                                            | Check the bank account details provided in the transfer and retry.                                                                                                           |   |
| `counterpartyAccountBlocked`  | The counterparty's bank reported that the account is blocked or suspended.                                                                             | Check the bank account details provided in the transfer and retry.                                                                                                           |   |
| `counterpartyAddressRequired` | The counterparty's bank requires the account holder's address to credit this transfer to the account.                                                  | Retry the transfer with full street address.                                                                                                                                 |   |
| `counterpartyBankTimedOut`    | The counterparty's bank timed out while trying to process this request in real-time.                                                                   | Retry the transfer later or with a different route.                                                                                                                          |   |
| `declinedByTransactionRule`   | Adyen declined the transfer because it did not comply with one or more [transaction rules](/business-accounts/transaction-rules/) set by you or Adyen. | Check the transaction rules that are blocking the transfer to confirm if this outcome is expected. If this is not the expected outcome, try updating your transaction rules. |   |
| `refusedByCounterpartyBank`   | The counterparty's bank refused the transfer without providing any further information regarding the underlying reason.                                | Check the bank account details provided in the transfer and/or contact the counterparty's bank.                                                                              |   |
| `unknown`                     | No specific reason is known by Adyen for the failure, or the reported reason does not correspond to any of the codes above.                            | Check the bank account details provided in the transfer and retry. If problem persists, further manual investigation might be needed.                                        |   |

## See also

* [Pay out on a schedule](/platforms/custom-payouts/scheduled-payouts/)
* [Pay out on demand](/platforms/custom-payouts/on-demand-payouts/)
* [Transfer routes](/platforms/custom-payouts/transfer-routes/)
