1. Home
  2. Guides
  3. Utilities
Utilities guide

How to find a Telegram chat, group or channel ID

Learn how to find the ID of a Telegram private chat, group, supergroup or channel using your bot and the Telegram Bot API, and understand where the chat ID appears in the returned update data.

  • Published August 18, 2026
  • 11 min read
  • WordPress guide

A Telegram chat ID is the numeric identifier Telegram uses to identify a private conversation, group, supergroup or channel. If you are building a Telegram bot or connecting Telegram to WordPress, an automation platform or another application, you will often need this ID so the bot knows where messages should be sent.

The ID is different from a Telegram username or public link. A channel might be accessible through a username such as @examplechannel, while its internal chat ID is a numeric value used by the Telegram Bot API.

Fortunately, you normally do not need complicated tools to find it. If you already have a Telegram bot, you can generate an update in the target chat and inspect the data Telegram sends to the bot.

In this guide, we will look at how to find the ID of a private Telegram chat, group, supergroup or channel, how to read the value from the Bot API and what to check when the expected chat does not appear.

What is a Telegram chat ID?

A Telegram chat ID is a numeric identifier associated with a chat.

Depending on the conversation, the chat may represent:

  • a private conversation with a user;
  • a basic Telegram group;
  • a supergroup;
  • a channel.

When a bot receives a message or another relevant update, Telegram includes information about the chat in the returned data.

A simplified example looks like this:

{
    "message": {
        "chat": {
            "id": 123456789,
            "type": "private"
        }
    }
}

In this example, the Telegram chat ID is:

123456789

Why do you need a Telegram chat ID?

A bot needs to know which chat should receive a message.

For example, when calling the Telegram Bot API sendMessage method, you provide a chat_id value together with the message text.

Conceptually, the request contains information similar to:

chat_id = 123456789
text = Hello from my bot

The chat ID tells Telegram where the message belongs.

You may need it when building:

  • WordPress notifications;
  • contact form alerts;
  • WooCommerce order notifications;
  • server monitoring systems;
  • custom Telegram bots;
  • workflow automations;
  • CRM notifications;
  • scheduled reports;
  • internal team alerts.

Telegram chat ID vs user ID

A Telegram user ID and a Telegram chat ID are related concepts, but they describe different things.

A user ID identifies a Telegram user.

A chat ID identifies the conversation where messages are being exchanged.

In a private bot conversation, the chat ID commonly corresponds to the user participating in that private conversation.

Groups, supergroups and channels have their own chat IDs, so you should inspect the chat.id field rather than assuming that a user ID is always the correct destination.

Telegram chat ID vs username

A Telegram username might look like:

@examplechannel

A chat ID is numeric and might look like:

123456789

or, for a supergroup or channel:

-1001234567890

A username is designed to make an account, bot, group or channel easier for people to reference.

The numeric ID is the internal identifier commonly used by applications and bots.

Do not assume that every Telegram chat has a public username. Private groups and private conversations may have no public username at all while still having a valid numeric chat ID.

Before you start: create a Telegram bot

The easiest way to inspect chat IDs through the Bot API is to use your own Telegram bot.

If you do not already have one, create it through Telegram’s official BotFather.

For the complete process, see How to create a Telegram bot with BotFather.

Once the bot has been created, you will have an authentication token similar to:

1234567890:AAExampleTokenThatMustRemainPrivate

The token authenticates requests made to the Telegram Bot API on behalf of your bot.

Keep it private. A bot token is a credential, not a harmless identifier.

How to find your private Telegram chat ID

Finding the ID of a private conversation is usually the simplest case.

Step 1: Open your Telegram bot

Search for the bot you created and open the private conversation with it.

Step 2: Start the bot

Press the Start button or send:

/start

This generates an incoming update that the bot can receive.

Step 3: Open the getUpdates endpoint

The Telegram Bot API uses URLs structured around your bot token.

For getUpdates, the endpoint follows this pattern:

https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates

Replace:

YOUR_BOT_TOKEN

with the actual token generated by BotFather.

Do not publish the completed URL or include it in public screenshots, support forums or repositories because the token is part of the address.

Step 4: Find the chat object

The response may contain data similar to:

{
    "ok": true,
    "result": [
        {
            "update_id": 123456789,
            "message": {
                "message_id": 1,
                "from": {
                    "id": 987654321,
                    "is_bot": false,
                    "first_name": "John"
                },
                "chat": {
                    "id": 987654321,
                    "first_name": "John",
                    "type": "private"
                },
                "text": "/start"
            }
        }
    ]
}

