Standards/ton-transfer-uri
TON Transfer URI
Overview
The TON Transfer URI is a deep-link / universal-link payload used across The Open Network (TON) wallets to request a transfer of Toncoin or a Jetton token. It is most commonly carried in a 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 1, 2.
Unlike a single chartered specification (such as Stellar's Stellar SEP-7 SEP or Cardano's Cardano CIP-13 (Cardano URI) 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 1, 2.
The canonical form is <prefix>transfer/<address>?<params>, e.g. ton://transfer/<address>?amount=<nano> 1, 2.
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 1, 2. 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 3.
Technical specification
Scheme prefixes
Three interchangeable prefixes carry the same payload 1:
ton://— the TON blockchain deep-link schemetonkeeper://— Tonkeeper's app-specific schemehttps://app.tonkeeper.com/— a universal (web) link; Tonhub useshttps://tonhub.com/transfer/equivalently 1, 2
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) 1, 2 |
text |
URL-encoded UTF-8 comment to attach to the transfer 1 |
bin |
URL-encoded base64 BoC (Bag/Block of Cells) attached as the internal-message body 1, 2 |
init |
URL-encoded base64 BoC state-init data (e.g. for deploying/initialising a contract) 2 |
jetton |
Jetton master contract address; selects token transfer instead of native Toncoin 1, 2 |
exp |
Expiry as a Unix epoch-seconds timestamp 1 |
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 2, 3. 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 1, 2.
Example (native transfer with comment) 2:
https://tonhub.com/transfer/EQD2NmD_lH5f5u1Kj3KfGyTvhZSX0Eg6qp2a5IQUKXxOG21n?amount=10000&text=just%20message
Example (Jetton transfer) 1:
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 1.
Use cases
- Merchant / peer QR payments: encode a
transfer/<address>?amount=link in a QR Code; any TON wallet pre-fills the payment for confirmation 1, 2. - Token payments: request a specific Jetton (e.g. USDT on TON) via
jetton=1, 3. - Contract interaction: attach a
binbody (andinitfor deployment) so a link can trigger a smart-contract call, not just a value transfer 1, 2. - Telegram-native flows: TON's tight integration with Telegram makes these deep links a natural payment primitive inside chats and mini-apps 1.
Implementations
- Tonkeeper — supports
ton://,tonkeeper://, andhttps://app.tonkeeper.com/transfer deep links per its deep-linking docs 1. - Tonhub — supports
https://tonhub.com/transfer/andton://transfer(pluston-test://on sandbox) with the same parameter set 2. ton-org/ton— the official TypeScript SDK used to construct the BoC payloads (bin,init) and Jetton transfer bodies referenced by these URIs 4.
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 1, 2. The bin/init capability parallels Stellar SEP-7's tx operation (Stellar SEP-7) and XRPL's payload request type (XRPL Request URI) in that the link can convey an arbitrary on-chain action, not just a payment 1. Unlike SEP-7, however, TON transfer URIs carry no requester-authentication (signed-origin) mechanism, so trust rests entirely on the wallet's confirmation UI 1, 2. The amount-in-nanocoins convention differs from Cardano CIP-13's decimal-ADA convention (Cardano CIP-13 (Cardano URI)) 1, 2.
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 1, 2.
Sources
1 Deep Linking into Tonkeeper — Ton Console, 2026 2 Transfer link — Tonhub Developers, 2026 3 Jetton transfer — The Open Network, 2026 4 ton-org/ton — GitHub, 2026
Deployments
No country reports mention this standard by name.
Regions / aggregations not mapped to a single country
- Universal