Skip to content
barcoder

Standards/ton-transfer-uri

TON Transfer URI

TypeQR Data Format
Completeness69%medium

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 scheme
  • tonkeeper:// — Tonkeeper's app-specific scheme
  • https://app.tonkeeper.com/ — a universal (web) link; Tonhub uses https://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 bin body (and init for 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://, and https://app.tonkeeper.com/ transfer deep links per its deep-linking docs [1].
  • Tonhub — supports https://tonhub.com/transfer/ and ton://transfer (plus ton-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
source · docs/standards/ton-transfer-uri/index.md