***
title: Multi-Fee Support
description: >-
Collect fees for multiple recipients in a single swap using the Swap and
Gasless APIs.
-------------
The Swap and Gasless APIs support collecting fees for **multiple recipients in a single transaction**. This is useful for use cases like revenue sharing between a protocol and a frontend, splitting fees between partners, or distributing fees across multiple treasury addresses — all without requiring multiple transactions or custom contracts.
## Overview
Both `swapFeeRecipient` and `swapFeeBps` accept **comma-separated lists**, allowing you to define multiple fee recipients, each with their own fee rate.
Each fee is:
* Collected in the `swapFeeToken` (the buy token by default)
* Delivered directly to the specified recipient address
* Reported individually in the response under `fees.integratorFees`
## Parameters
The wallet address(es) to receive trading fees. Accepts a single address or multiple comma-separated addresses.
**Example:** `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359`
When providing multiple values, the list must be the same length as `swapFeeBps`. You must also specify `swapFeeBps` to use this parameter.
The fee amount(s) in basis points (Bps) to charge per recipient. Accepts a single value or multiple comma-separated values.
**Example:** `5,10`
When providing multiple values, the list must be the same length as `swapFeeRecipient`. The default maximum is **1000 Bps** per recipient. [Contact us](mailto:support@0x.org) if your integration requires a higher limit.
`swapFeeRecipient` and `swapFeeBps` are co-dependent — you must specify both
together. When using multiple fees, both lists must be the same length and
positionally matched (index 0 of `swapFeeBps` applies to index 0 of
`swapFeeRecipient`, and so on).
## Example Request
The following examples split fees between two recipient addresses — 5 Bps to `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045` and 10 Bps to `0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359`.
```bash cURL
curl "https://api.0x.org/swap/allowance-holder/price\
?chainId=1\
&buyToken=0xdac17f958d2ee523a2206206994597c13d831ec7\
&sellToken=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\
&sellAmount=100000000\
&taker=0x70a9f34f9b34c64957b9c401a97bfed35b95049e\
&swapFeeRecipient=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045,0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359\
&swapFeeBps=5,10" \
-H "0x-api-key: "
```
```typescript TypeScript
const feeRecipients = [
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359",
];
const feeBps = [5, 10];
const params = new URLSearchParams({
chainId: "1",
buyToken: "0xdac17f958d2ee523a2206206994597c13d831ec7",
sellToken: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
sellAmount: "100000000",
taker: "0x70a9f34f9b34c64957b9c401a97bfed35b95049e",
swapFeeRecipient: feeRecipients.join(","),
swapFeeBps: feeBps.join(","),
});
const response = await fetch(
`https://api.0x.org/swap/allowance-holder/price?${params}`,
{
headers: {
"0x-api-key": process.env.ZEROX_API_KEY!,
"0x-version": "v2",
},
},
);
const data = await response.json();
// Access full fee breakdown
const fees = data.fees.integratorFees;
fees.forEach((fee, i) => {
console.log(
`Recipient ${feeRecipients[i]} receives ${fee.amount} of ${fee.token}`,
);
});
```
```python Python
import os
import requests
fee_recipients = [
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359",
]
fee_bps = [5, 10]
params = {
"chainId": "1",
"buyToken": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"sellToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"sellAmount": "100000000",
"taker": "0x70a9f34f9b34c64957b9c401a97bfed35b95049e",
"swapFeeRecipient": ",".join(fee_recipients),
"swapFeeBps": ",".join(str(b) for b in fee_bps),
}
response = requests.get(
"https://api.0x.org/swap/allowance-holder/price",
params=params,
headers={"0x-api-key": os.environ["ZEROX_API_KEY"]},
)
data = response.json()
# Access full fee breakdown
for i, fee in enumerate(data["fees"]["integratorFees"]):
print(f"Recipient {fee_recipients[i]} receives {fee['amount']} of {fee['token']}")
```
## Example Response
When multiple fees are configured, the response includes both the legacy `integratorFee` field (containing the first fee, for backwards compatibility) and the new `integratorFees` array (containing all fees):
```json
{
"fees": {
"integratorFee": {
"amount": "49989",
"token": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"type": "volume"
},
"integratorFees": [
{
"amount": "49989",
"token": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"type": "volume"
},
{
"amount": "99978",
"token": "0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359",
"type": "volume"
}
],
"zeroExFee": {
"amount": "149968",
"token": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"type": "volume"
},
"gasFee": null
}
}
```
`fees.integratorFee` is retained for backwards compatibility and always
reflects the **first** fee in the list. Use `fees.integratorFees` to access
the full breakdown of all fees.
Each entry in `integratorFees` corresponds positionally to the `swapFeeRecipient` and `swapFeeBps` values in your request:
| Index | Recipient | Fee (Bps) | Amount (in buy token) |
| ----- | -------------------------------------------- | --------- | --------------------- |
| 0 | `0xdac17f958d2ee523a2206206994597c13d831ec7` | 5 | 49,989 |
| 1 | `0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359` | 10 | 99,978 |