# TON Transfer URI

> Source: https://docs.barcoder.ai/docs/standards/ton-transfer-uri
> research date 2026-06-04 · extracted at 2026-10-03
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [Deep Linking into Tonkeeper — Ton Console](https://docs.tonconsole.com/tonkeeper/deep-linking)
- [Transfer link — Tonhub Developers](https://docs.tonhub.com/docs/transfer-link)

## Overview

The **TON Transfer URI** is a **deep-link / universal-link payload** used across [The Open Network (TON)](https://ton.org) wallets to request a transfer of Toncoin or a Jetton token. It is most commonly carried in a [QR Code](https://docs.barcoder.ai/docs/standards/qr-code) or a clickable link; when opened, a TON wallet pre-fills the recipient, amount, and an optional message or binary payload for the user to confirm <sup>[1][1], [2][2]</sup>.

Unlike a single chartered specification (such as Stellar's [Stellar SEP-7](https://docs.barcoder.ai/docs/standards/stellar-sep-7) SEP or Cardano's [Cardano CIP-13 (Cardano URI)](https://docs.barcoder.ai/docs/standards/cardano-cip-13) CIP), the TON transfer URI is a **de-facto convention** documented and implemented by the major TON wallets — Tonkeeper and Tonhub chief among them — with a shared structure across three interchangeable scheme prefixes <sup>[1][1], [2][2]</sup>.

The canonical form is `<prefix>transfer/<address>?<params>`, e.g. `ton://transfer/<address>?amount=<nano>` <sup>[1][1], [2][2]</sup>.

## History

TON deep links emerged from the wallets built on TON after the network's transition to community stewardship (the TON Foundation), rather than from a numbered standards process. The format is documented in **wallet vendor docs** — Tonkeeper's deep-linking reference and Tonhub's transfer-link reference — which serve as the practical specification that other apps follow <sup>[1][1], [2][2]</sup>. Jetton (fungible-token) transfers ride on TON's **TEP-74** token standard, so a `jetton=` parameter in a transfer URI targets a Jetton master contract <sup>[3][3]</sup>.

## Technical specification

### Scheme prefixes

Three interchangeable prefixes carry the same payload <sup>[1][1]</sup>:

- `ton://` — the TON blockchain deep-link scheme
- `tonkeeper://` — Tonkeeper's app-specific scheme
- `https://app.tonkeeper.com/` — a universal (web) link; Tonhub uses `https://tonhub.com/transfer/` equivalently <sup>[1][1], [2][2]</sup>

### Transfer payload

```
<prefix>transfer/<ADDRESS>?amount=<NANO>&text=<TEXT>&bin=<BOC>&init=<BOC>&jetton=<MASTER>&exp=<UNIX>
```

| Parameter | Notes |
|-----------|-------|
| `<ADDRESS>` (path, required) | Recipient's TON address |
| `amount` | Amount in **nanocoins** (1 TON = 10^9 nano; Jettons use their own decimals) <sup>[1][1], [2][2]</sup> |
| `text` | URL-encoded UTF-8 comment to attach to the transfer <sup>[1][1]</sup> |
| `bin` | URL-encoded base64 **BoC** (Bag/Block of Cells) attached as the internal-message body <sup>[1][1], [2][2]</sup> |
| `init` | URL-encoded base64 BoC state-init data (e.g. for deploying/initialising a contract) <sup>[2][2]</sup> |
| `jetton` | Jetton **master** contract address; selects token transfer instead of native Toncoin <sup>[1][1], [2][2]</sup> |
| `exp` | Expiry as a Unix epoch-seconds timestamp <sup>[1][1]</sup> |

When `jetton` is present, the wallet performs a TEP-74 Jetton transfer and the `init`/`bin` parameters are ignored; `amount` is then interpreted in the Jetton's units <sup>[2][2], [3][3]</sup>. The `bin` parameter is what makes the transfer URI more than a payment request: it can carry an arbitrary message body, enabling smart-contract calls, while `init` can carry contract code/data for deployment <sup>[1][1], [2][2]</sup>.

Example (native transfer with comment) <sup>[2][2]</sup>:

```
https://tonhub.com/transfer/EQD2NmD_lH5f5u1Kj3KfGyTvhZSX0Eg6qp2a5IQUKXxOG21n?amount=10000&text=just%20message
```

Example (Jetton transfer) <sup>[1][1]</sup>:

```
https://app.tonkeeper.com/transfer/<address>?jetton=<master>&amount=<units>&text=<text>
```

### Other deep links

The same wallet scheme also defines non-transfer links such as `buy-ton`, `staking`, `pool/<address>`, `swap`, `exchange`, `battery`, `action`, and `dapp/<url>`; these are outside the transfer payload but share the prefix family <sup>[1][1]</sup>.

## Use cases

- **Merchant / peer QR payments**: encode a `transfer/<address>?amount=` link in a [QR Code](https://docs.barcoder.ai/docs/standards/qr-code); any TON wallet pre-fills the payment for confirmation <sup>[1][1], [2][2]</sup>.
- **Token payments**: request a specific Jetton (e.g. USDT on TON) via `jetton=` <sup>[1][1], [3][3]</sup>.
- **Contract interaction**: attach a `bin` body (and `init` for deployment) so a link can trigger a smart-contract call, not just a value transfer <sup>[1][1], [2][2]</sup>.
- **Telegram-native flows**: TON's tight integration with Telegram makes these deep links a natural payment primitive inside chats and mini-apps <sup>[1][1]</sup>.

## Implementations

- **Tonkeeper** — supports `ton://`, `tonkeeper://`, and `https://app.tonkeeper.com/` transfer deep links per its deep-linking docs <sup>[1][1]</sup>.
- **Tonhub** — supports `https://tonhub.com/transfer/` and `ton://transfer` (plus `ton-test://` on sandbox) with the same parameter set <sup>[2][2]</sup>.
- **`ton-org/ton`** — the official TypeScript SDK used to construct the BoC payloads (`bin`, `init`) and Jetton transfer bodies referenced by these URIs <sup>[4][4]</sup>.

## Comparison

Versus a bare TON address QR, the transfer URI adds **amount, comment, expiry, token selection, and an arbitrary binary body** — making it closer in power to a transaction request than a simple payment address <sup>[1][1], [2][2]</sup>. The `bin`/`init` capability parallels Stellar SEP-7's `tx` operation ([Stellar SEP-7](https://docs.barcoder.ai/docs/standards/stellar-sep-7)) and XRPL's `payload` request type ([XRPL Request URI](https://docs.barcoder.ai/docs/standards/xrpl-request-uri)) in that the link can convey an arbitrary on-chain action, not just a payment <sup>[1][1]</sup>. Unlike SEP-7, however, TON transfer URIs carry **no requester-authentication (signed-origin) mechanism**, so trust rests entirely on the wallet's confirmation UI <sup>[1][1], [2][2]</sup>. The amount-in-nanocoins convention differs from Cardano CIP-13's decimal-ADA convention ([Cardano CIP-13 (Cardano URI)](https://docs.barcoder.ai/docs/standards/cardano-cip-13)) <sup>[1][1], [2][2]</sup>.

## Status

**Active (de-facto).** The transfer URI is in everyday production use across TON wallets, but it is governed by **wallet-vendor documentation** rather than a single ratified protocol standard, which is why some parameters and prefixes vary slightly between Tonkeeper and Tonhub <sup>[1][1], [2][2]</sup>.

## Sources

[1]: https://docs.tonconsole.com/tonkeeper/deep-linking
[2]: https://docs.tonhub.com/docs/transfer-link
[3]: https://docs.ton.org/v3/guidelines/ton-connect/cookbook/jetton-transfer
[4]: https://github.com/ton-org/ton

[1] [Deep Linking into Tonkeeper](https://docs.tonconsole.com/tonkeeper/deep-linking) — Ton Console, 2026
[2] [Transfer link](https://docs.tonhub.com/docs/transfer-link) — Tonhub Developers, 2026
[3] [Jetton transfer](https://docs.ton.org/v3/guidelines/ton-connect/cookbook/jetton-transfer) — The Open Network, 2026
[4] [ton-org/ton](https://github.com/ton-org/ton) — GitHub, 2026

## Deployments

_No country reports mention this standard by name._

## Regions / aggregations not mapped to a single country

- Universal