Look inside:

message → chat → id

In this example, the private chat ID is:

987654321

How to find a Telegram group ID

The process for a Telegram group is similar, but the bot must first be present in the group and receive an update associated with it.

Step 1: Add the bot to the group

Open the Telegram group and add your bot.

Do not grant unnecessary administrative permissions merely to discover the ID. Give the bot only the access required by the integration you are building.

Step 2: Send a message the bot can receive

A simple option is to send a command directed to the bot, for example:

/start@your_bot_username

This is particularly useful when group privacy mode is enabled because a privacy-enabled bot does not receive every ordinary group message.

Step 3: Call getUpdates

Open:

https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates

Step 4: Find the group chat object

You may see something similar to:

{
    "message": {
        "chat": {
            "id": -123456789,
            "title": "Development Team",
            "type": "group"
        }
    }
}

The group ID is the value of:

message.chat.id

In this example:

-123456789

Group-related chat IDs are represented as signed numeric values, so preserve the complete value exactly as Telegram returns it.

How to find a Telegram supergroup ID

Telegram also supports supergroups, which provide additional capabilities for larger or more advanced group conversations.

From the perspective of finding the ID, the process is almost identical.

  1. add the bot to the supergroup;
  2. send a command or another update the bot can receive;
  3. request getUpdates;
  4. find the returned chat object;
  5. copy the id value.

A simplified update may look like:

{
    "message": {
        "chat": {
            "id": -1001234567890,
            "title": "WordPress Developers",
            "type": "supergroup"
        }
    }
}

The supergroup ID is:

-1001234567890

Do not remove the minus sign or manually modify the number.

Why do some Telegram IDs start with -100?

When working with the Bot API, supergroup and channel IDs commonly appear as large negative values beginning with -100.

For example:

-1001234567890

For application development, the important rule is simple: treat the complete value Telegram returns as the identifier.

Do not try to convert it into a positive number or strip part of the value before storing it.

How to find a Telegram channel ID

Channels behave differently from ordinary group conversations because updates can arrive as channel posts rather than normal messages.

Step 1: Add the bot to the channel

Add the bot to the target channel with the permissions required by the integration.

If the bot will eventually publish messages to the channel, make sure its channel permissions allow that action.

Step 2: Publish a new channel post

After the bot has access to the channel, publish a new post.

This creates an event that can appear in the updates delivered to the bot.

Step 3: Call getUpdates

Open:

https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates

Step 4: Look for channel_post

A channel update can contain a channel_post object instead of a normal message object.

For example:

{
    "channel_post": {
        "message_id": 42,
        "chat": {
            "id": -1009876543210,
            "title": "TheOneWP Updates",
            "type": "channel"
        },
        "text": "New update available"
    }
}

The channel ID is:

-1009876543210

The important path in this case is:

channel_post → chat → id

Private channel vs public channel

A public Telegram channel can have a username such as:

@theonewp

A private channel may not have a public username at all.

Both still have internal chat IDs.

For private channels, the numeric chat ID is particularly important because there may be no public username available for the integration.

Can you use a Telegram username instead of its numeric ID?

Some Bot API methods accept a public channel or supergroup username in the form:

@channelusername

instead of a numeric chat_id.

Numeric IDs are often preferable for persistent application configuration because they do not depend on the chat continuing to use the same public username.

Private groups and channels may also have no public username, making the numeric ID necessary.

How to find the ID using curl

If you prefer working from the terminal, you can request the bot’s updates with curl.

Use:

curl "https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates"

The response will be returned as JSON.

Look for a structure such as:

"chat": {
    "id": ...
}

Do not paste the real command containing your bot token into public logs, documentation or screenshots.

How to make the getUpdates response easier to read

A raw JSON response can become difficult to scan when the bot has received many updates.

If you have jq installed, you can format the output:

curl -s "https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates" | jq

You can also inspect chat objects more selectively.

For ordinary messages:

curl -s "https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates" | jq '.result[].message.chat'

For channel posts:

curl -s "https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates" | jq '.result[].channel_post.chat'

Not every update contains the same fields, so some entries may return null. JSON remains stubbornly unwilling to reorganize itself around whichever field you happen to need.

How to identify whether an ID belongs to a private chat, group or channel

Do not rely only on the number itself.

Inspect the type field inside the Telegram chat object.

Typical values include:

private
group
supergroup
channel

For example:

{
    "id": -1001234567890,
    "title": "Example Channel",
    "type": "channel"
}

This tells you that the returned identifier belongs to a channel.

