> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rhinestone.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Sponsor fees for your users

> Cover gas, bridging, and swap fees for your users.

Transaction fees are one of the biggest UX barriers in crypto. With Rhinestone's fee sponsorship, you save a card once and the SDK covers gas, bridging, and swap fees for your users across any supported chain, billed to you monthly. No per-chain setup required.

This tutorial builds on the [Quickstart](../quickstart). You'll need a working smart account setup before continuing.

## Prerequisites

* Completed the [Quickstart](../quickstart)
* A [Rhinestone dashboard](https://dashboard.rhinestone.dev) account with an API key
* For mainnet sponsorship, a card saved in the dashboard (see [Billing](/dashboard/billing)). Testnets need nothing.

## Steps

<Steps>
  <Step title="Enable sponsorship billing">
    Open the [Rhinestone dashboard](https://dashboard.rhinestone.dev) and go to **Settings → Sponsorship**.

    Press **Save card** and enter your card details. Sponsored usage is then invoiced to your organization monthly — see [Billing](/dashboard/billing).

    <Note>On testnets, sponsorship works out of the box: no card required, and testnet usage is never billed.</Note>
  </Step>

  <Step title="Send a sponsored transaction">
    Add `sponsored: true` when preparing the transaction:

    ```ts theme={null}
    const prepared = await account.prepareTransaction({
      sourceChains: [arbitrum],
      targetChain: base,
      calls: [
        {
          to: recipientAddress,
          value: 0n,
          data: '0x',
        },
      ],
      sponsored: true,
    })
    const signed = await account.signTransaction(prepared)
    const result = await account.submitTransaction(signed)

    const status = await account.waitForExecution(result)
    console.log('Transaction settled:', status)
    ```

    Your user signs once. The Rhinestone orchestrator adds the fees to your monthly sponsorship usage and the user pays nothing.
  </Step>

  <Step title="Sponsor selectively (optional)">
    You can choose which fee types to cover:

    ```ts theme={null}
    const transaction = await account.prepareTransaction({
      sourceChains: [arbitrum],
      targetChain: base,
      calls: [...],
      sponsored: {
        gas: true,
        bridging: true,
        swaps: false,
      },
    })
    ```

    Or apply sponsorship conditionally on your backend. For example, only sponsor transactions that interact with your app's contract:

    ```ts theme={null}
    function shouldSponsor(calls: { to: string }[]): boolean {
      const appContract = '0xYourContractAddress'
      return calls.some((call) => call.to.toLowerCase() === appContract.toLowerCase())
    }

    const calls = [{ to: '0xYourContractAddress', value: 0n, data: encodedCalldata }]

    const transaction = await account.prepareTransaction({
      sourceChains: [arbitrum],
      targetChain: base,
      calls,
      sponsored: shouldSponsor(calls),
    })
    ```
  </Step>
</Steps>

## Next steps

<CardGroup cols={3}>
  <Card title="Gas & Fee Sponsorship reference" icon="book-open" href="../gas-sponsorship/overview">
    Full details on fee types, policies, and how sponsorship is calculated.
  </Card>

  <Card title="Signer types" icon="wallet" href="../core/setup-signer">
    Customise your signer: passkeys, embedded wallets, multi-factor auth.
  </Card>

  <Card title="Add session keys" icon="key" href="./session-keys">
    Give users one-click UX with scoped session keys and onchain permissions.
  </Card>
</CardGroup>
