> ## Documentation Index
> Fetch the complete documentation index at: https://unevenlabs-scout-mar-1396-fee-sponsorship-marketing.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Fee Sponsorship

> Cover transaction fees from your app balance so stablecoin payments arrive whole

Fee Sponsorship is a feature that lets you cover some or all of your users' transaction fees from your app balance. Use it to make stablecoin payments arrive whole, remove gas-token friction, and control the cost experience in your product.

Every stablecoin payment has a quiet failure mode: your user sends 100 USDC and 99.80 USDT arrives. Bridge fees, gas, and execution costs came out of the payment, and their first thought is, “Where did my dollars go?” For stablecoin payments, anything less than the expected amount can feel broken.

Cover some or all of your users' fees so they transact without a surprise deduction at the finish line. You decide what they pay, what you absorb, and the maximum amount you will sponsor per transaction.

## How it works

1. **Fund** an app balance with an API key and linked funding address.
2. **Set** what you will cover in the quote: all destination fees or selected fee components, with an optional per-transaction cap.
3. **Transact:** the user completes the payment while Relay applies your sponsorship.
4. **Settle:** Relay handles routing, conversion, gas, and settlement behind the scenes.

## Why it matters

### For your business

* **Remove a silent trust-killer.** Avoid “Why did I get less than I sent?” moments at the finish line.
* **Create a growth lever.** Sponsor onboarding, promotions, premium tiers, or specific cohorts, then adjust coverage as needed.
* **Keep spend predictable.** Cap how much you sponsor per transaction.
* **Own the cost experience.** Decide how fees appear in your product from end to end.

### For your users

* **Payments arrive whole.** Sponsorship prevents covered fees from reducing the amount they receive.
* **Fewer gas tokens to manage.** Pair fee sponsorship with Relay's other gas features to abstract chain-specific costs.
* **Fewer interruptions.** Users can complete flows without stopping to source destination gas.

## Who it's for

Fee sponsorship works best for stablecoin flows such as onboarding, stablecoin orchestration, and payments. Sponsoring spreads on volatile pairs rarely makes sense.

* **Payment service providers:** sponsor fees so the merchant receives the intended payment amount.
* **Wallets and wallet infrastructure:** remove fee friction from a new user's first transaction.
* **Onramps and offramps:** sponsor the first onchain action after a fiat conversion, where users are most likely to drop off.

Deploy sponsorship deliberately for onboarding, promotions, premium tiers, or contract partners. It is a growth and reliability lever, not necessarily a permanent giveaway.

## Combine it with other gas features

Fee sponsorship is one of four ways to get gas out of your users' way. Combine it with [gasless execution](/features/gasless-swaps), [just-in-time gas](/features/gas-top-up), and paying fees with the token already being transferred.

