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

# Send a Jetton

> Transfer a TON-native token (Jetton) using sendJetton

> [card] Recommended: JavaScript SDK for React Native
>
> While this SDK is still supported, we recommend using newer [JavaScript SDK](https://docs.dynamic.xyz/docs/javascript/reference/react-native-quickstart.md), which is optimized for React Native, but also comes with a host of other benefits.

Jettons are TON's native token standard, similar in role to ERC-20 on EVM. Each Jetton has a master contract address; user balances live in per-user Jetton wallet contracts derived from that master. `dynamicClient.ton.sendJetton` builds and broadcasts the necessary message to transfer a Jetton without requiring you to look up the user's Jetton wallet contract yourself — the SDK does that on the WebView side.

## Parameters

| Parameter | Type | Notes |
| - | - | - |
| `walletId` | `string` | The id of a wallet whose `chain === 'TON'`. |
| `jettonMasterAddress` | `string` | The Jetton master contract address (e.g. the USDT-on-TON master). |
| `recipientAddress` | `string` | Final recipient (the SDK resolves the recipient's Jetton wallet internally). |
| `jettonAmount` | `string` | Amount **in the Jetton's smallest unit**, encoded as a string. Apply the Jetton's `decimals` yourself. |
| `forwardTonAmount` | `string` (optional) | Amount of nanotons forwarded with the transfer notification (default is connector-specific; typical value is `1` to allow notification but minimize cost). |
| `forwardPayload` | `string` (optional) | Base64-encoded payload to attach to the transfer notification, used by some Jetton-aware contracts. |

## Return value

```ts theme={"system"}
{ boc: string; hash: string }
```

Same shape as [`sendTon`](https://docs.dynamic.xyz/docs/react-native/wallets/using-wallets/ton/send-ton).

## Example

```ts React Native theme={"system"}
import { dynamicClient } from '<path to client file>';

const wallet = dynamicClient.wallets.userWallets.find((w) => w.chain === 'TON');
if (!wallet) {
  throw new Error('No TON wallet');
}

// Example: send 10 USDT (USDT on TON has 6 decimals)
const decimals = 6;
const human = '10';
const jettonAmount = (Number(human) * 10 ** decimals).toString();

const { hash } = await dynamicClient.ton.sendJetton({
  walletId: wallet.id,
  jettonMasterAddress: 'EQ...usdt-master',
  recipientAddress: 'EQ...recipient',
  jettonAmount,
  forwardTonAmount: '1', // 1 nanoton — enough to trigger the notification
});

console.log('Broadcasted:', hash);
```

## Notes

* `jettonAmount` must be in the Jetton's smallest unit. The decimals are defined by the Jetton master contract (typically 6 or 9). Apply them on the client side; the SDK does not auto-convert.
* The user's Jetton wallet contract for a given master must have enough Toncoin to pay for the forward fee. If `forwardTonAmount` is too small, the transfer notification may be dropped (transfer still succeeds, but recipient-side bookkeeping won't be triggered).
* The bridge call surfaces the underlying connector's errors verbatim — typical failure modes are insufficient Jetton balance, the recipient address being malformed, or the user cancelling the prompt.


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