Free tool

Telegram bot token checker and chat ID finder

Paste a channel's or group's @username, or a link to any post of a private one, and get its chat ID right here. Or paste the token @BotFather gave you: the page asks Telegram whether it works and which bot it belongs to, then lists the chats that recently reached the bot, each with its chat ID. Token checks go from your browser straight to api.telegram.org; AdminHub's server never sees the token.

Find a Telegram ID

Whose ID?

Paste its @username or t.me link. For a private one, paste a link to any of its posts (t.me/c/…). No token needed.

Usernames go to AdminHub's server, which asks Telegram; they are not kept beyond a short cache. Only public channels and groups come back with an ID.

Chat IDs from your bot's token

Check a token and list the chats that recently reached the bot — private chats, groups and channels, private ones included.

Token checks go from this browser straight to api.telegram.org. The token never reaches AdminHub's server, and this page does not store it: close the tab and it is gone. How it works, with sources

A bot token and a chat ID are the two values every Telegram integration asks for: the token says which bot is speaking, the chat ID says where. This page checks the first and finds the second, by asking Telegram itself — from your browser, with nothing in between.

Chat ID without a token

The box at the top answers the most common question — the ID of a channel or a group — with no bot of your own. For a public chat, paste its @username or t.me link: AdminHub’s server asks Telegram with getChat, the method the Bot API documents for “the username of the target supergroup or channel”, and shows the ID together with the chat’s title, so you can see it is the right one. For a private channel or supergroup, paste a link to any of its posts: a t.me/c/ link carries the chat’s internal number, and the Bot API ID is built from it right in your browser — minus the sum of 1,000,000,000,000 and that number.

Some things the page will not look up. A username that belongs to a person or a bot is answered without an ID: turning someone’s public username into their permanent ID is not a page’s business, and the bot below does it only when you pick the person yourself. An invite link (t.me/+…) carries no ID at all. For all of these, @getid_adminhub_bot reads your own chat list through Telegram’s chat picker. Usernames you look up are not kept beyond a short cache.

What a bot token is

A bot token is the key to one bot. @BotFather hands it out when you create a bot with /newbot, and it looks like 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw — digits, a colon, then a long run of letters, digits, dashes and underscores. Every request to the Bot API carries it in the address, behind the word bot: https://api.telegram.org/bot<token>/getMe. Telegram’s documentation is plain about what follows from that: the token authenticates the bot, not your account, anyone who has it can control the bot, and it should be treated like a password. It can be revoked at any time in @BotFather; if it leaked or got lost, the /token command there generates a new one, and the @BotFather Mini App does the same with buttons.

The first step on this page is getMe, the method the Bot API keeps for exactly this — testing a token. When the token works, Telegram answers with the bot it belongs to: its name, its username, its ID, and two settings worth knowing before you go further — whether the bot can be added to groups at all, and whether privacy mode is on. When the token is mistyped or has been replaced, Telegram refuses it, and the page says so in plain words.

Where chat IDs come from

The Bot API has no method that lists a bot’s chats. A bot learns the ID of a chat only when something from that chat reaches it as an update — a message, a post, the bot being added or removed — and getUpdates is the method that hands those updates out. Telegram keeps them for 24 hours, so the chat you need has to have done something recently. Which something depends on the chat:

To get the ID ofDo thisIt shows up as
YourselfSend /start to the botA private chat, positive number
A groupAdd the bot to the groupA group or supergroup, negative number
A channelMake the bot an admin, or forward a post from the channel to the botA channel, starting with -100
Another personForward one of their messages to the botA private chat, unless their privacy settings hide them

Adding the bot to a group is enough on its own: the bot is told about its own membership, and Telegram’s privacy-mode rules let every bot see service messages and the messages of channels it belongs to whatever the setting. What privacy mode does hide is ordinary chatter in groups — with it on, a bot gets commands meant for it, replies to its own messages and service messages, so a plain “hello” in a group may never arrive. A command addressed to the bot by name, such as /start@your_bot_name, always does. Forwarding works for channels the bot is not in, because a forwarded post carries the channel it came from; a person who restricts forwarding of their messages arrives as an unknown sender, with no ID to show.

No bot of your own yet, or the chat is one your bot is not in? @getid_adminhub_bot answers with the ID of any person, bot, group or channel you pick from your own chat list, with Telegram’s chat picker — no token, no forwarding, private channels included. It joins none of the chats you pick and does not keep their IDs, and since a chat has the same ID for every bot, the number it gives works for your bot too.

What the numbers mean

Chat IDs are not arbitrary. Telegram’s reference for Bot API dialog IDs puts people, groups and channels on one number line so that the sign and the size of a number say what kind of chat it is: a person’s ID is positive and is also the ID of their private chat with any bot; a basic group’s ID is its internal ID with a minus sign; a supergroup’s or channel’s ID is minus the sum of 1,000,000,000,000 and its internal ID. With internal IDs of today’s length, that last rule is why channel IDs read as -100 followed by more digits — and why the link generator drops exactly that -100 when it builds a t.me/c/ link to a post in a private channel. Copy the full number with its minus sign: that is what chat_id expects. The same reference notes that an ID can be longer than 32 bits but never more than 52, so a 64-bit integer stores it safely.

A chat can also change its ID once. When a basic group is upgraded to a supergroup, the group gets a new, -100 ID, and the old one stops being the right address: Telegram answers a request to it with an error that names the new ID. If the bot saw the moment of the upgrade, this page shows the new ID next to the old one.

When the updates cannot be read