For an exact 1:1 stablecoin exchange rate, pair fee sponsorship with [fixed rates](/features/price-stabilization#fixed-rates). Pair it with [deposit addresses](/features/deposit-addresses) when users need to pay from a CEX or another source without connecting a wallet.

## What you can control

Choose full or partial coverage, sponsor all destination fees or selected fee components, and set a per-transaction cap. Deposit-address flows support full sponsorship and a maximum cap, but not selective fee components.

Fee sponsorship is generally available and does not require an enterprise partnership.

## What to consider

Sponsorship draws from your app balance, so compare the cost against the conversion and retention benefit. It covers destination fees, not origin gas, except for Solana origins when you provide a designated fee payer. Deposit-address and CEX flows reduce origin gas to a plain transfer, while gasless execution can remove it for supported EVM flows.

<Note>
  Fee sponsorship covers destination chain fees, including gas top-up amounts, but not the origin chain gas fee. Users still pay origin gas unless the flow uses a supported origin-fee mechanism such as a Solana fee payer.
</Note>

***

## Requirements

Before you can sponsor transactions, you need:

1. **An API key** — Required to authenticate your sponsorship requests and associate them with your app balance. Create one in the [Relay Dashboard](https://dashboard.relay.link); see [API keys and Rate Limits](/references/api/api-keys) for details.
2. **A Fee Sponsorship Wallet** — A wallet linked to your API key that funds your app balance. Link one from the [App Balance page](https://dashboard.relay.link/balance) in the Relay Dashboard by signing a message to prove ownership — no gas required.
3. **Sufficient App Balance** — Your app balance must have enough funds to cover the fees you wish to sponsor.

Once you're set up, you can begin depositing funds and sponsoring transactions.

***

## Funding Your App Balance

There are two ways to deposit funds to your app balance:

### Option 1: Use the Relay App UI

The simplest way to deposit funds is through the [Relay App Balance UI](https://www.relay.link/app-balance). This provides a user-friendly interface for managing your balance.

### Option 2: Direct On-Chain Deposit

You can programmatically deposit to your app balance by sending a transaction on Base to the Relay solver. This method involves appending specific calldata in place of the request ID to identify the deposit.

#### How It Works

When you transfer funds to the solver using specific calldata, Relay treats it as a deposit to your app balance. This method uses a fixed 12-character prefix and suffix (`012345abcdef`) with the middle portion specifying which address to credit:

**Calldata Format:**

```
0x[prefix][address-to-credit][suffix]
```

* **Prefix:** `012345abcdef`
* **Address to Credit:** The wallet address to deposit funds for (use `0000000000000000000000000000000000000000` for `msg.sender`)
* **Suffix:** `012345abcdef`

#### Examples

| Calldata                                                             | Behavior                                             |
| -------------------------------------------------------------------- | ---------------------------------------------------- |
| `0x012345abcdef0000000000000000000000000000000000000000012345abcdef` | Credits `msg.sender`                                 |
| `0x012345abcdefd5c0d17ccb9071d27a4f7ed8255f59989b9aee0d012345abcdef` | Credits `0xd5c0d17ccb9071d27a4f7ed8255f59989b9aee0d` |

<Tip>
  The ability to specify a different address is useful for building auto-topup systems or having more granular control over which accounts receive deposits.
</Tip>

#### Solver Address

Deposits should be sent to the Relay solver on Base:

| Network | Address                                      |
| ------- | -------------------------------------------- |
| Base    | `0xf70da97812cb96acdf810712aa562db8dfa3dbef` |

#### TypeScript Example

```typescript expandable theme={null}
import { erc20Abi, encodeFunctionData, createWalletClient } from 'viem'
import { base } from 'viem/chains'

const BASE_USDC_ADDRESS = '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' as const
const RELAY_BASE_SOLVER_ADDRESS = '0xf70da97812cb96acdf810712aa562db8dfa3dbef' as const
const REQUEST_ID_PREFIX = '012345abcdef'

const walletClient = createWalletClient({
  chain: base,
  transport: custom(window.ethereum!),
})

const [userAddress] = await walletClient.getAddresses()

const amountInWei = '100000000' // 100 USDC

// Encode the transfer function call
const transferData = encodeFunctionData({
  abi: erc20Abi,
  functionName: 'transfer',
  args: [RELAY_BASE_SOLVER_ADDRESS, amountInWei]
})

// Add custom calldata to credit the wallet address
const customCalldata =
  `${REQUEST_ID_PREFIX}${userAddress.slice(2)}${REQUEST_ID_PREFIX}` as `0x${string}`

const hash = await walletClient.sendTransaction({
  to: BASE_USDC_ADDRESS,
  data: `${transferData}${customCalldata}`,
  account: userAddress,
  chain: base
})
```

***

## Checking Your App Balance

Verify your available balance using the [Get App Fee Balances](/references/api/get-app-fee-balances) API:

<CodeGroup>
  ```bash Request theme={null}
  curl --location 'https://api.relay.link/app-fees/{your-wallet-address}/balances'
  ```

  ```json Response theme={null}
  {
    "currency": {
      "chainId": 8453,
      "address": "0x0000000000000000000000000000000000000000",
      "symbol": "USDC",
      "name": "USDC",
      "decimals": 6
    },
    "amount": "75021651210714015",
    "amountFormatted": "0.075021651210714015",
    "amountUsd": "116.235557",
    "minimumAmount": "75021651210714015"
  }
  ```
</CodeGroup>

***

## Sponsoring Transactions

Once your app balance is funded, you can sponsor transactions by including specific parameters in your quote requests.

### Required Header

| Header      | Type     | Description                                                                                           |
| ----------- | -------- | ----------------------------------------------------------------------------------------------------- |
| `x-api-key` | `string` | Your API key, required to authenticate sponsorship requests and associate them with your app balance. |

### Sponsorship Parameters

Add these parameters to your [Get Quote](/references/api/get-quote-v2) API request:

| Parameter                | Type       | Description                                                                                                                                                                                                                                                       |
| ------------------------ | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `subsidizeFees`          | `boolean`  | Set to `true` to have the sponsor pay for all fees associated with the request, including gas topup amounts.                                                                                                                                                      |
| `maxSubsidizationAmount` | `string`   | *(Optional)* The maximum amount to subsidize in USDC with 6 decimal places (e.g., `"1000000"` = \$1.00). If the total fees exceed this threshold, the sponsor pays up to the cap and the user pays the remainder.                                                 |
| `subsidizeRent`          | `boolean`  | *(Optional)* Set to `true` to sponsor Solana ATA rent fees. Requires `subsidizeFees` to also be enabled. See [Solana Fee Sponsorship](#solana-fee-sponsorship).                                                                                                   |
| `depositFeePayer`        | `string`   | *(Optional)* A Solana address to pay deposit transaction fees for Solana origin transactions. See [Solana Fee Sponsorship](#solana-fee-sponsorship).                                                                                                              |
| `sponsoredFeeComponents` | `string[]` | *(Optional)* You can also choose to sponsor specific Relay fees for your users using the `sponsoredFeeComponents` parameter. This allows integrators to selectively cover different fee types (such as gas fees or relayer fees) while still collecting app fees. |

<Warning>
  [Deposit addresses](/features/deposit-addresses) do not support `sponsoredFeeComponents`. `maxSubsidizationAmount` is supported by deposit addresses but if the amount exceeds the maximum the user pays all fees and nothing is subsidized.
</Warning>

### Example Request

```bash cURL theme={null}
curl -X POST \
  'https://api.relay.link/quote' \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: your-api-key' \
  -d '{
    "user": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "originChainId": 8453,
    "originCurrency": "0x0000000000000000000000000000000000000000",
    "destinationChainId": 10,
    "destinationCurrency": "0x0000000000000000000000000000000000000000",
    "tradeType": "EXACT_INPUT",
    "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "amount": "100000000000000000",
    "subsidizeFees": true,
    "maxSubsidizationAmount": "5000000"
  }'
```

In this example:

* `x-api-key` header authenticates your sponsorship request
* `subsidizeFees: true` enables fee sponsorship
* `maxSubsidizationAmount: "5000000"` caps sponsorship at \$5.00 USDC

### How `maxSubsidizationAmount` Works

The `maxSubsidizationAmount` parameter acts as a spending cap for fee sponsorship:

* If the total fees are **at or below** this amount, the sponsor covers the full cost
* If the total fees **exceed** this amount, the sponsor pays up to the cap and **the user pays the remainder**

This protects you from unexpectedly high costs during network congestion or volatile market conditions, while still providing partial sponsorship benefit to your users.

<Info>
  With partial fee sponsorship, users always receive some benefit from your sponsorship even when fees spike. For example, if you set a $5.00 cap and fees total $7.00, you pay $5.00 and the user pays $2.00.
</Info>

<Warning>
  Partial fee sponsorship is not supported for deposit addresses, if the fees exceed the `maxSubsidizationAmount` the user will cover the fees completely and nothing will be sponsored.
</Warning>

***

## Solana Fee Sponsorship

Solana transactions involve unique cost structures that differ from EVM chains. In addition to standard transaction fees, Solana requires rent payments for creating new accounts, such as Associated Token Accounts (ATAs). Relay provides specific parameters to handle these costs.

### Understanding Solana Rent

When a user receives a token on Solana for the first time, an Associated Token Account must be created to hold that token. This account creation requires a rent payment (approximately 0.002 SOL). Without sponsorship, this cost falls on the user.

### Sponsoring Destination Rent with `subsidizeRent`

The `subsidizeRent` parameter allows you to sponsor the rent fees for ATA creation on Solana destination transactions.

| Parameter       | Type      | Description                                                                                                       |
| --------------- | --------- | ----------------------------------------------------------------------------------------------------------------- |
| `subsidizeRent` | `boolean` | Set to `true` to have the sponsor pay for Solana rent fees associated with ATA creation on the destination chain. |

<Warning>
  The `subsidizeRent` parameter must be used in conjunction with `subsidizeFees`. There is currently no system for separating destination gas and rent fees. If you enable `subsidizeRent` without `subsidizeFees`, the rent will not be sponsored.
</Warning>

**Important considerations:**

* When `subsidizeFees` is enabled but `subsidizeRent` is not, requests involving ATA creation will automatically fall back to user-paid fees. This is because rent sponsorship without explicit opt-in presents an exploitation vector.
* The exploitation risk stems from the fact that users can close their ATA after the transaction completes and reclaim the rent. This effectively converts sponsored rent into a direct transfer of funds to the user.
* Only enable `subsidizeRent` when you have a trusted relationship with your users or have implemented safeguards against abuse.

#### Example Request

```bash cURL theme={null}
curl -X POST \
  'https://api.relay.link/quote' \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: your-api-key' \
  -d '{
    "user": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "originChainId": 8453,
    "originCurrency": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
    "destinationChainId": 792703809,
    "destinationCurrency": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tradeType": "EXACT_INPUT",
    "recipient": "9aUn5swQzUTRanaaTwmszxiv89cvFwUCjEBv1vZCoT1u",
    "amount": "10000000",
    "subsidizeFees": true,
    "subsidizeRent": true,
    "maxSubsidizationAmount": "5000000"
  }'
```

In this example, a user bridges USDC from Base to Solana. Both `subsidizeFees` and `subsidizeRent` are enabled, ensuring the sponsor covers all destination fees including any ATA rent required for the recipient to receive USDC on Solana.

### Sponsoring Origin Deposits with `depositFeePayer`

For transactions originating from Solana, you can designate an alternative account to pay the transaction fees and rent for the deposit transaction using `depositFeePayer`.

| Parameter         | Type     | Description                                                                                                                                                                                                 |
| ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `depositFeePayer` | `string` | A Solana address that will pay the transaction fees and rent for deposit transactions on Solana. This account must have sufficient SOL to cover these costs. **Must be different from the `user` address.** |

<Note>
  The `depositFeePayer` parameter operates independently from the `subsidizeFees` and `subsidizeRent` parameters. It applies specifically to Solana origin transactions and does not draw from your app balance.
</Note>

<Warning>
  **Important restrictions and security considerations for `depositFeePayer`:**

  * **The `depositFeePayer` and `user` addresses must be different.** You cannot use the same wallet address for both parameters.
  * **Signing order is critical.** Relay returns a transaction that requires the integrator's sponsoring wallet to sign **first**. The integrator must sign the transaction before passing it to the user. If the user receives an unsigned transaction, they could potentially modify it to drain the sponsoring wallet.
  * **Avoid same-chain swaps with untrusted users.** The `depositFeePayer` parameter is exploitable when used for same-chain swaps on Solana. Only use it for same-chain operations when the wallet is under your control.
</Warning>

**When to use `depositFeePayer`:**

* When you want to provide a gasless experience for users depositing from Solana
* When your application maintains a dedicated fee-paying wallet for Solana transactions
* When you want to abstract away the complexity of SOL requirements from your users

#### Example Request

```bash cURL theme={null}
curl -X POST \
  'https://api.relay.link/quote' \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: your-api-key' \
  -d '{
    "user": "9aUn5swQzUTRanaaTwmszxiv89cvFwUCjEBv1vZCoT1u",
    "originChainId": 792703809,
    "originCurrency": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "destinationChainId": 8453,
    "destinationCurrency": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
    "tradeType": "EXACT_INPUT",
    "recipient": "0xF0AE622e463fa757Cf72243569E18Be7Df1996cd",
    "amount": "10000000",
    "depositFeePayer": "YourFeePayerSolanaAddressHere"
  }'
```

In this example, a user bridges USDC from Solana to Base. The `depositFeePayer` address will cover the Solana transaction fees for the deposit, allowing the user to transact without holding SOL.

### Solana Sponsorship Summary

| Parameter                         | Direction               | Funding Source          | Use Case                                                                 |
| --------------------------------- | ----------------------- | ----------------------- | ------------------------------------------------------------------------ |
| `subsidizeFees` + `subsidizeRent` | To Solana (destination) | App Balance             | Sponsor destination gas and ATA rent when users receive tokens on Solana |
| `depositFeePayer`                 | From Solana (origin)    | Specified Solana wallet | Sponsor origin transaction fees when users deposit from Solana           |

***

## What Fee Sponsorship Does Not Cover

Fee sponsorship is designed to cover relay and execution costs, but certain fees remain outside its scope:

* **Origin chain gas fees** — Users must pay the gas required to submit their transaction on the origin chain (unless using `depositFeePayer` for Solana origins).
* **App fees** — Fees configured via the `appFees` parameter are not deducted from your sponsor balance. These are separate charges that accrue to the specified recipient addresses.
* **First-time approval transactions when using `usePermit`** — The initial approval transaction required for permit-based flows is not covered by fee sponsorship. However, all subsequent requests after the approval will be sponsored.

***

## Fees Object

When you sponsor transactions, the quote response includes a `fees` object with a `subsidized` field showing the fees covered by your sponsorship:

```json theme={null}
{
  "fees": {
    "relayerService": "...",
    "relayerGas": "...",
    "relayer": "...",
    "app": "...",
    "subsidized": {
      "amount": "500000",
      "amountUsd": "0.50"
    }
  }
}
```

For more details on the fee structure, see [Relay Fees](/references/api/api_core_concepts/fees).

***

## Best Practices

1. **Monitor Your Balance** — Set up alerts or automated checks to ensure your app balance doesn't run dry during high-traffic periods.

2. **Use `maxSubsidizationAmount`** — Always set a reasonable cap to protect against unexpected fee spikes.

3. **Consider Auto-Topup** — For production applications, consider implementing an auto-topup system using the direct onchain deposit method.

4. **Track Sponsored Transactions** — Use the [Get Requests](/references/api/get-requests) API to monitor your sponsored transaction history and costs.

***

## Related Resources

* [App Fees](/features/app-fees) — Learn how to collect fees from your users
* [Get App Fee Balances](/references/api/get-app-fee-balances) — API reference for checking balances
* [Get Quote](/references/api/get-quote-v2) — API reference for quote requests
* [Relay Fees](/references/api/api_core_concepts/fees) — Understanding Relay's fee structure
* [Solana Support](/references/api/api_guides/solana) — Guide to depositing and withdrawing on Solana
