Deep links
Deep links allow directing users from a dApp to a meaningful location within a TON wallet and invoking corresponding actions.
Choose a link based on what the user needs to do:
| Goal | Format |
|---|---|
| Prepare a one-time payment | ton://transfer/..., Deep links invoices |
| Connect a dApp to a wallet | tc://?..., TON Connect invoices |
| Target a specific wallet, such as Telegram Money | Wallet-specific links |
| View an account, transaction, or block | Explorer links |
TON Connect invoices
Use TON Connect when a dApp needs a persistent wallet connection and responses to transaction or signing requests.
tc://?v=2&id=<ID>&r=<REQUEST>Advantages
- Persistent communication channel with the wallet.
- Users only need to connect once per session.
- Can track transactions on-chain using 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.
See TON Connect universal links for parameter definitions and other TON Connect link formats.
Most Telegram clients support opening tc:// links from outside Telegram, but the operating system may open another registered wallet. To target Telegram Money, use its Telegram-specific TON Connect links.
Deep links invoices
The ton:// scheme is part of the broader standard, enabling interoperability across different TON-based wallets and services.
The ton:// link is less common in the ecosystem than tc://, but it may be useful for a simple, one-time payment flow.
ton://transfer/<ADDRESS>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).
Example workflows
- Quick payments: Open a pre-filled payment request from a website using a
ton://link. - In-app transactions: Open a wallet's send screen from an application.
- Link to specific transfers: Use explorer links to open and review a single transaction.
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 exp for the transaction — the blockchain would reject transactions past that timestamp.
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 |
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 fungible assets on TON, like USDT or other tokens.
ton://transfer/<ADDRESS>?jetton=<JETTON_ADDRESS>&amount=<AMOUNT>&text=<TEXT>| Parameter | Description | Required |
|---|---|---|
<ADDRESS> | The recipient's TON 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 specific links for each wallet to initiate jetton and Gram transfers. The format usually resembles ton://transfer links, but make sure to consult the documentation for each wallet.
Example: transferring 1 USDT to EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs:
https://my.tt/transfer/UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K?amount=1000000&jetton=EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDsTelegram Money
Telegram Money links open the native wallet in the installed Telegram app, including when opened from another app or a browser.
tg://sendgramsThe HTTPS form, https://t.me/sendgrams, accepts the same parameters as the tg://sendgrams deep link.
Telegram Money also handles regular Gram transfer links on mainnet.
The tg://ton link opens Telegram's separate TON balance screen, associated with channel monetization. It does not open Telegram Money.
Gram transfer in Telegram
Add to and optionally amount to prepare a transfer:
tg://sendgrams?to=<RECIPIENT>&amount=<AMOUNT>| Parameter | Description | Required |
|---|---|---|
<RECIPIENT> | An @username or a mainnet TON address in raw or URL-safe friendly format. | required |
<AMOUNT> | A positive decimal amount in Gram, using ASCII digits and . with at most nine fractional digits, e.g., 1.5. | optional |
- For
@username, the recipient must be another ordinary Telegram user. - TON address recipients can use wallets outside Telegram.
- TON DNS names such as
alice.tonare not resolved.
Supply each parameter once, using lowercase names. Omit the amount to use its default value: 0.
tg://sendgrams?to=@monk&amount=1.5
tg://sendgrams?to=UQDYzZmfsrGzhObKJUw4gzdeIxEai3jAFbiGKGwxvxHinf4K&amount=1.5TON Connect in Telegram
These links open Telegram Money's native TON Connect flow:
tg://sendgrams?startapp=tonconnect-<PACKED>
tg://resolve?domain=sendgrams&startapp=tonconnect-<PACKED>
https://t.me/sendgrams?startapp=tonconnect-<PACKED>There, <PACKED> is a TON Connect query encoded for Telegram's startapp parameter. For packing and reopening pending requests, see how to create TON Connect links for Telegram Money.
Explorer links
Actonscan links can open accounts, transactions, and blocks by providing their respective values:
<ADDRESS>is a raw or user-friendly TON address,<TRANSACTION_HASH>is a hexadecimal transaction hash,- and
<WORKCHAIN>,<SHARD>, and<SEQNO>identify a block.
The low-level TON Explorer only provides direct links to transactions — they require an account address, logical time (lt), and a transaction hash. Obtain these values by calling the getTransactions API endpoint. Convert the hexadecimal transaction hash to uppercase before composing a link.
Mainnet
https://actonscan.com/address/<ADDRESS>?network=mainnet
https://actonscan.com/tx/<TRANSACTION_HASH>?network=mainnet
https://actonscan.com/block/<WORKCHAIN>/<SHARD>/<SEQNO>?network=mainnethttps://actonscan.com/tx/47d0989633fc03ff3fdca05880ab5760d0321c196501a6a4cbb5578dea2624cb?network=mainnethttps://explorer.toncoin.org/transaction?account=<ADDRESS><=<LT>&hash=<TRANSACTION_HASH>https://explorer.toncoin.org/transaction?account=Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF<=63333243000002&hash=AEE8D185A0C8F73C787BF1872EE9659AC53CE11A90B16B384856A7821EFF8C29Testnet
https://actonscan.com/address/<ADDRESS>?network=testnet
https://actonscan.com/tx/<TRANSACTION_HASH>?network=testnet
https://actonscan.com/block/<WORKCHAIN>/<SHARD>/<SEQNO>?network=testnethttps://actonscan.com/tx/59ac226ac63ba4ecfcf4b9da1a02510fc787cc1f52fdfddb3a2b8f1bf54bbd77?network=testnethttps://test-explorer.toncoin.org/transaction?account=<ADDRESS><=<LT>&hash=<TRANSACTION_HASH>https://test-explorer.toncoin.org/transaction?account=Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF<=40988257000002&hash=61EF8FAC43EDF408FCC041AA8AFAEC14AC2C4F68FAAFE6EB18C50A921697D2F6