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

# transferAmount

> Send native or non-native tokens from a wallet account to a recipient on any supported chain.

`transferAmount` sends tokens from a wallet account to a recipient address. One call works across chains: the SDK builds and submits the right transaction for the wallet account's chain and active network, for both external wallets and embedded wallets.

The transfer executes on the wallet account's active network. `transferAmount` does not bridge assets between chains; to send on a different network, [switch the active network](/docs/javascript/reference/wallets/switch-active-network) first.

## Send a native token

<Tabs>
  <Tab title="JavaScript">
    ```ts theme={"system"}
    import { transferAmount } from '@dynamic-labs-sdk/client';

    // Sends 0.01 ETH on the wallet account's active EVM network.
    const { transactionHash } = await transferAmount({
      walletAccount,
      amount: '0.01',
      recipient: '0xRecipientAddress',
    });
    ```
  </Tab>

  <Tab title="React">
    ```tsx theme={"system"}
    import { useTransferAmount } from '@dynamic-labs-sdk/react-hooks';

    function SendButton({ walletAccount }) {
      const { mutate: transfer, data, isPending, error } = useTransferAmount();

      return (
        <div>
          <button
            disabled={isPending}
            onClick={() =>
              transfer({
                walletAccount,
                amount: '0.01',
                recipient: '0xRecipientAddress',
              })
            }
          >
            {isPending ? 'Sending…' : 'Send'}
          </button>
          {data?.transactionHash && <p>Sent: {data.transactionHash}</p>}
          {error && <p>Error: {error.message}</p>}
        </div>
      );
    }
    ```
  </Tab>
</Tabs>

`amount` is a decimal string in the token's display units, converted on-chain using the token's decimals.

## Send a non-native token

Pass `token` with the asset's chain-specific identifier and its decimals.

<Tabs>
  <Tab title="ERC-20 (EVM)">
    ```ts theme={"system"}
    import { transferAmount } from '@dynamic-labs-sdk/client';

    // Sends 5 USDC on the wallet account's active EVM network.
    const { transactionHash } = await transferAmount({
      walletAccount,
      amount: '5',
      recipient: '0xRecipientAddress',
      token: {
        address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
        decimals: 6,
      },
    });
    ```
  </Tab>

  <Tab title="SPL (Solana)">
    ```ts theme={"system"}
    import { transferAmount } from '@dynamic-labs-sdk/client';

    // Sends 5 USDC on Solana. The recipient's associated token
    // account is created as part of the transaction if needed.
    const { transactionHash } = await transferAmount({
      walletAccount,
      amount: '5',
      recipient: 'RecipientSolanaAddress',
      token: {
        address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
        decimals: 6,
      },
    });
    ```
  </Tab>
</Tabs>

## Support by chain

| Chain | Native token | Non-native token | Notes |
| - | - | - | - |
| EVM | Yes | ERC-20 | `token.decimals` defaults to 18 |
| Solana | SOL | SPL, Token-2022 | Creates the recipient's associated token account when missing |
| Sui | SUI | Any coin type | `token.address` is the coin type (for example `0x2::usdc::USDC`) |
| Bitcoin | BTC | Not supported | `token` is ignored; the call always sends BTC |
| Tron | TRX | TRC-20 | |
| TON | TON | Jettons | `token.address` is the jetton master address |
| Tempo | No | TIP-20 | `token` is required; omitting it throws because Tempo has no native token |
| Starknet | ETH | Tokens | |
| Stellar | XLM | Custom assets | `token.address` is `CODE:ISSUER`; recipient must exist and hold a trustline |
| Aptos | APT | Fungible assets | |

ZeroDev smart wallet accounts support native and ERC-20 transfers on EVM chains.

## Errors

* `WalletProviderMethodUnavailableError` when the wallet account's provider does not implement transfers, which includes chains not listed above.
* `InvalidParamError` when the wallet account's chain does not match the transfer, or the token is invalid (for example, a coin type the account does not hold on Sui).
* `TempoNativeTokenError` when `token` is omitted on Tempo.
* Insufficient-funds errors surface from the chain itself and vary by network.

## Related functions

* [Switching Active Network](/docs/javascript/reference/wallets/switch-active-network)
* [Getting Multichain Token Balances](/docs/javascript/reference/wallets/get-multichain-token-balances)
* [Getting Transaction History](/docs/javascript/reference/wallets/get-transaction-history)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.