Deep links
Deep links allow to seamlessly direct users from a dApp back to a meaningful location within a GRAM wallet and invoke corresponding actions.
Issue wallet invoices using deep links. See transaction link formats for popular explorers.
TON Connect invoices
tc://<TON_CONNECT_LINK_BODY>Best for dApps that require multiple transactions within a session or a persistent wallet connection.
Advantages
- Permanent communication channel with the wallet.
- Users only scan a QR code once.
- Can track transaction confirmation via the returned BoC.
- Ready-made SDKs and UI kits for various platforms.
Disadvantages
- If only one payment is needed, users must connect the wallet and confirm the transaction.
- More complex integration than a
ton://link.
Explore TON Connect.
Deep links invoices
The TON link ton:// is less preferred in the ecosystem, but may be useful for simple and tiny one-time payment flow.
ton://<LINK-BODY>Advantages
- Easy integration.
- No need to connect a wallet.
Disadvantages
- Users must scan a new QR code for each payment.
- Cannot track if the user signed the transaction.
- No information about the user’s address.
- Requires workarounds for platforms where links are not clickable (e.g., Telegram Desktop bots).
The ton:// scheme is part of the broader TON blockchain standard, enabling interoperability across different TON-based wallets and services.
Example workflows
- Quick payments: Integrate payment requests directly from your website, allowing users to complete transactions with a single tap using
ton://transfer links. - In-app transactions: Use deep links to facilitate seamless transfers between users within your application.
- Link to specific transfers: Provide support or history review by linking directly to specific transactions or transfers.
GRAM transfer
Opens the pre-filled Send screen and prompts the user to enter the missing data.
ton://transfer/<ADDRESS>?amount=<AMOUNT>&text=<TEXT>| Parameter | Description | Required |
|---|---|---|
<ADDRESS> | The recipient's TON address. | required |
<AMOUNT> | The amount of GRAM to send, in nanograms. | optional |
<TEXT> | A URL-encoded UTF-8 text message to attach to the transfer. | optional |
GRAM transfer to address
ton://transfer/<ADDRESS>ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4KGRAM transfer with amount
ton://transfer/<ADDRESS>?amount=<AMOUNT>ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?amount=5000000
GRAM transfer with text comment
ton://transfer/<ADDRESS>?text=<TEXT>ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?text=helloGRAM Transfer with amount and text comment
ton://transfer/<ADDRESS>?amount=<AMOUNT>&text=<TEXT>ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?amount=5000000&text=helloTransfer with expiry timestamp
Opens the Send screen with an expiry timestamp for the transaction.
ton://transfer/<ADDRESS>?amount=<AMOUNT>&text=<TEXT>&exp=<EXPIRY_TIMESTAMP>| Parameter | Description | Required |
|---|---|---|
<ADDRESS> | The recipient's TON address. | required |
<AMOUNT> | The amount of GRAM to send, in nanograms. | optional |
<TEXT> | A URL-encoded UTF-8 text message to attach to the transfer. | optional |
<EXPIRY_TIMESTAMP> | Expiry timestamp in seconds since the Unix epoch. | optional |
The exp parameter, like other parameters, must be included when constructing the message to ensure the blockchain rejects transactions with an expired exp.
GRAM transfer with expiry timestamp
ton://transfer/<ADDRESS>?amount=<AMOUNT>&text=<TEXT>&exp=<EXPIRY_TIMESTAMP>ton://transfer/EQD2NmD_lH5f5u1Kj3KfGyTvhZSX0Eg6qp2a5IQUKXxOG21n?amount=100000&text=test&exp=2147483647Jetton transfer
Opens the Send screen with a jetton transfer. Jetton is a standard for TON assets, like USDT, USDC and e.t.c.
ton"://transfer/<ADDRESS>?jetton=<JETTON_ADDRESS>&amount=<AMOUNT>&text=<TEXT>| Parameter | Description | Required |
|---|---|---|
<ADDRESS> | The recipient's GRAM wallet address. | required |
<JETTON_ADDRESS> | The jetton master address. | required |
<AMOUNT> | The amount of jettons to send. | optional |
<TEXT> | A URL-encoded UTF-8 text message to attach to the transfer. | optional |
<EXPIRY_TIMESTAMP> | Expiry timestamp in seconds since the Unix epoch. | optional |
One whole Jetton for <AMOUNT> is defined by
decimalsthe number of fractional digitsunitthat represents the smallest indivisible amount of the token (similar to satoshi in Bitcoin).
Transfer default jetton
Typically, jetton decimals in amount are equal 9 and evaluation same as for Gram.
ton://transfer/<ADDRESS>?jetton=<JETTON_ADDRESS>&amount=<AMOUNT>&text=<TEXT>ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?jetton=EQBlqsm144Dq6SjbPI4jjZvA1hqTIP3CvHovbIfW_t-SCALE&amount=5000000&text=helloTransfer USDT
While Gram requires nine decimal places and 1 Gram equals 1 billion () nanograms, USDT only uses six decimal places. This means that 1 USDT unit stands for 1 million () microUSDT units. The AMOUNT below requires the microUSDT format.
ton://transfer/<ADDRESS>?jetton=<JETTON_ADDRESS>&amount=<AMOUNT>&text=<TEXT>ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?jetton=EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs&amount=5000&text=helloTransfer with binary data
Opens the emulation screen or screen with alert about blind signing transactions with amount and destination.
ton"://transfer/<ADDRESS>?amount=<AMOUNT>&bin=<BINARY_DATA>| Parameter | Description | Required |
|---|---|---|
<ADDRESS> | The recipient's TON address. | required |
<AMOUNT> | The amount of GRAM to send, in nanograms. | optional |
<BINARY_DATA> | A URL-encoded base64 BoC which will be attached as a body to internal message. | optional |
ton://transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?amount=5000000&bin=te6cckECBQEAARUAAUWIAMEY4jHsfgXgPZLLJhtH/oPEOBKZZb6Y4/RJaJnbXc4GDAEBnBSf8D7P51eitphXHiTNAS6WXVDOgcxIxFWf7JICcG9ooFRNCDzTZbHg0mlW6782P8huKd5wzYK3huSVDMGTrQgpqaMXaMF9SAAAACsAAwIBaGIAV+9GxkYnezSj7VSw9vtlmc5RJ5lsyyItoKd5rFDpJZUgL68IAAAAAAAAAAAAAAAAAAEDAaFfzD0Ug3czLfk9/4aAArAmxHNbYrurO/IYyD89+mJZ/XDMnkMemHy/nTsrzYDwAYIxxGPY/AvAeyWWTDaP/QeIcCUyy30xx+iS0TO2u5wMIDgEACIAAAAAUmVmI05PTmQxZ0pCUK4fW14=Wallet-specific invoices
Use wallet-specific links to create simple jetton and Gram transfers. The syntax is usually similar to ton://transfer links, but always check each wallet’s documentation.
Example: transferring 1 USDT to EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs:
https://my.tt/transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?amount=1000000&jetton=EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDsFind more wallet-specific features in the documentation: MyTonWallet docs at help.mytonwallet.io.
Explorers links
To generate a transaction link, the service must obtain the account address, logical time (lt), and transaction hash by calling the getTransactions method. Using these values, Tonscan and Gram Explorer render the transaction page according to the following formats respectively:
Tonscan
Mainnet
https://tonscan.org/tx/<lt as int>:<hash as base64url>:<account address>https://tonscan.org/tx/63333243000002:rujRhaDI9zx4e_GHLullmsU84RqQsWs4SFangh7_jCk:Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vFTestnet
https://testnet.tonscan.org/tx/<lt as int>:<hash as base64url>:<account address>https://testnet.tonscan.org/tx/40988257000002:Ye-PrEPt9Aj8wEGqivrsFKwsT2j6r-brGMUKkhaX0vY:kf8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM_BPGram explorer
Mainnet
https://explorer.toncoin.org/transaction?account=<account address><=<lt as int>&hash=<transaction uppercase hex>https://explorer.toncoin.org/transaction?account=Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF<=63333243000002&hash=AEE8D185A0C8F73C787BF1872EE9659AC53CE11A90B16B384856A7821EFF8C29Testnet
https://test-explorer.toncoin.org/transaction?account=<account address><=<lt as int>&hash=<transaction uppercase hex>https://test-explorer.toncoin.org/transaction?account=Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF<=40988257000002&hash=61EF8FAC43EDF408FCC041AA8AFAEC14AC2C4F68FAAFE6EB18C50A921697D2F6