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:
- The Stack Overflow question "my.telegram.org sends an ERROR when I want to create an API id/hash" has almost 96,000 views.
- tdlib/telegram-bot-api #597 has 52 comments. The latest one is from 16 September 2026.
- Telethon's maintainer answered the same report with "I don't have any control over that page".
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)
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).'}]
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:
-
dateFromanddateTostop paging once a run passes your date range, so you don't pay for old posts. -
onlyNewMessagesturns 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)