There are two ways for a bot to receive updates, and Telegram’s documentation calls them mutually exclusive: getUpdates, which this page uses, or a webhook, where Telegram posts every update to a server. If the bot has a webhook, getUpdates is refused, and this page says so rather than removing the webhook — deleting it would cut your server off from its own bot. Two ways around it: read chat.id in the updates your server already receives, or add a second, spare bot to the same chat and check its token here, since a chat has the same ID for every bot.

A bot that is already running with getUpdates — a script or a framework polling for updates — takes each update the moment it arrives and confirms it, so nothing is left for this page to read, and the list stays empty however often you check. Stop the bot for a minute, do the step that makes the chat appear, check here, then start the bot again: the updates the page saw are still waiting for it, because this page never takes updates out of the bot’s queue. Stopping it first matters for one more reason. When two getUpdates requests for one bot overlap, Telegram can answer one of them with a Conflict error, and some bot frameworks stop polling when they get one; if the error lands here instead, the page says so.

What the page sends, and to whom

The token half of the page calls two methods, getMe and getUpdates, and both only read. It calls getUpdates with no parameters at all, on purpose: an offset would confirm updates, which takes them out of the queue your bot reads, and a list of allowed updates would be saved by Telegram as the bot’s own setting. It never sets or deletes a webhook and never sends a message. The requests go from your browser to api.telegram.org and nowhere else — the Network tab of your browser’s developer tools shows them — so AdminHub’s server never receives the token. The page keeps the token only in the open tab, never in browser storage, and the field and the results are excluded from the site’s analytics and session recordings. If you would rather do it by hand, open https://api.telegram.org/bot<token>/getUpdates in a browser with your token in place of <token>: it is the same request, answered as raw JSON, with each chat’s ID under “chat” and “id”. The username lookup at the top is the one part that goes through AdminHub’s server — the username, never a token.

If the token and the chat ID are for an AI agent that should post to your channel, there is a way to skip handing the agent a token at all: AdminHub’s MCP server connects Claude, ChatGPT or Cursor to the channel, and the posts go out through your own bot.


Sources, checked October 2026: Telegram Bot API — Authorizing your bot for the token format and the request address, getMe, getUpdates for the 100-update page, offset confirmation and the stored allowed_updates setting, Getting updates for the 24-hour retention and the two mutually exclusive ways, Update and ChatMemberUpdated for the bot’s own membership changes, MessageOrigin for forwarded messages, ResponseParameters for migrate_to_chat_id; Bot features for privacy mode and for creating a bot and generating a new token in @BotFather; Bot API dialog IDs for the ID ranges of people, groups, supergroups and channels; Bot tutorial for revoking a token and treating it like a password; Bots FAQ for getUpdates not working while a webhook is set.

What people usually ask

How do I get a Telegram bot token?
Open @BotFather in Telegram, send /newbot and answer two questions: the bot's name, then its username, which has to end in bot. BotFather replies with the token, a string like 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw. If you lost the token or it leaked, the /token command in @BotFather generates a new one. Telegram's own advice is to treat the token like a password and share it with no one.
How do I find my own Telegram user ID?
Send /start to your bot, then press Find chat IDs on this page. Your private chat with the bot shows up, and its ID is your user ID: the ID of a private chat with a person is that person's user ID. A person's ID is positive; groups and channels have negative IDs.
How do I get the chat ID of a Telegram channel?
Paste the channel's @username or t.me link at the top of this page: for a public channel 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 make your bot an administrator of the channel, or forward one of its posts to your bot, and press Find chat IDs. A channel's ID starts with -100.
How do I find a chat ID without a bot token?
For a public channel or group, paste its @username at the top of this page; for a private one, paste a link to any of its posts. For a person, a bot, or a private chat you have no post link to, open @getid_adminhub_bot in Telegram and tap Person, Bot, Group or Channel: Telegram's own chat picker opens, and the bot replies with the ID of the chat you pick, ready to copy. It joins none of the chats you pick and does not keep their IDs. Forwarding a message to it gives the ID of the chat the message came from, and /id in a group gives the group's ID and the topic's ID.
Why does the chat ID start with -100?
Because the chat is a supergroup or a channel. The Bot API puts every chat on one number line: a person keeps their ID as it is, a basic group gets a minus sign, and a supergroup or channel becomes minus the sum of 1,000,000,000,000 and its internal ID. With internal IDs of today's length, that reads as -100 followed by the internal ID. Copy the whole number, minus sign included — that is the form the Bot API's chat_id expects.
Why is the list of chats empty?
Usually one of four things. The bot is running right now — a bot that reads its updates with getUpdates takes each one the moment it arrives, so none are left for this page; stop it for a minute, do the step and check again. Nothing reached the bot in the last 24 hours — Telegram keeps updates no longer than that, so send /start or a new post and check again. The bot has a webhook — Telegram then delivers updates to that server, and reading them here is refused. Or privacy mode hid your message in a group: with privacy mode on, a bot gets commands meant for it, replies to its messages and service messages, so send /start@your_bot_name or add the bot to the group again.
Is it safe to paste a bot token into this page?
The page sends the token only to api.telegram.org, the same address Telegram's own tutorial has you paste into a browser, and you can watch that on the Network tab of your browser's developer tools. It calls two methods that only read, getMe and getUpdates, changes none of the bot's settings and does not store the token. If the bot is running, stop it before you check, so that the two do not read the same updates at once. If you would rather not paste it anywhere, open https://api.telegram.org/bot<token>/getUpdates yourself with your token in place of <token>: it is the same request, answered as raw JSON.