Free tool

Telegram link generator: t.me and tg:// links

Eight link types, one page. Choose what the link should do, fill in a username or an address, and copy both forms Telegram documents: the t.me address that works anywhere and the tg:// one that opens the app directly.

Your link

Web link
Open
https://t.me/my_shop_bot?start=ref-instagram
App link
tg://resolve?domain=my_shop_bot&start=ref-instagram

The app link skips the t.me redirect page, but only opens where Telegram is installed. Use the web link everywhere else.

Invite links to private groups and channels are missing here on purpose. A link of the plus form ends in a hash that Telegram's servers generate when you create the link inside the app, so it cannot be built from a chat ID or guessed from outside. Make it in the chat's Invite links screen instead.

Almost every Telegram link is a plain address you could type by hand. The problem is that there are about a dozen of them, each with its own shape, and only one of those shapes carries the thing worth having: a value that tells you where a person came from.

What the eight types actually do

Username links are the simple case. t.me/name opens a person, a group or a channel with a public handle. Telegram also serves the same target from name.t.me, and the app-side equivalent is tg://resolve?domain=name. There is nothing to generate — but pasting a whole URL into the field above will strip it back to the handle for you.

Bot deep links are the useful case. t.me/your_bot?start=airplane opens the bot with a Start button, and pressing it sends the bot /start airplane. The payload is yours to define: a campaign name, a referrer id, a product code.

Group linkst.me/your_bot?startgroup — open a group picker and add the bot to whichever group the person chooses. With a payload the bot also receives that value once it is in. Which rights the bot then needs, and why privacy mode makes a quiet bot look broken, is the subject of adding a bot to a Telegram group.

Mini App links come in two shapes. With a short name, t.me/your_bot/shop?startapp=promo42 opens that specific app; without one, the same link opens the bot’s main Mini App. The startapp value reaches the app as its start parameter.

Share linkst.me/share/url?url=…&text=… — open a chat picker with your address and text already typed. Both values must be percent-encoded, which is the single most common way a share button breaks: an unencoded & inside the shared URL ends the parameter and Telegram receives half a link.

Phone links (t.me/+34600123456) open a chat by number instead of by username, and resolve only if the other person’s privacy settings allow being found by phone.

Post links address one message: t.me/name/1234 in a public channel, t.me/c/1234567890/45 in a private one. The private form takes the chat id without the -100 prefix that the Bot API adds — the tool strips it for you.

One note about the host. Every link on this page is written with t.me, because that is the host Telegram documents and the one readers recognise — and it is exactly what the copy button hands you. The Open button beside it points at telegram.me instead: the same link reference lists telegram.me as an alternative name for t.me, so it is the same destination, and we have seen t.me fail to resolve in a browser often enough that a preview button using it would dead-end. Publish the t.me form; the button is only for checking your own link.

Payloads are the whole point

A link without a payload tells you nothing. A link with one turns every place you publish into a separate, measurable door: one payload on your website button, another in a bio, a third in a partner’s post. The bot sees which door opened before it says a word, so the first message can already differ — a returning buyer and a cold reader do not need the same greeting.

That is also where the payload stops being an analytics detail and starts being a funnel. The message that follows Start is the highest-attention moment a bot ever gets, and a welcome sequence with delays and conditions does considerably more with it than a single greeting.

Two practical limits. Sixty-four characters is not much once you concatenate a campaign, a source and a date, so pass a short key and keep the real record on your side. And the allowed set is narrow — letters, digits, underscore and hyphen — so no spaces, no equals signs, no slashes, and no Cyrillic or emoji. Telegram’s own recommendation is to base64url-encode anything else.

Invite links to private chats — the ones that look like t.me/+AbCdEf… — cannot be generated here or anywhere else outside Telegram. The trailing hash is created by Telegram’s servers at the moment an admin exports the link, and it is what grants access. A page that offers to build one for a channel you merely name is guessing at random or collecting your data. Make invite links in the chat itself, where you can also set an expiry date, a member limit and join requests.

The link is transport. What decides whether it was worth publishing is what the reader meets one second later — a bot that answers, a catalogue that loads, a subscription they can actually buy without leaving the chat. That is the part a Telegram storefront covers: products, digital downloads, channel subscriptions and paid posts behind the same bot the deep link opens. Under Telegram’s rules digital goods are paid for in Stars; physical goods can take cards.


Sources, checked September 2026: Telegram’s deep linking documentation for the 64-character start parameter, its allowed characters and the bot username rules; the t.me and tg:// link reference for every format above, including the private post and share syntax; the Telegram FAQ for the username character set and the phone-number link. Rules the documentation does not state — a minimum username length outside bots, or a length limit for Mini App short names — are not enforced by this tool.

What people usually ask

How do I create a Telegram link to my channel?
If the channel has a public username, its link is t.me followed by a slash and the username — nothing else is needed and nothing has to be generated. Pick the first option above, paste the username or an existing link, and copy the result. If the channel is private it has no username, and the only way in is an invite link created inside Telegram.
What is a Telegram deep link?
A bot link that carries a value. Adding a start parameter to a bot link means the bot receives that value together with the Start command, so it can tell a reader who came from Instagram from one who came from a partner channel, or open the exact product a link was made for.
How long can the start parameter be?
Up to 64 characters, and only Latin letters, digits, underscore and hyphen. Telegram recommends base64url for anything that is not already plain text. If you need to pass more than that, pass a short key and keep the real payload in your own database against that key.
Can I generate an invite link for a private channel?
No, and neither can any other site. The hash at the end of an invite link is issued by Telegram's servers when the link is created by an admin inside the app or through the Bot API. Any page offering to generate one for a chat you name is either guessing or phishing.
What is the difference between a t.me link and a tg:// link?
The first is an ordinary web address, so it survives being pasted into a browser, an email, a QR code or an ad. The second is a scheme handled only by the installed Telegram app: it opens instantly with no redirect page, and does nothing at all on a device without Telegram. Publish the web one, use the app one inside apps you control.
Why does my bot ignore the payload in the link?
Three causes, and the one people usually suspect is not among them: Telegram's link reference states that a start parameter replaces the input bar with a Start button even if the person has already started the bot, so a repeat visitor is not the explanation. What is: the value travels only when that button is pressed, so anyone who reaches the bot from search and types /start by hand sends a bare command. Or the payload holds a character outside the allowed set, or runs past 64 characters, and the client drops the parameter rather than passing it on. Or the bot receives the value and loses it itself — it arrives as an argument on the start message, so a handler that matches the exact text /start never sees the word after it.