What if getUpdates returns an empty result?

A successful request may return:

{
    "ok": true,
    "result": []
}

This means there are currently no updates available to return through that request.

Check the following:

  • make sure you sent a new message or command to the bot;
  • make sure the bot was added to the target group or channel;
  • generate a new event after adding the bot;
  • confirm that you are using the correct bot token;
  • check whether previous updates have already been confirmed and removed from the queue;
  • check whether the bot currently has a webhook configured.

getUpdates does not work while a webhook is active

Telegram provides two mutually exclusive mechanisms for receiving bot updates:

  • long polling through getUpdates;
  • webhooks.

If a webhook is configured, getUpdates cannot be used to retrieve updates normally until the webhook is removed.

This matters when troubleshooting an existing production bot because removing its webhook can interrupt the application that normally receives Telegram updates.

Do not remove a production webhook merely to discover a chat ID if you can inspect the application’s existing webhook payload instead.

For the underlying behavior, see the official Telegram getUpdates documentation.

How to check whether your bot has a webhook

You can inspect the current webhook configuration with:

https://api.telegram.org/botYOUR_BOT_TOKEN/getWebhookInfo

If the returned webhook information contains an active URL, Telegram is configured to deliver updates to that endpoint.

For an existing application, the safer solution may be to inspect the incoming webhook payload instead of changing the bot’s update mechanism.

Finding a chat ID from a webhook payload

If your bot already receives Telegram updates through a webhook, the chat ID is available in the same update data Telegram sends to your server.

For a normal message, inspect:

message.chat.id

For a channel post, inspect:

channel_post.chat.id

For example:

{
    "update_id": 123456,
    "message": {
        "chat": {
            "id": -1001234567890,
            "title": "Team",
            "type": "supergroup"
        }
    }
}

During development, you can log or inspect the relevant field without changing the bot from webhook delivery to long polling.

Why does my bot not see group messages?

Telegram bots can operate with privacy mode, which limits which messages they receive from groups.

When privacy mode is enabled, the bot does not automatically receive every ordinary message posted by users.

It can still receive relevant events such as commands directed to it, replies involving the bot and service messages.

If you only need to discover the group ID, send a command directly to the bot instead of assuming any random group message will appear in getUpdates.

Telegram documents this behavior in its official Bot FAQ.

Do you need to disable privacy mode to find a group ID?

Usually, no.

You do not need access to every group message just to discover the group’s chat ID.

Sending a command the bot is allowed to receive is generally enough to generate an update containing the chat object.

Disabling privacy mode solely to retrieve an ID gives the bot broader visibility than the task requires.

What if the bot was added but no group update appears?

Try sending a command explicitly addressed to the bot:

/start@your_bot_username

You can also try another command such as:

/help@your_bot_username

Then request the updates again.

Make sure the event was created after the bot joined the group.

What happens when a Telegram group becomes a supergroup?

A basic Telegram group can be migrated to a supergroup.

During that migration, integrations may need to use the new supergroup identifier rather than the previous group ID.

If an existing automation stops sending messages after a group migration, inspect a current update and confirm that the stored destination still matches the current chat.

Do not manually derive the new ID from the old one. Use the identifiers Telegram provides in the migration data or subsequent updates.

Do Telegram chat IDs contain sensitive information?

A chat ID is not equivalent to a bot token or account password.

Knowing a numeric chat ID alone does not authenticate somebody as your bot.

However, there is usually no reason to expose internal application identifiers unnecessarily, particularly when they are part of configuration files or diagnostic output.

The bot token requires much stronger protection because it authenticates Bot API requests.

Never publish your Telegram bot token

A Telegram bot token is a credential.

Do not store it directly in:

  • public Git repositories;
  • frontend JavaScript;
  • public screenshots;
  • documentation examples;
  • forum posts;
  • shared URLs;
  • client-side HTML.

Server-side applications should store the token in a protected configuration mechanism such as an environment variable or secure application setting.

If a token is accidentally exposed, rotate it through BotFather and update every application using the previous value.

Can you find a Telegram chat ID without a bot?

The normal Telegram client is designed for messaging rather than exposing raw Bot API identifiers.

For bot integrations, using your own bot and inspecting Telegram update data is generally the clearest and most reproducible method.

Various third-party bots and services claim to return IDs, but sending information about private groups or accounts to an unrelated service is unnecessary when your own bot can provide the required data.

Avoid random Telegram ID finder bots

Using an unknown third-party bot simply to discover a chat ID can expose information about the account or group to a service you do not control.

If you already have a bot for your integration, use that bot instead.

