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 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) [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