From af96544404eb37dd77605790b8529c70f1f561f8 Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Wed, 22 Jul 2026 16:06:17 -0700 Subject: [PATCH 1/9] Add Solana Swap API monetization guide Add a new "Monetize Your App on Solana" guide covering the two monetization mechanisms now available on the Solana Swap API: - Affiliate fees (swap_fee_ppm / swap_fee_recipient / swap_fee_side), including multi-fee/multi-recipient requests, buy vs sell side, ppm-vs-bps, sequential fee compounding, fee recipient account requirements, and the per-app fee cap. - Trade surplus capture (trade_surplus_cap_ppm / trade_surplus_recipient). Also: - Register the guide in the Solana Swap API nav. - Disambiguate both monetization guide titles: "Monetize Your App on Solana" and "Monetize Your App on EVM". - Fix stale Solana Swap Instructions API-reference links (the .../solana-swap/solana-swap-swap-instructions path 404s) in important-integration-notes, faq, and api-reference-overview. --- fern/docs.yml | 3 + .../guides/monetize-your-app-using-swap.mdx | 2 +- fern/docs/pages/api-reference-overview.mdx | 2 +- fern/docs/pages/introduction/faq.mdx | 2 +- .../guides/important-integration-notes.mdx | 2 +- .../guides/monetize-your-app.mdx | 151 ++++++++++++++++++ 6 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx diff --git a/fern/docs.yml b/fern/docs.yml index 403a9336..518d34b7 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -303,6 +303,9 @@ navigation: - page: Get Started slug: get-started-with-solana-swap-api path: docs/pages/solana-swap-api/guides/get-started.mdx + - page: Monetize Your App + slug: monetize-your-app + path: docs/pages/solana-swap-api/guides/monetize-your-app.mdx - page: Important Integration Notes slug: important-integration-notes path: docs/pages/solana-swap-api/guides/important-integration-notes.mdx diff --git a/fern/docs/pages/0x-swap-api/guides/monetize-your-app-using-swap.mdx b/fern/docs/pages/0x-swap-api/guides/monetize-your-app-using-swap.mdx index 53809d73..32f2e50d 100644 --- a/fern/docs/pages/0x-swap-api/guides/monetize-your-app-using-swap.mdx +++ b/fern/docs/pages/0x-swap-api/guides/monetize-your-app-using-swap.mdx @@ -1,5 +1,5 @@ --- -title: Monetize Your App +title: Monetize Your App on EVM description: This guide covers how you can monetize your app by using the 0x Swap API. --- diff --git a/fern/docs/pages/api-reference-overview.mdx b/fern/docs/pages/api-reference-overview.mdx index 9181eb7c..f735679c 100644 --- a/fern/docs/pages/api-reference-overview.mdx +++ b/fern/docs/pages/api-reference-overview.mdx @@ -22,7 +22,7 @@ Endpoints for EVM-compatible chains (Ethereum, Arbitrum, Base, Polygon, and more Endpoints for Solana (SVM): -- **[Swap Instructions](/api-reference/solana-swap-ap-is/solana-swap/solana-swap-swap-instructions)**: Generate swap instructions for Solana tokens, returning versioned transaction data ready to sign and submit. +- **[Swap Instructions](/api-reference/solana-swap-ap-is/swap/instructions)**: Generate swap instructions for Solana tokens, returning versioned transaction data ready to sign and submit. ## Cross-Chain API diff --git a/fern/docs/pages/introduction/faq.mdx b/fern/docs/pages/introduction/faq.mdx index 09ab94fb..38ccc482 100644 --- a/fern/docs/pages/introduction/faq.mdx +++ b/fern/docs/pages/introduction/faq.mdx @@ -595,7 +595,7 @@ https://api.0x.org/gasless/quote # Request a firm quote **For an integrator fee address:** No. You should assume the fee recipient ATA must already exist. If it may not exist, add a `createAssociatedTokenAccountIdempotent` instruction for the fee recipient + fee token mint yourself, **before** the swap/fee transfer path. See the [Integrator Byte Costs](/svm/solana-swap-api/guides/integrator-byte-costs) guide for how to account for the extra bytes this adds. - The relevant field is [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/solana-swap/solana-swap-swap-instructions#swap_fee_recipient) — it accepts either a wallet address (for native SOL output) or a valid token account address (for token outputs). + The relevant field is [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) — it accepts either a wallet address (for native SOL output) or a valid token account address (for token outputs). diff --git a/fern/docs/pages/solana-swap-api/guides/important-integration-notes.mdx b/fern/docs/pages/solana-swap-api/guides/important-integration-notes.mdx index 41aefaa1..e5c0d5a3 100644 --- a/fern/docs/pages/solana-swap-api/guides/important-integration-notes.mdx +++ b/fern/docs/pages/solana-swap-api/guides/important-integration-notes.mdx @@ -24,7 +24,7 @@ We currently return **a single flat array of instructions.** Here's what’s cur - **Setup Instructions (N):** - These create associated token accounts (ATAs) for the user (`taker`) as needed. This uses `createIdempotent`, so instructions won’t fail if an ATA already exists. - The number of instructions (`N`) depends on how many tokens the route involves, sometimes there may be 1 extra instruction for native SOL support (for certain DEXs). - - **Integrator fee recipient ATAs are not created automatically.** The [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/solana-swap/solana-swap-swap-instructions#swap_fee_recipient) field accepts either a wallet address (for native SOL output) or a valid token account address (for token outputs). If you're collecting fees on a token output, the token account you pass must already exist — 0x will not create it. If it may not exist, add a `createAssociatedTokenAccountIdempotent` instruction for the fee recipient + fee token mint **before** the swap/fee transfer path. See the [Integrator Byte Costs](/svm/solana-swap-api/guides/integrator-byte-costs) guide for how to account for those extra bytes. + - **Integrator fee recipient ATAs are not created automatically.** The [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) field accepts either a wallet address (for native SOL output) or a valid token account address (for token outputs). If you're collecting fees on a token output, the token account you pass must already exist — 0x will not create it. If it may not exist, add a `createAssociatedTokenAccountIdempotent` instruction for the fee recipient + fee token mint **before** the swap/fee transfer path. See the [Integrator Byte Costs](/svm/solana-swap-api/guides/integrator-byte-costs) guide for how to account for those extra bytes. - **Swap Instruction (1):** - A single instruction on our [**Settler**](https://github.com/0xProject/0x-settler) program to perform the actual swap. - **Cleanup Instructions (as required):** diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx new file mode 100644 index 00000000..a909696e --- /dev/null +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -0,0 +1,151 @@ +--- +title: Monetize Your App on Solana +description: This guide covers how you can monetize your app by using the 0x Solana Swap API. +--- + +## Introduction + +Integrate in-app swaps to let users trade seamlessly and at the best prices across Solana's top DEXs. As your app grows, you can monetize those trades with low-friction strategies to generate revenue and build a sustainable business. + +See our [Monetization Report](https://0x.org/reports/monetization-across-defi-report) to learn how top DeFi apps are turning trading activity into millions. + +See below for pricing guidance and code examples. + +## Monetization Options + +Out-of-the-box, the 0x Solana Swap API offers two monetization options: + +1. [Affiliate fees](/svm/solana-swap-api/guides/monetize-your-app#option-1-collect-affiliate-fees) (aka trading fee or commission) – Available on all pricing plans. +2. [Trade surplus](/svm/solana-swap-api/guides/monetize-your-app#option-2-collect-trade-surplus) (aka positive slippage) – Available to select integrators on custom plans. For assistance with setting up a custom plan, please [contact support](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). + + +⚡️ [Example code](https://github.com/0xProject/0x-examples/tree/main/solana-example) for integrating the Solana Swap API. + +⚡️ See the [Solana Swap API reference](/api-reference/solana-swap-ap-is/swap/instructions) for the full request and response schema. + + +## Option 1: Collect affiliate fees + +The 0x Solana Swap API supports one or more affiliate fees (trading fees/commissions) within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. + +To apply affiliate fees, include the following fields in the body of your [`/solana/swap-instructions` request](/api-reference/solana-swap-ap-is/swap/instructions): + +- [`swap_fee_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_ppm) — the fee amount(s) in **parts per million (ppm)**. Each entry must be between `0` and your per-app maximum (`100_000` ppm / 10% by default — see [Pricing considerations](#pricing-considerations)), and a value of `0` disables that entry. Supports single or multiple comma-separated values. +- [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) — the account(s) to receive the fees. Supports single or multiple comma-separated values, and must contain the same number of entries as `swap_fee_ppm`. +- [`swap_fee_side`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_side) — *(optional)* the side each fee is charged on: `buy` (the output token) or `sell` (the input token). Supports single or multiple comma-separated values. May be omitted only when every fee uses the default `buy` side; otherwise it must contain the same number of entries as `swap_fee_ppm`. + + +Fees on Solana are expressed in **parts per million (ppm)**, not basis points. `1_000_000` ppm = 100%, so a 1% fee is `10000` ppm and a 5% fee is `50000` ppm. (Basis points are used in the trade-plan response — see [Displaying fees](#displaying-fees) below.) + + +### Example API call + +The following request takes a single 1% fee on the buy (output) token and sends it to your fee account: + +```js +const response = await fetch("https://api.0x.org/solana/swap-instructions", { + method: "POST", + headers: { + "0x-api-key": process.env.ZEROEX_API_KEY, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + token_out: "So11111111111111111111111111111111111111112", // Buy SOL + token_in: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // Sell USDC + amount_in: 100000000, // 100 USDC (6 decimals) + taker: takerKeypair.publicKey.toBase58(), + swap_fee_ppm: "10000", // 1% fee (10,000 ppm) + swap_fee_recipient: "3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa", // Your fee account + swap_fee_side: "buy", // Collect the fee on the output token + }), +}); +``` + +### Multiple fees and recipients + +Each comma-separated position defines one fee entry, so a single request can charge several fees to several recipients across both sides: + +```json +{ + "swap_fee_ppm": "50000,25000,10000", + "swap_fee_recipient": "recipient1,recipient2,recipient3", + "swap_fee_side": "buy,buy,sell" +} +``` + +In this example, a 5% and a 2.5% fee are collected on the buy token for two different recipients, and a 1% fee is collected on the sell token for a third. + + +Fees on the **same side** are applied **sequentially**: each entry is charged on the amount remaining after the previous entries on that side have been deducted, not on the original amount. For example, two buy-side fees of `50000` and `25000` ppm produce an effective fee of ~7.38%, not 7.5%. Each fee amount is rounded up to the next base unit when needed. + + +### Buy-side vs sell-side fees + +- **`buy`** — the fee is taken from the output token. This reduces the `amount_out` and `min_amount_out` returned in the quote. +- **`sell`** — the fee is taken from the input token before the swap is routed. This reduces the amount routed into the swap. + +### Fee recipient accounts + + +0x does **not** create fee recipient token accounts for you. For token outputs, the `swap_fee_recipient` you pass must be a **token account that already exists**. For native SOL output, a wallet address is accepted. + +If the fee recipient's token account may not exist, add a `createAssociatedTokenAccountIdempotent` instruction for the recipient and fee token mint **before** the swap. Account for the extra transaction bytes using the [Integrator Byte Costs](/svm/solana-swap-api/guides/integrator-byte-costs) guide. + + +If a fee recipient is the taker's own token account for that side, the fee is treated as absent (not a self-transfer) and is omitted from the quote and the returned instructions. See [Important Integration Notes](/svm/solana-swap-api/guides/important-integration-notes) for details on fee recipient token accounts, including why 0x does not create them for you. + +### Displaying fees + +Collected fees are itemized in the trade plan returned with the quote. Each volume fee entry includes: + +- `type` — `"volume"` for affiliate fees. +- `recipientTokenAccount` — the account receiving the fee. +- `tokenMint` — the mint the fee is paid in (equal to the sell token for sell-side fees, the buy token for buy-side fees). +- `bps` — the fee rate in **basis points**. + +For the complete response schema and field descriptions, see the [API Reference](/api-reference/solana-swap-ap-is/swap/instructions). + +### Pricing considerations + +When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The affiliate fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. + +Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%) for security. The cap is enforced **per fee entry**, not on the combined total, so several fees can each be under the cap. If your application requires a higher value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). + +## Option 2: Collect trade surplus + + +Collecting trade surplus (positive slippage) is only available for select integrators on a custom pricing plan. For assistance with setting up a custom plan, please [contact support](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). + + +Trade surplus, also known as positive slippage, occurs when a user receives more tokens than their quoted amount. The following fields let you capture surplus and direct it to a specific account: + +- [`trade_surplus_cap_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.trade_surplus_cap_ppm) — the surplus cap in parts per million of the realized trade size. A value of `0` disables surplus collection for the request. +- [`trade_surplus_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.trade_surplus_recipient) — the token account that should receive the trade surplus. + +Both fields must be provided together, or both omitted. + +### How it works + +- **Token type** — surplus is always in the buy (output) token. If you want a different token (e.g. USDC), you must handle conversion yourself. +- **Cap** — the transferred amount is capped relative to the trade size by `trade_surplus_cap_ppm`. +- **Default behavior** — for integrators not on a custom plan, surplus is collected by 0x. When 0x controls trade surplus collection, the request values are ignored and the configured 0x recipient is used instead. + +### Example API call + +```js +const response = await fetch("https://api.0x.org/solana/swap-instructions", { + method: "POST", + headers: { + "0x-api-key": process.env.ZEROEX_API_KEY, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + token_out: "So11111111111111111111111111111111111111112", // Buy SOL + token_in: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // Sell USDC + amount_in: 100000000, // 100 USDC (6 decimals) + taker: takerKeypair.publicKey.toBase58(), + trade_surplus_cap_ppm: 1000000, // Cap surplus collection at 100% of trade size + trade_surplus_recipient: "3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa", // Your surplus account + }), +}); +``` From 6eeff5a2bd4b9d61b153621256010f909d347245 Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Wed, 22 Jul 2026 16:50:24 -0700 Subject: [PATCH 2/9] Clarify per-entry fee cap with an example in Solana monetization guide --- fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index a909696e..906ce7fd 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -109,7 +109,7 @@ For the complete response schema and field descriptions, see the [API Reference] When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The affiliate fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. -Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%) for security. The cap is enforced **per fee entry**, not on the combined total, so several fees can each be under the cap. If your application requires a higher value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). +Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%) for security. The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60000` ppm (6%) each are both accepted under a `100_000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). ## Option 2: Collect trade surplus From daebf69f6f1b8d141057a1efbf8888004c7545db Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Wed, 22 Jul 2026 17:14:39 -0700 Subject: [PATCH 3/9] Rename affiliate fees to volume-based fees in Solana monetization guide --- .../solana-swap-api/guides/monetize-your-app.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index 906ce7fd..a6f5fbc5 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -15,7 +15,7 @@ See below for pricing guidance and code examples. Out-of-the-box, the 0x Solana Swap API offers two monetization options: -1. [Affiliate fees](/svm/solana-swap-api/guides/monetize-your-app#option-1-collect-affiliate-fees) (aka trading fee or commission) – Available on all pricing plans. +1. [Volume-based fees](/svm/solana-swap-api/guides/monetize-your-app#option-1-collect-volume-based-fees) (aka affiliate fees, trading fees, or commission) – Available on all pricing plans. 2. [Trade surplus](/svm/solana-swap-api/guides/monetize-your-app#option-2-collect-trade-surplus) (aka positive slippage) – Available to select integrators on custom plans. For assistance with setting up a custom plan, please [contact support](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). @@ -24,11 +24,11 @@ Out-of-the-box, the 0x Solana Swap API offers two monetization options: ⚡️ See the [Solana Swap API reference](/api-reference/solana-swap-ap-is/swap/instructions) for the full request and response schema. -## Option 1: Collect affiliate fees +## Option 1: Collect volume-based fees -The 0x Solana Swap API supports one or more affiliate fees (trading fees/commissions) within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. +The 0x Solana Swap API supports one or more volume-based fees (aka affiliate fees, trading fees, or commissions) within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. -To apply affiliate fees, include the following fields in the body of your [`/solana/swap-instructions` request](/api-reference/solana-swap-ap-is/swap/instructions): +To apply volume-based fees, include the following fields in the body of your [`/solana/swap-instructions` request](/api-reference/solana-swap-ap-is/swap/instructions): - [`swap_fee_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_ppm) — the fee amount(s) in **parts per million (ppm)**. Each entry must be between `0` and your per-app maximum (`100_000` ppm / 10% by default — see [Pricing considerations](#pricing-considerations)), and a value of `0` disables that entry. Supports single or multiple comma-separated values. - [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) — the account(s) to receive the fees. Supports single or multiple comma-separated values, and must contain the same number of entries as `swap_fee_ppm`. @@ -98,7 +98,7 @@ If a fee recipient is the taker's own token account for that side, the fee is tr Collected fees are itemized in the trade plan returned with the quote. Each volume fee entry includes: -- `type` — `"volume"` for affiliate fees. +- `type` — `"volume"` for volume-based fees. - `recipientTokenAccount` — the account receiving the fee. - `tokenMint` — the mint the fee is paid in (equal to the sell token for sell-side fees, the buy token for buy-side fees). - `bps` — the fee rate in **basis points**. @@ -107,7 +107,7 @@ For the complete response schema and field descriptions, see the [API Reference] ### Pricing considerations -When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The affiliate fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. +When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The volume-based fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%) for security. The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60000` ppm (6%) each are both accepted under a `100_000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). From b3b81522cd7b988944a5439ab1d7ce34132c0995 Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Thu, 23 Jul 2026 14:22:24 -0700 Subject: [PATCH 4/9] Remove trade surplus from Solana monetization guide --- .../guides/monetize-your-app.mdx | 48 ++----------------- 1 file changed, 3 insertions(+), 45 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index a6f5fbc5..6f2aece4 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -11,12 +11,9 @@ See our [Monetization Report](https://0x.org/reports/monetization-across-defi-re See below for pricing guidance and code examples. -## Monetization Options +## Monetization -Out-of-the-box, the 0x Solana Swap API offers two monetization options: - -1. [Volume-based fees](/svm/solana-swap-api/guides/monetize-your-app#option-1-collect-volume-based-fees) (aka affiliate fees, trading fees, or commission) – Available on all pricing plans. -2. [Trade surplus](/svm/solana-swap-api/guides/monetize-your-app#option-2-collect-trade-surplus) (aka positive slippage) – Available to select integrators on custom plans. For assistance with setting up a custom plan, please [contact support](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). +Out-of-the-box, the 0x Solana Swap API lets you collect one or more volume-based fees (aka affiliate fees, trading fees, or commission) directly within a swap request, available on all pricing plans. ⚡️ [Example code](https://github.com/0xProject/0x-examples/tree/main/solana-example) for integrating the Solana Swap API. @@ -24,7 +21,7 @@ Out-of-the-box, the 0x Solana Swap API offers two monetization options: ⚡️ See the [Solana Swap API reference](/api-reference/solana-swap-ap-is/swap/instructions) for the full request and response schema. -## Option 1: Collect volume-based fees +## Collect volume-based fees The 0x Solana Swap API supports one or more volume-based fees (aka affiliate fees, trading fees, or commissions) within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. @@ -110,42 +107,3 @@ For the complete response schema and field descriptions, see the [API Reference] When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The volume-based fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%) for security. The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60000` ppm (6%) each are both accepted under a `100_000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). - -## Option 2: Collect trade surplus - - -Collecting trade surplus (positive slippage) is only available for select integrators on a custom pricing plan. For assistance with setting up a custom plan, please [contact support](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). - - -Trade surplus, also known as positive slippage, occurs when a user receives more tokens than their quoted amount. The following fields let you capture surplus and direct it to a specific account: - -- [`trade_surplus_cap_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.trade_surplus_cap_ppm) — the surplus cap in parts per million of the realized trade size. A value of `0` disables surplus collection for the request. -- [`trade_surplus_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.trade_surplus_recipient) — the token account that should receive the trade surplus. - -Both fields must be provided together, or both omitted. - -### How it works - -- **Token type** — surplus is always in the buy (output) token. If you want a different token (e.g. USDC), you must handle conversion yourself. -- **Cap** — the transferred amount is capped relative to the trade size by `trade_surplus_cap_ppm`. -- **Default behavior** — for integrators not on a custom plan, surplus is collected by 0x. When 0x controls trade surplus collection, the request values are ignored and the configured 0x recipient is used instead. - -### Example API call - -```js -const response = await fetch("https://api.0x.org/solana/swap-instructions", { - method: "POST", - headers: { - "0x-api-key": process.env.ZEROEX_API_KEY, - "Content-Type": "application/json", - }, - body: JSON.stringify({ - token_out: "So11111111111111111111111111111111111111112", // Buy SOL - token_in: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // Sell USDC - amount_in: 100000000, // 100 USDC (6 decimals) - taker: takerKeypair.publicKey.toBase58(), - trade_surplus_cap_ppm: 1000000, // Cap surplus collection at 100% of trade size - trade_surplus_recipient: "3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa", // Your surplus account - }), -}); -``` From 302ddd5cda8d05a3ef975d0bb4c5438eb07ea13b Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Thu, 23 Jul 2026 15:51:53 -0700 Subject: [PATCH 5/9] Fix Displaying fees section to reflect request-side values, not internal trade-plan shape --- .../pages/solana-swap-api/guides/monetize-your-app.mdx | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index 6f2aece4..6b085991 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -93,14 +93,11 @@ If a fee recipient is the taker's own token account for that side, the fee is tr ### Displaying fees -Collected fees are itemized in the trade plan returned with the quote. Each volume fee entry includes: +The fee you charge is fully determined by the values you send in the request, so you can display it in your UI directly from those: each `swap_fee_ppm` rate, the token it is charged in (the output token for a `buy` fee, the input token for a `sell` fee), and its `swap_fee_recipient`. -- `type` — `"volume"` for volume-based fees. -- `recipientTokenAccount` — the account receiving the fee. -- `tokenMint` — the mint the fee is paid in (equal to the sell token for sell-side fees, the buy token for buy-side fees). -- `bps` — the fee rate in **basis points**. +The quote already reflects any buy-side fees: the returned `amount_out` and `min_amount_out` are net of them, so the value you show the user as the amount received is correct as-is. Sell-side fees reduce the amount routed into the swap before the quote is produced. -For the complete response schema and field descriptions, see the [API Reference](/api-reference/solana-swap-ap-is/swap/instructions). +For the complete request and response schema, see the [API Reference](/api-reference/solana-swap-ap-is/swap/instructions). ### Pricing considerations From de5029443b2971917d8f63752afd35a9b68e6ee9 Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Thu, 23 Jul 2026 16:00:38 -0700 Subject: [PATCH 6/9] Remove stale trade-plan cross-reference and duplicate alias from Solana monetization guide --- fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index 6b085991..ea172458 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -23,7 +23,7 @@ Out-of-the-box, the 0x Solana Swap API lets you collect one or more volume-based ## Collect volume-based fees -The 0x Solana Swap API supports one or more volume-based fees (aka affiliate fees, trading fees, or commissions) within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. +The 0x Solana Swap API supports one or more volume-based fees within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. To apply volume-based fees, include the following fields in the body of your [`/solana/swap-instructions` request](/api-reference/solana-swap-ap-is/swap/instructions): @@ -32,7 +32,7 @@ To apply volume-based fees, include the following fields in the body of your [`/ - [`swap_fee_side`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_side) — *(optional)* the side each fee is charged on: `buy` (the output token) or `sell` (the input token). Supports single or multiple comma-separated values. May be omitted only when every fee uses the default `buy` side; otherwise it must contain the same number of entries as `swap_fee_ppm`. -Fees on Solana are expressed in **parts per million (ppm)**, not basis points. `1_000_000` ppm = 100%, so a 1% fee is `10000` ppm and a 5% fee is `50000` ppm. (Basis points are used in the trade-plan response — see [Displaying fees](#displaying-fees) below.) +Fees on Solana are expressed in **parts per million (ppm)**, not basis points. `1_000_000` ppm = 100%, so a 1% fee is `10000` ppm and a 5% fee is `50000` ppm. ### Example API call From 82add788d4ed0d409da73a8685bc2428668c53dc Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Mon, 27 Jul 2026 11:13:55 -0700 Subject: [PATCH 7/9] address PR comments --- .../guides/monetize-your-app.mdx | 53 +++++++------------ 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index ea172458..5c4d9154 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -5,7 +5,7 @@ description: This guide covers how you can monetize your app by using the 0x Sol ## Introduction -Integrate in-app swaps to let users trade seamlessly and at the best prices across Solana's top DEXs. As your app grows, you can monetize those trades with low-friction strategies to generate revenue and build a sustainable business. +Integrate in-app swaps to let users trade seamlessly and at the best prices across Solana's top DEXs. As your app grows, you can monetize those trades with volume-baesd fees (aka affiliate fees, trading fees, or commision) to generate revenue and build a sustainable business. Available on all pricing plans. See our [Monetization Report](https://0x.org/reports/monetization-across-defi-report) to learn how top DeFi apps are turning trading activity into millions. @@ -13,12 +13,11 @@ See below for pricing guidance and code examples. ## Monetization -Out-of-the-box, the 0x Solana Swap API lets you collect one or more volume-based fees (aka affiliate fees, trading fees, or commission) directly within a swap request, available on all pricing plans. - ⚡️ [Example code](https://github.com/0xProject/0x-examples/tree/main/solana-example) for integrating the Solana Swap API. ⚡️ See the [Solana Swap API reference](/api-reference/solana-swap-ap-is/swap/instructions) for the full request and response schema. + ## Collect volume-based fees @@ -27,44 +26,23 @@ The 0x Solana Swap API supports one or more volume-based fees within a single sw To apply volume-based fees, include the following fields in the body of your [`/solana/swap-instructions` request](/api-reference/solana-swap-ap-is/swap/instructions): -- [`swap_fee_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_ppm) — the fee amount(s) in **parts per million (ppm)**. Each entry must be between `0` and your per-app maximum (`100_000` ppm / 10% by default — see [Pricing considerations](#pricing-considerations)), and a value of `0` disables that entry. Supports single or multiple comma-separated values. -- [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) — the account(s) to receive the fees. Supports single or multiple comma-separated values, and must contain the same number of entries as `swap_fee_ppm`. -- [`swap_fee_side`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_side) — *(optional)* the side each fee is charged on: `buy` (the output token) or `sell` (the input token). Supports single or multiple comma-separated values. May be omitted only when every fee uses the default `buy` side; otherwise it must contain the same number of entries as `swap_fee_ppm`. +- [`swap_fee_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_ppm) — the fee amount(s) in **parts per million (ppm)**. Each entry must be between `0` and your per-app maximum (`100_000` ppm / 10% by default). +- [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) — the account(s) to receive the fees. +- [`swap_fee_side`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_side) — _(optional)_ the side each fee is charged on: `buy` (the output token) or `sell` (the input token). -Fees on Solana are expressed in **parts per million (ppm)**, not basis points. `1_000_000` ppm = 100%, so a 1% fee is `10000` ppm and a 5% fee is `50000` ppm. + Fees on Solana are expressed in **parts per million (ppm)**, not basis points. + `1_000_000` ppm = 100%, so a 1% fee is `10_000` ppm and a 5% fee is `50_000` + ppm. -### Example API call - -The following request takes a single 1% fee on the buy (output) token and sends it to your fee account: - -```js -const response = await fetch("https://api.0x.org/solana/swap-instructions", { - method: "POST", - headers: { - "0x-api-key": process.env.ZEROEX_API_KEY, - "Content-Type": "application/json", - }, - body: JSON.stringify({ - token_out: "So11111111111111111111111111111111111111112", // Buy SOL - token_in: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", // Sell USDC - amount_in: 100000000, // 100 USDC (6 decimals) - taker: takerKeypair.publicKey.toBase58(), - swap_fee_ppm: "10000", // 1% fee (10,000 ppm) - swap_fee_recipient: "3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa", // Your fee account - swap_fee_side: "buy", // Collect the fee on the output token - }), -}); -``` - ### Multiple fees and recipients Each comma-separated position defines one fee entry, so a single request can charge several fees to several recipients across both sides: ```json { - "swap_fee_ppm": "50000,25000,10000", + "swap_fee_ppm": "50_000,25_000,10_000", "swap_fee_recipient": "recipient1,recipient2,recipient3", "swap_fee_side": "buy,buy,sell" } @@ -73,12 +51,16 @@ Each comma-separated position defines one fee entry, so a single request can cha In this example, a 5% and a 2.5% fee are collected on the buy token for two different recipients, and a 1% fee is collected on the sell token for a third. -Fees on the **same side** are applied **sequentially**: each entry is charged on the amount remaining after the previous entries on that side have been deducted, not on the original amount. For example, two buy-side fees of `50000` and `25000` ppm produce an effective fee of ~7.38%, not 7.5%. Each fee amount is rounded up to the next base unit when needed. + Fees on the **same side** are applied **sequentially**: each entry is charged + on the amount remaining after the previous entries on that side have been + deducted, not on the original amount. For example, two buy-side fees of + `50_000` and `25_000` ppm produce an effective fee of ~7.375%, not 7.5%. Each + fee amount is rounded up to the next base unit when needed. ### Buy-side vs sell-side fees -- **`buy`** — the fee is taken from the output token. This reduces the `amount_out` and `min_amount_out` returned in the quote. +- **`buy`** — the fee is taken from the output token. This reduces the `amount_out` returned in the quote. - **`sell`** — the fee is taken from the input token before the swap is routed. This reduces the amount routed into the swap. ### Fee recipient accounts @@ -87,6 +69,7 @@ Fees on the **same side** are applied **sequentially**: each entry is charged on 0x does **not** create fee recipient token accounts for you. For token outputs, the `swap_fee_recipient` you pass must be a **token account that already exists**. For native SOL output, a wallet address is accepted. If the fee recipient's token account may not exist, add a `createAssociatedTokenAccountIdempotent` instruction for the recipient and fee token mint **before** the swap. Account for the extra transaction bytes using the [Integrator Byte Costs](/svm/solana-swap-api/guides/integrator-byte-costs) guide. + If a fee recipient is the taker's own token account for that side, the fee is treated as absent (not a self-transfer) and is omitted from the quote and the returned instructions. See [Important Integration Notes](/svm/solana-swap-api/guides/important-integration-notes) for details on fee recipient token accounts, including why 0x does not create them for you. @@ -95,7 +78,7 @@ If a fee recipient is the taker's own token account for that side, the fee is tr The fee you charge is fully determined by the values you send in the request, so you can display it in your UI directly from those: each `swap_fee_ppm` rate, the token it is charged in (the output token for a `buy` fee, the input token for a `sell` fee), and its `swap_fee_recipient`. -The quote already reflects any buy-side fees: the returned `amount_out` and `min_amount_out` are net of them, so the value you show the user as the amount received is correct as-is. Sell-side fees reduce the amount routed into the swap before the quote is produced. +The quote already reflects any buy-side fees: the returned `amount_out` are net of them, so the value you show the user as the amount received is correct as-is. Sell-side fees reduce the amount routed into the swap before the quote is produced. For the complete request and response schema, see the [API Reference](/api-reference/solana-swap-ap-is/swap/instructions). @@ -103,4 +86,4 @@ For the complete request and response schema, see the [API Reference](/api-refer When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The volume-based fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. -Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%) for security. The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60000` ppm (6%) each are both accepted under a `100_000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). +Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%). The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60_000` ppm (6%) each are both accepted under a `100_000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). From 3eaf1ee387f012e8475b2125a8bfefd70a950cda Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Mon, 27 Jul 2026 11:50:07 -0700 Subject: [PATCH 8/9] address PR comments --- .../guides/monetize-your-app.mdx | 24 +++---------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index 5c4d9154..52bf821c 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -9,24 +9,13 @@ Integrate in-app swaps to let users trade seamlessly and at the best prices acro See our [Monetization Report](https://0x.org/reports/monetization-across-defi-report) to learn how top DeFi apps are turning trading activity into millions. -See below for pricing guidance and code examples. - -## Monetization - - -⚡️ [Example code](https://github.com/0xProject/0x-examples/tree/main/solana-example) for integrating the Solana Swap API. - -⚡️ See the [Solana Swap API reference](/api-reference/solana-swap-ap-is/swap/instructions) for the full request and response schema. - - - ## Collect volume-based fees The 0x Solana Swap API supports one or more volume-based fees within a single swap request. This lets you route fees to multiple recipients with independently specified amounts and sides — perfect for multi-product apps, partner revenue-share setups, or flexible monetization strategies. To apply volume-based fees, include the following fields in the body of your [`/solana/swap-instructions` request](/api-reference/solana-swap-ap-is/swap/instructions): -- [`swap_fee_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_ppm) — the fee amount(s) in **parts per million (ppm)**. Each entry must be between `0` and your per-app maximum (`100_000` ppm / 10% by default). +- [`swap_fee_ppm`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_ppm) — the fee amount(s) in **parts per million (ppm)**. - [`swap_fee_recipient`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_recipient) — the account(s) to receive the fees. - [`swap_fee_side`](/api-reference/solana-swap-ap-is/swap/instructions#request.body.swap_fee_side) — _(optional)_ the side each fee is charged on: `buy` (the output token) or `sell` (the input token). @@ -54,7 +43,7 @@ In this example, a 5% and a 2.5% fee are collected on the buy token for two diff Fees on the **same side** are applied **sequentially**: each entry is charged on the amount remaining after the previous entries on that side have been deducted, not on the original amount. For example, two buy-side fees of - `50_000` and `25_000` ppm produce an effective fee of ~7.375%, not 7.5%. Each + `50_000` and `25_000` ppm produce an effective fee of 7.375%, not 7.5%. Each fee amount is rounded up to the next base unit when needed. @@ -65,20 +54,13 @@ In this example, a 5% and a 2.5% fee are collected on the buy token for two diff ### Fee recipient accounts - -0x does **not** create fee recipient token accounts for you. For token outputs, the `swap_fee_recipient` you pass must be a **token account that already exists**. For native SOL output, a wallet address is accepted. - -If the fee recipient's token account may not exist, add a `createAssociatedTokenAccountIdempotent` instruction for the recipient and fee token mint **before** the swap. Account for the extra transaction bytes using the [Integrator Byte Costs](/svm/solana-swap-api/guides/integrator-byte-costs) guide. - - - If a fee recipient is the taker's own token account for that side, the fee is treated as absent (not a self-transfer) and is omitted from the quote and the returned instructions. See [Important Integration Notes](/svm/solana-swap-api/guides/important-integration-notes) for details on fee recipient token accounts, including why 0x does not create them for you. ### Displaying fees The fee you charge is fully determined by the values you send in the request, so you can display it in your UI directly from those: each `swap_fee_ppm` rate, the token it is charged in (the output token for a `buy` fee, the input token for a `sell` fee), and its `swap_fee_recipient`. -The quote already reflects any buy-side fees: the returned `amount_out` are net of them, so the value you show the user as the amount received is correct as-is. Sell-side fees reduce the amount routed into the swap before the quote is produced. +The quote already reflects any buy-side fees: the returned `amount_out` is net of them, so the value you show the user as the amount received is correct as-is. Sell-side fees reduce the amount routed into the swap before the quote is produced. For the complete request and response schema, see the [API Reference](/api-reference/solana-swap-ap-is/swap/instructions). From d08094f09390ff3ff00ff3c1385131c833d768bb Mon Sep 17 00:00:00 2001 From: Jessica Lin Date: Mon, 27 Jul 2026 11:51:46 -0700 Subject: [PATCH 9/9] clean up underscores --- .../solana-swap-api/guides/monetize-your-app.mdx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx index 52bf821c..b34b467c 100644 --- a/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx +++ b/fern/docs/pages/solana-swap-api/guides/monetize-your-app.mdx @@ -21,8 +21,7 @@ To apply volume-based fees, include the following fields in the body of your [`/ Fees on Solana are expressed in **parts per million (ppm)**, not basis points. - `1_000_000` ppm = 100%, so a 1% fee is `10_000` ppm and a 5% fee is `50_000` - ppm. + `1000000` ppm = 100%, so a 1% fee is `10000` ppm and a 5% fee is `50000` ppm. ### Multiple fees and recipients @@ -31,7 +30,7 @@ Each comma-separated position defines one fee entry, so a single request can cha ```json { - "swap_fee_ppm": "50_000,25_000,10_000", + "swap_fee_ppm": "50000,25000,10000", "swap_fee_recipient": "recipient1,recipient2,recipient3", "swap_fee_side": "buy,buy,sell" } @@ -43,8 +42,8 @@ In this example, a 5% and a 2.5% fee are collected on the buy token for two diff Fees on the **same side** are applied **sequentially**: each entry is charged on the amount remaining after the previous entries on that side have been deducted, not on the original amount. For example, two buy-side fees of - `50_000` and `25_000` ppm produce an effective fee of 7.375%, not 7.5%. Each - fee amount is rounded up to the next base unit when needed. + `50000` and `25000` ppm produce an effective fee of 7.375%, not 7.5%. Each fee + amount is rounded up to the next base unit when needed. ### Buy-side vs sell-side fees @@ -68,4 +67,4 @@ For the complete request and response schema, see the [API Reference](/api-refer When deciding how much to charge, set your pricing in a way that strengthens your bottom line while aligning with the value you provide to customers. The volume-based fee impacts the price for the end user, so find the sweet spot where your solution remains competitive. -Be aware that `swap_fee_ppm` has a default per-app limit of `100_000` ppm (10%). The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60_000` ppm (6%) each are both accepted under a `100_000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help). +Be aware that `swap_fee_ppm` has a default per-app limit of `100000` ppm (10%). The cap is enforced **per fee entry, not on the combined total**: each fee in the list is validated individually against the limit. For example, two sell-side fees of `60000` ppm (6%) each are both accepted under a `100000` ppm cap, even though they sum to 12%, because neither individual entry exceeds the cap. If your application requires a higher per-entry value, [please reach out to us](https://docs.0x.org/docs/introduction/need-help#-contact-developer-support-fastest-direct-help).