The workflow remains simple:

  1. add your own bot to the target chat;
  2. generate an update;
  3. inspect the returned chat.id;
  4. remove permissions the bot does not actually need afterward.

How to test a Telegram chat ID

Once you have found the ID, test it by sending a harmless message.

The sendMessage endpoint follows this general pattern:

https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage

The request needs a destination and message text.

For example:

chat_id=-1001234567890
text=Telegram connection test

If the bot has the necessary access and the ID is correct, Telegram should deliver the message to the target chat.

Testing a Telegram chat ID with curl

You can test the destination from the terminal:

curl -X POST "https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage" \
    -d "chat_id=-1001234567890" \
    -d "text=Telegram connection test"

If Telegram returns an error, check:

  • the bot token;
  • the complete chat ID including any minus sign;
  • whether the bot still has access to the chat;
  • whether the bot has permission to send messages there;
  • whether the destination still exists.

The official Telegram sendMessage documentation describes the supported destination format and request parameters.

Common Telegram chat ID mistakes

1. Removing the minus sign

If Telegram returns:

-1001234567890

use that complete value.

Do not change it to:

1001234567890

2. Confusing the user ID with the group ID

An update can contain both information about the user who sent a message and information about the chat where the message was sent.

For the destination chat, look at:

message.chat.id

rather than automatically copying:

message.from.id

3. Looking only for message in channel updates

Channel posts may appear under:

channel_post

instead of:

message

4. Using getUpdates while a webhook is active

A bot configured for webhook delivery cannot simultaneously use getUpdates as its normal update retrieval mechanism.

5. Copying an ID from the wrong update

If several chats are present in the response, verify the title and type fields before saving an ID.

6. Using stale configuration after a group migration

If a group has been migrated to a supergroup, verify that the integration uses the current chat identifier.

7. Exposing the bot token while troubleshooting

Do not share the complete Bot API URL containing the token when asking somebody for help.

Replace the token with a placeholder first.

Quick reference: where to find each Telegram ID

For a private chat or group message:

message.chat.id

For a supergroup message:

message.chat.id

For a channel post:

channel_post.chat.id

To confirm the type of chat:

message.chat.type

or:

channel_post.chat.type

Telegram chat ID checklist

  • Create or identify the Telegram bot used by your integration.
  • Keep the bot token private.
  • Open the private bot conversation or add the bot to the target group or channel.
  • Generate a new message, command or channel post.
  • Call getUpdates if the bot uses long polling.
  • Inspect the webhook payload instead if the bot already uses webhooks.
  • Find the relevant chat object.
  • Copy the complete id value.
  • Keep any leading minus sign.
  • Check the type value to verify the destination.
  • Confirm the chat title when multiple chats appear.
  • Test the ID with a harmless message.
  • Do not expose your bot token while troubleshooting.

Using Telegram chat IDs with WordPress

A Telegram chat ID becomes particularly useful when WordPress needs to send automated notifications to Telegram.

For example, a WordPress integration can send messages when:

  • a contact form is submitted;
  • a new WooCommerce order arrives;
  • a user registers;
  • a security event occurs;
  • a scheduled task completes;
  • a custom WordPress event is triggered.

The integration normally needs two important values:

Bot token
Chat ID

The bot token authenticates the bot.

The chat ID identifies the destination.

Keeping those concepts separate makes Telegram integrations considerably easier to configure and debug.

If you are configuring access notifications in TheOneWP, see the Telegram User Access Notification feature for an example of using a Telegram bot and destination chat inside WordPress.

Final thoughts on finding a Telegram chat, group or channel ID

Finding a Telegram chat ID is mostly a matter of generating an update and inspecting the chat information Telegram sends to your bot.

For private conversations, groups and supergroups, look for the chat.id value inside a message update.

For channels, inspect the chat object inside channel_post.

Copy the complete numeric value exactly as Telegram returns it, including any negative sign, and verify the accompanying chat type and title before saving it in your integration.

If getUpdates appears empty, make sure the bot has actually received a new event and check whether a webhook is already configured.

Once you have the correct ID, test it with a harmless message before relying on it for production notifications.

If you still need to create the bot itself, start with How to create a Telegram bot with BotFather.

The process is simple once you know where Telegram hides the number. Naturally, it hides it several layers deep inside JSON, because displaying an ID directly in the interface would apparently have been an unacceptable concession to convenience.

Simplify your WordPress stack

A modular WordPress toolkit. 98 focused tools.

Ultimately, you can build cleaner workflows, maintain fewer plugins and enable only the features each website actually needs.