DEV Community

Cover image for my.telegram.org says ERROR? For public channels you may not need an api_id
Hugues Ishema
Hugues Ishema

Posted on Fully Autonomous

my.telegram.org says ERROR? For public channels you may not need an api_id

You filled in the form at my.telegram.org/apps, clicked Create application, and got a box that says "ERROR". No code, no reason. You tried again. Same box.

You're in large company:

Nobody outside Telegram knows exactly why the form fails. Before you spend another evening on it, check whether you need an api_id at all.

Do you actually need an api_id?

What you want to do api_id? Use instead
Read posts from a public channel No The web preview at t.me/s/<channel>
Search inside a public channel No t.me/s/<channel>?q=<word>
Get new posts from a public channel every hour No Poll the web preview
Send messages or run a bot No A bot token from @botfather
Read a private channel, a group, your own chats, member lists Yes MTProto (Telethon, Kurigram)

If your project is in the first three rows, you can skip my.telegram.org entirely. If it's in the last row, there's no way around it, and the fixes people report are further down.

Why a bot token doesn't solve it

Another common answer is "just ask BotFather for a token". That works for sending messages. It doesn't work for reading someone else's channel:

  • Telegram's Bots FAQ says bots receive "all messages from channels where they are a member". The channel's admin has to add your bot.
  • The Bot API has no method to fetch a chat's past messages. A bot only sees what arrives after it joins.
  • Updates wait on Telegram's server for "not longer than 24 hours". If your bot is down for a day, those posts are gone from its queue.

If you do need MTProto: library status

Library Status (checked 3 Oct 2026)
Pyrogram Archived on GitHub on 23 Dec 2024. Last release April 2023, yet still 275,823 PyPI downloads last month
pyrofork Archived on 14 Sep 2026. Last release December 2025
Telethon Active. The GitHub repo was archived in February 2026 because the project moved to Codeberg. v1.45.0 shipped on 10 Sep 2026
Kurigram (a Pyrogram fork) Active. v2.2.26 on 12 Sep 2026

All four need an api_id and a phone login. If you only look at GitHub, Telethon looks dead. It isn't.

Telegram's own api_id page adds two rules worth knowing:

  • "Each number can only have one api_id connected to it."
  • "All accounts that log in using unofficial Telegram API clients are automatically put under observation."

So a scraper built on your personal number puts your personal account on the line.

What people report fixes the ERROR

None of these is official, and none works for everyone. They come from the Stack Overflow thread and tdlib #597:

  • Disable ad blockers and VPN browser extensions. This is the top Stack Overflow answer.
  • Try another browser or an incognito window.
  • Switch from Wi-Fi to mobile data, or submit from your phone.
  • Use an IP address in the same country as your phone number. Several people report this; one commenter disputes it.
  • Wait 5 to 10 minutes and submit again. One user got through "after about 2 months" with no other change.

One warning. The tdlib thread also has posts from accounts offering to "apply for you" for a fee. That means giving a stranger a login code for your Telegram account. Don't.

The route that needs nothing: t.me/s/

Every public channel has a web preview at https://t.me/s/<channel>. It's plain HTML. It shows the newest 20 posts with text, date, views, reactions and media. You page back with ?before=<id> and search with ?q=<word>. No account, no phone number, no api_id.

Private channels, groups, bots and users have no preview. For them, t.me/s/<name> redirects to t.me/<name>. That redirect is a quick test of whether this route works for your target.

I wrote up the selectors, a 30-line Python scraper and the gotchas in an earlier post. If you'd rather not maintain a parser, there's a hosted version.

Hosted version

Telegram Channel Scraper on Apify reads the same public preview and returns JSON.

Disclosure: I built this. It costs $0.50 per 1,000 posts plus $0.001 per channel per run, and failed channels aren't charged. Apify's free plan includes $5 of credit a month.

With apify-client 3.x (pip install apify-client):

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run = client.actor("kuezi/telegram-channel-scraper").call(logger=None, run_input={
    "channels": ["telegram", "BotFather"],
    "searchQuery": "passkey",
    "maxMessagesPerChannel": 5,
})

for post in client.dataset(run.default_dataset_id).iterate_items():
    print(post["messageId"], post["date"][:10], post["views"], post["text"][:60].replace("\n", " "))

print(run.status_message)
failed = client.key_value_store(run.default_key_value_store_id).get_record("FAILED")
print(failed["value"] if failed else None)
Enter fullscreen mode Exit fullscreen mode

Output from a real run on 3 October 2026:

423 2026-01-07 2720000 Happy New Year! Telegram released 13 major updates in 2025 –
420 2025-12-15 3020000 For all the details about creating passkeys and making offer
417 2025-12-15 2020000 Passkeys. You can now create a passkey to instantly log in t
Saved 3 messages from 2 channel(s). telegram (9.4M subscribers): 3 posts from 2025-12-15 to 2026-01-07; most viewed 3M views https://t.me/telegram/420. BotFather: failed (no public preview).
[{'channel': 'BotFather', 'error': '"BotFather" has no public web preview (it may be private, a group, a user or a bot, or it doesn\'t exist).'}]
Enter fullscreen mode Exit fullscreen mode

That run cost $0.0025: three posts plus one channel. BotFather is a bot, so it has no preview. The run reports it in FAILED and doesn't charge for it.

Other inputs:

  • dateFrom and dateTo stop paging once a run passes your date range, so you don't pay for old posts.
  • onlyNewMessages turns on monitoring. Schedule the run, and each one returns only posts published since the previous run.

There's also a ready-made task to search a Telegram channel for keywords.

What you can't do without an api_id

  • Private channels, groups and DMs. There's no preview. You need MTProto and an account that's a member.
  • Exact view counts. The preview rounds them ("1.6M" becomes 1600000).
  • Some media. Certain polls and stickers aren't rendered in the preview. The post still has its date, views and usually its text.
  • Posting. Use a bot token for that.

If you hit the ERROR and found a fix that isn't listed here, add it in the comments. I'll update the list.

AI disclosure: I wrote this with AI assistance. Every number and output above was checked or run on 3 October 2026.

Top comments (0)