Telegram chat ID vs user ID, and the -100 in front of groups
In a private chat they are one number.
Anyone asking what is telegram user ID gets a short answer: the number Telegram files an account under, unchanged when its owner switches username or phone number.
A chat ID names the conversation. Telegram's Bot API dialog ID rules keep a user's number, make a basic group's negative, and add 1000000000000 to a supergroup or channel before making it negative, so a ten-digit ID gains -100 in front. User, group and channel numbers overlap inside Telegram, so only that sign and prefix tell a bot which kind it holds. Our Member Scraper's GROUP_ID column holds the bare form, because the two ways software talks to Telegram number one chat differently.
Does telegram chat ID change? Not a user's. A basic group's changes once, on becoming a supergroup, breaking saved lists used for posting into many groups.
What is my Telegram chat ID, and where do the apps show it?
For a bot you are wiring up, it is your user ID.
Official apps hide IDs, and searches phrased as telegram chat ID how to get have two answers. Message a bot you own, call getUpdates and read message.chat.id, which in a group is the group's number. Or use Telegram Desktop:
- Open Settings, then Advanced, then Experimental settings.
- Turn on Show Peer IDs in Profile.
- Open any profile, group or channel; the ID is in its details, though a 2024 bug report says channels appear without the -100.
That is how to find telegram user ID numbers for anyone your app can open. Anything sold as a telegram user ID finder, telegram ID finder, telegram group ID finder or telegram user ID bot reads the number from what you send it, and a forward from someone whose forwards are anonymous carries none: where a forward says it came from is their choice.
Why does a user ID fail to resolve?
Because an ID is only half an address.
Over MTProto, a call aimed at a person carries their ID plus an access hash, and Telegram's peer documentation is blunt: with an ID alone you "cannot interact with that peer". The hash belongs to one login on one account, so no other account can reuse it, and it arrives through ordinary use: a number lookup the owner permits, a username you looked up and saved, a group you share, a message they sent. A number copied from a spreadsheet carries none of it, and a user seen only in group messages often arrives as a min constructor, whose hash fetches profile photos and nothing else.
The wording of a telegram user ID could not resolve error changes with the library. The cause does not.
| Error | Seen in | Cause | Fix |
|---|---|---|---|
| Could not find the input entity | Telethon | Session never met the user | Resolve the username first |
| PEER_ID_INVALID | MTProto | ID or hash not valid for this account | Resolve it from this account |
| Bad Request: chat not found | Bot API | No chat with that ID, or no -100 | Check the prefix; message the bot |
| Forbidden: bot can't initiate conversation with a user | Bot API | The user never started the bot | Only the user can fix it |
| group chat was upgraded to a supergroup chat | Bot API | The group has a new ID | Use migrate_to_chat_id |
Bots have it worse: Telegram's introduction for developers says bots can't start conversations with users, and no Bot API method adds someone who never asked, so a bot holding a bare number gets only as far as a link it cannot aim at anyone. Adding a member takes the same pair, so an ID-only list fails before the privacy refusals an add run meets; even removing people from a contact list is sent as users with hashes.
Telegram username to ID is one request, and the reverse has none
That decides which lists work.
Tools ask for a Telegram username, ID or phone number because each resolves differently. A public username resolves in one request whose reply brings the ID and a hash, so username lists work from a cold start while the name still resolves to one holder. Telegram user ID to username has no such request: fetching a profile needs that hash first, so an account can name only people it has met.
Our Member Scraper writes a Telegram ID, username and phone column per member and labels its Username only filter best for DM targeting. Mass DM with user ID resolves its Target User IDs through the sending session and counts any it never met as failed, the wall a member add spread over several accounts also hits.
Nothing here makes a stranger's bare number reachable or lifts a Telegram limit, and we sell no accounts or proxies. Scraped lists are personal data: messaging those people is direct marketing under GDPR, CAN-SPAM and their equivalents, the lawful basis must be yours, and Telegram's Terms of Service rule out spam from any tool.