---
title: "Use transaction rules"
description: "Evaluate outgoing transfer requests from business accounts with predefined conditions and outcomes."
url: "https://docs.adyen.com/business-accounts/transaction-rules"
source_url: "https://docs.adyen.com/business-accounts/transaction-rules.md"
canonical: "https://docs.adyen.com/business-accounts/transaction-rules"
last_modified: "2022-04-04T12:45:00+02:00"
language: "en"
---

# Use transaction rules

Evaluate outgoing transfer requests from business accounts with predefined conditions and outcomes.

[View source](/business-accounts/transaction-rules.md)

**Limited availability**\
Transaction rules for business accounts are currently in pilot phase. Some of the processes and documentation may change as the feature evolves. If you are interested in piloting transaction rules or have any feedback, reach out to your Adyen contact.

***

When your users send funds to third party bank accounts, you can protect your balance platform from risk by evaluating and declining suspicious transfer requests. You can use transaction rules to configure a logic that automatically declines an outgoing transfer that does not meet your business' requirements.

We recommend that you use transaction rules to make decisions based on request data and static conditions: for example, a fixed list of banks that your user must not pay out funds to.

## Transaction rule creation

When creating transaction rules, you must determine the following:

1. **Criteria**: The [criteria](#criteria) that determine when a transfer is evaluated with the rule. For example, if the transfer occurs in a specific time interval or if it applies to a specific resource in your balance platform. To define the rule criteria, you must consider the following:

   | Criterion                        | Description                                                                                                                                                                                                                         |
   | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
   | Request type                     | Defines the `type` of transfer request to which you want to apply the rule. For transfers to third parties, set this to **bankTransfer**.                                                                                           |
   | [Rule type](#rule-types)         | Defines what data the rule must use to analyze the transfer and check whether it meets the conditions. The rule either uses only the data of the current transfer being analyzed, or uses accumulated data from previous transfers. |
   | [Time interval](#time-intervals) | Defines the time period in which a transfer must meet the rule conditions.                                                                                                                                                          |
   | [Entity](#entity)                | Defines the balance platform resource to which the rule applies.                                                                                                                                                                    |

2. **Conditions**: The [conditions](#conditions) that a transfer must meet for the rule's outcome to be applied. For example, if it contains certain request data.

3. **Outcome**: The outcome to apply when the transfer is evaluated and meets the conditions of the rule, such as to decline the transfer. This is called a hard-block outcome.

## How it works

1. You create a transaction rule by defining the criteria, conditions, and outcome.

2. Your user makes an outgoing transfer to a third-party bank account.

3. If the transfer meets the criteria of the transaction rule, Adyen evaluates the transfer using the rule.

4. If the transfer meets the conditions defined in the transaction rule, Adyen applies the outcome of the rule.

## Criteria

### Rule types

The rule type defines what data the rule uses to analyze and decide the outcome of a transfer request. Adyen can use the data of the current transfer, or use accumulated data from previous transfers.

The following rule types are available:

* Blocklist: decline a transfer if it meets the specified [conditions](#conditions). For example, block all transactions where the counterparty is **Bank 123**.
* Velocity: decline a transfer if a set amount of accumulated previous transfers have met the specified [conditions](#conditions). Adyen only considers previous transfers within a specified [time interval](#time-intervals). You can only [accumulate transfers](#accumulate-data) at the balance account level.

### Time intervals

The time interval defines the period when the rule conditions and outcome apply. When using a **velocity** [rule type](#rule-types) which looks at accumulated data, the time interval also determines when the accumulated count or value is reset.

The interval also determines when counters are reset if the rule is accumulating data.

The following types of time intervals are available:

| Type of time interval | Description                                                                                                                                                                                                                                                                                                                | Example                                                                                                                                                                                                                                                                                                                            |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Per transaction**   | The rule only uses data from the current transfer to make a decision. The outcome also applies only to the current transfer request.                                                                                                                                                                                       | You can set a rule that allows a user to transfer a maximum of EUR 5000 per transfer request.                                                                                                                                                                                                                                      |
| **Fixed interval**    | The rule uses data from transfers made within the specified time interval, such as the ongoing day, week, or month. The outcome applies to the current transfer and all following transfers until the end of the interval.                                                                                                 | You can set a rule that allows a user to transfer a maximum of EUR 1000 from their account in a day. In this case, Adyen accumulates the data of all the outgoing transfers from that account within the current day. If the user exceeds the EUR 1000 limit, all subsequent transfer request are declined until the next day.     |
| **Rolling interval**  | The rule uses conditions that are applied and counters are reset based on a start time, timezone, and duration that you define. The outcome applies to the current transfer and all following transfers until the end of the interval.                                                                                     | You can set a rule that allows a user to transfer a maximum of EUR 5000 from their account within a week. You can specify a schedule for that week that starts every Monday, for a duration of seven days. If the user exceeds the EUR 5000 limit, all subsequent transfer requests are declined until the start of the next week. |
| **Sliding interval**  | The rule uses data from transfers that occurred within a specified time interval previous to the current transfer. For example, Adyen can check transfers made in the previous minutes, hours, or days. The outcome applies to the current transfer and all following transfer requests until the specified interval ends. | You can set a rule that allows a user to make a maximum of five transfer requests within an hour. If the user makes five transfer requests in less than an hour, all subsequent transfers are declined until the next hour.                                                                                                        |

### Entity to which the rule applies

Each transaction rule must be applied to only one resource.

You can apply a transaction rule to any of the following resources:

* A balance account (business account): the rule applies to a business account.
* An account holder: the rule applies to all business accounts linked to an account holder.
* A balance platform: the rule applies to all business accounts and account holders on your balance platform.

If multiple rules apply to an account, Adyen prioritizes the rules according to the [hierarchy of transaction rules](#hierarchy-for-transaction-rules).

#### Aggregating total amount or number of transactions

If you choose the [velocity rule type](#rule-types), the transfer data is always accumulated and aggregated at the balance account level, in the time interval you specified. For example, you can set a maximum total amount for the aggregated total of all transfers linked to a balance account in the past 24 hours. When aggregating amounts, we convert all transfer amounts to the default currency of the account holder or balance platform.

## Conditions

Conditions define the data that a transfer must contain for the outcome to be applied. Transaction rules check whether the transfer meets all of the conditions before accepting or declining the transfer. We refer to these conditions as *rule restrictions*.

A rule restrictions consists of the following:

* `value`: one or more types of transfer data that a transfer must or must not contain, such as the country code, the merchant category code, or the start time and end time.

* `operation`: the operation type, which determines how a transfer's data must be evaluated against the values specified in the `value` array. For example:

  * The transfer's merchant category code can *Match any* of the codes you specify in `value`.
  * The transfer's country code *Does not match* any of the country codes you specify in `value`.
  * The total amount of the transfer *Equals*, is *greater than or equal to*, or is *less than* the total amount you specify in `value`.

| Rule restriction name          | Available values                                                                                                                                                          | Available operation types                                                         | Description                                                                                                                                                                                      |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `counterpartyAccounts`         | - `type`: iban, numberAndBic, auLocal, czLocal, noLocal, plLocal, huLocal, seLocal, sgLocal, ukLocal, usLocal, brLocal, dkLocal, caLocal, nzLocal, hkLocal.               | anyMatch, noneMatch                                                               | Evaluates whether the counterparty's bank account type in the transfer request matches the account types specified in `counterpartyAccount.value`.                                               |
| `counterpartyBank`             | * `country`: two-character ISO 3166-1 alpha-2 country code.
* `identification`: the bank identification code.
* `identificationType`: iban, routingNumber, sortCode, bic. | anyMatch, noneMatch                                                               | Evaluates whether the bank account details of the counterparty in the transfer request match the details specified in `counterpartyBank.value`.                                                  |
| `counterpartyCountries`        | Two-character ISO 3166-1 alpha-2 country code.                                                                                                                            | anyMatch, noneMatch                                                               | Evaluates whether the counterparty's country in the transfer request matches any of the countries specified in `counterpartyCountries.value`                                                     |
| `counterpartyNames`            | Array of allowed counterparty names.                                                                                                                                      | anyMatch, noneMatch                                                               | Evaluates whether the counterparty's name in the transfer request matches any of the counterparty names specified in `counterpartyNames.value`                                                   |
| `descriptions`                 | Array of allowed transfer descriptions.                                                                                                                                   | anyMatch, noneMatch                                                               | Evaluates whether the transfer's `description` matches any of the descriptions specified in `descriptions.value`.                                                                                |
| `matchingTransactions`         | An integer indicating the total number of allowed transactions.                                                                                                           | equals, notEquals, greaterThanOrEqualTo, greaterThan, lessThanOrEqualTo, lessThan | Evaluates the total number of transfers against the number specified in `matchingTransactions.value`.                                                                                            |
| `percentageOfAvailableBalance` | An integer between 0 and 100                                                                                                                                              | notEquals, greaterThanOrEqualTo, greaterThan, lessThanOrEqualTo, lessThan         | Evaluates the amount of the transfer as a percentage of the available balance in the balance account, and compares it to the percentage specified in `percentageOfAvailableBalance.value`.       |
| `platformActions`              | intraBank, instant, fast, regular, crossBorder                                                                                                                            | anyMatch, noneMatch                                                               | Evaluates whether the priority of a transfer matches any of the priorities specified in `platformActions.value`                                                                                  |
| `sameAmountRestriction`        | true, false                                                                                                                                                               | equals                                                                            | Can only be used together with `matchingTransactions`. Evaluates whether the number of transfer requests with the same amount exceeds the number specified in `matchingTransactions.value`       |
| `sameCounterpartyRestriction`  | true, false                                                                                                                                                               | equals                                                                            | Can only be used together with `matchingTransactions`. Evaluates whether the number of transfer requests with the same counterparty exceeds the number specified in `matchingTransactions.value` |
| `sourceAccountTypes`           | businessAccount                                                                                                                                                           | anyMatch, noneMatch                                                               | Evaluates whether the type of the source account in the transfer matches any of the account types specified in `sourceAccountTypes.value`.                                                       |
| `totalAmount`                  | - `currency`: The three-character ISO currency code.
- `value`: total allowed amount, in minor units.                                                                     | notEquals, greaterThanOrEqualTo, greaterThan, lessThanOrEqualTo, lessThan         | Evaluates the total amount of all transfers against the amount specified in `totalAmount.value`.                                                                                                 |

## Outcome

The outcome determines what Adyen does when a transaction meets the conditions of a rule. Currently, you can only select a **hardBlock** outcome type. This means that a transaction is declined when it meets the conditions of a rule

## Hierarchy for transaction rules

You can create a rule with one or more conditions, and apply one or more rules to an entity. When your

user makes a transfer, Adyen evaluates all of the applicable rules.

### Multiple conditions

If you have multiple conditions within one rule, Adyen applies the outcome if the transfer meets all the conditions within the rule.

### Multiple rules

If you have multiple rules tied to an entity, Adyen evaluates all the rules. If the transaction meets the condition of at least one rule with a **hardBlock** outcome type, we decline the transaction.

You can create transaction rules that override other transaction rules in specific circumstances, such as for a specific balance platform resource. For more information, see [Override a transaction rule](/business-accounts/transaction-rules/create-and-manage#override-an-existing-transaction-rule).

## Get updates when a rule is triggered

To get updated about payouts that are declined because they triggered one or more transaction rules, you can use either webhook notifications or the Customer Area:

* Subscribe to the [Transfer webhooks](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/overview). The [transactionRulesResult](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-transactionRulesResult) object contains the details of all the transactions rules that the payout triggered. The [reason](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-reason) field returns **declinedByTransactionRule**.
* In your [Customer Area](https://ca-test.adyen.com/), go to **Transactions** > **Transfers**, and click on a declined transfer. You can see all the transactions rules that the transfer triggered.

## Next steps

[required](/business-accounts/transaction-rules/create-and-manage/)

[Create transaction rules](/business-accounts/transaction-rules/create-and-manage/)

[Send an API request to create transaction rules.](/business-accounts/transaction-rules/create-and-manage/)
