How to find a Telegram chat ID: user, group, channel, topic
Your own ID, a person's, a group's, a channel's — public or private — and a topic's: the fastest way for each, what -100 means, and when an ID changes.
Connect an agent today
Connect an agent in the botTL;DR. Your own ID: press Start in @getid_adminhub_bot. A person or a bot: pick them with the bot’s Person or Bot button. A public channel or group: paste its @username into the chat ID finder. A private one: paste a link to any of its posts (
t.me/c/…) — the ID is built from the link. A topic:/id@getid_adminhub_botinside it. Channel and supergroup IDs start with -100; copy them with the minus.
A chat ID is the number the Bot API uses to say where a message goes. Every integration that posts to Telegram — a script, an automation, an AI agent — asks for one next to the bot token. The catch is that Telegram’s regular apps don’t show it, so this guide goes through each kind of chat and the quickest way to get its number.
The fastest way for each kind of chat
| Whose ID | Fastest way | Also works |
|---|---|---|
| Yours | Press Start in @getid_adminhub_bot | Message your own bot, then read its updates in the token checker |
| Another person | The bot’s Person button — pick them from your chats | Forward one of their messages to the bot — unless they hide their account in forwards |
| A bot | The bot’s Bot button | For your own bot: paste its token in the token checker |
| A public channel or group | Paste its @username or t.me link in the chat ID finder | The bot’s Channel / Group button |
| A private channel or supergroup | Paste a link to any of its posts (t.me/c/…) in the finder | The bot’s Channel / Group button (My channel / My group list only the ones you created) |
| A topic in a forum group | Send /id@getid_adminhub_bot in the topic, with the bot in the group | Read message_thread_id in your bot’s updates |
| Chats that wrote to your own bot in the last 24 hours | Paste the bot’s token in the token checker — with the bot stopped and no webhook set | — |
Why the person row goes through Telegram itself: a person’s ID is not public on the web. The Bot API documents username lookup for channels, supergroups and bots, not for people, and a bot learns a person’s ID from what reaches it — for instance when the person writes to it, or someone picks them in a chat picker or forwards one of their messages (unless they hide their account in forwards). The picker buttons in @getid_adminhub_bot work that way: you choose from your own chat list, the bot replies with the ID, and it joins none of the chats you pick.
What the numbers mean
Telegram’s reference for Bot API dialog IDs puts every chat on one number line, so the sign and size of the number tell what kind of chat it is:
- A person (and a private chat with them): a positive number, for example
987654321. - A basic group: the internal ID with a minus sign,
-4123456789. - A supergroup or channel: minus the sum of 1,000,000,000,000 and the internal ID. With internal IDs of today’s length that reads as -100 and then the internal number:
-1001234567890.
The number from a private post link, t.me/c/1234567890/45, is the internal one; the chat ID is built from it, which is exactly what the chat ID finder does when you paste such a link — and what the link generator undoes when it builds a t.me/c/ link from an ID. An ID can be longer than 32 bits but never more than 52, so store it as a 64-bit integer, not a 32-bit one.
You may not need the number at all
For a public channel, a supergroup with a username, or a bot, the Bot API’s chat_id accepts the username itself: @yourchannel works wherever the number does. The number is needed for everything without a username — a private chat with a person, a private channel, a basic group — and it is the safer choice anyway: a username can be changed or given up, the ID cannot.
When a chat ID changes
Once. When a basic group is upgraded to a supergroup, it gets a new ID starting with -100, and the old one stops being the right address. Telegram answers a request to the old ID with an error that carries the new one in migrate_to_chat_id, so a well-behaved script can switch over by itself. If your bot was in the group at that moment, the token checker shows the new ID next to the old one.
Usernames move; IDs do not. A channel that renames itself or changes its @username keeps the same chat ID.
Common mistakes
- Dropping the minus.
1001234567890is not the same chat as-1001234567890. Copy the whole number. - Using the number from a
t.me/c/link as is. That is the internal ID; the chat ID is -100 plus it (or, precisely, minus the sum above). - Keeping a group’s old ID after it became a supergroup.
- Posting to a channel where the bot is not an admin. The ID can be right and the request still refused: to post in a channel, the bot has to be one of its administrators.
- Confusing the bot’s ID with the chat ID. Your bot’s own ID — what getMe returns — is where messages come from, not where they go.
If you are setting up a bot from scratch, the bot token guide covers the other value every integration asks for.
Sources, checked October 2026: Bot API dialog IDs — the ID ranges of people, groups, supergroups and channels; Telegram Bot API — sendMessage (chat_id as a number or @username, message_thread_id), getChat (usernames of supergroups and channels), KeyboardButtonRequestUsers and KeyboardButtonRequestChat (the chat pickers), MessageOrigin (forwarded messages), ResponseParameters (migrate_to_chat_id); t.me and tg:// links — private post links.
What people usually ask
- How do I find my own Telegram user ID?
- Open @getid_adminhub_bot in Telegram and press Start: it replies with your ID at once. Any bot sees the same number when you message it, because the ID of a private chat with a person is that person's user ID.
- How do I get the chat ID of a Telegram channel?
- For a public channel, paste its @username or t.me link into AdminHub's chat ID finder and the ID comes right back. For a private channel, paste a link to any of its posts (t.me/c/…) and the ID is worked out from the link itself. Or open @getid_adminhub_bot and pick the channel with the Channel button — My channel lists only the channels you created. A channel's ID starts with -100.
- Why does the chat ID start with -100?
- Because the chat is a supergroup or a channel. The Bot API makes their IDs negative and adds 1,000,000,000,000 to the internal ID, so with internal IDs of today's length the number reads -100 followed by the internal one. Copy it whole, minus sign included.
- Can I use @username instead of the chat ID?
- For a public channel, supergroup or bot, yes: the Bot API's chat_id accepts the username in the format @username. A private chat, a private channel and a basic group have no username, so they need the numeric ID.
- How do I find the ID of a topic in a group?
- Add @getid_adminhub_bot to the group and send /id@getid_adminhub_bot inside the topic: it answers with the group's ID and the topic's message_thread_id. That second number is what you pass as message_thread_id to post into that topic.
- Why did my group's chat ID change?
- The group was upgraded to a supergroup. A basic group's ID is replaced by a new one starting with -100; Telegram answers requests to the old ID with an error that carries the new ID in migrate_to_chat_id. Use the new ID from then on.