# Telegram number check: a practical guide to what it can and can't tell you

> How Telegram's phone and username model differs, what a registration check can and can't tell you, how privacy settings affect it, with API examples.

Canonical: https://mobilevalidate.com/blog/telegram-number-check-guide · Last updated: 2026-09-25

![Cover: Telegram number check: a practical guide to what it can and can't tell you](https://mobilevalidate.com/og/blog/telegram-number-check-guide.png)


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-09-25 · Category: Guides · Tags: Telegram, Channel selection, Privacy, Consent, API

A Telegram number check tells you whether a Telegram account can be found for a phone number you hold: registered, not registered or unknown, with the time of the check. Because Telegram is built around usernames and gives people control over who can find them by number, a "not registered" answer is weaker here than on apps where every account is reachable by number. Read it as "not reachable through this number", which is usually what a channel decision needs.

## How does Telegram's phone and username model differ?

Telegram starts from a phone number but doesn't depend on it afterwards. Three design choices matter for a number check.

**A number at sign-up, usernames after.** Each phone number is a separate Telegram account, according to Telegram's [FAQ](https://telegram.org/faq). But people can chat without showing that number. Since October 2014, users have been able to set a public username so that "anyone will be able to find you by your username and contact you – without having to know your phone number" ([Telegram, 2014](https://telegram.org/blog/usernames-and-secret-chats-v2)).

**Numbers hidden by default.** Telegram's FAQ says that by default a user's number is visible only to people they have saved as contacts, and that this can be changed in the privacy settings. A dedicated "Who Can See My Number" control was added in May 2019 ([Telegram, 2019](https://telegram.org/blog/privacy-discussions-web-bots)). Separately, users control whether others are allowed to find them by their phone number at all ([Telegram, 2022](https://telegram.org/blog/ultimate-privacy-topics-2-0)). Both appear as distinct keys in Telegram's own [privacy API documentation](https://core.telegram.org/api/privacy): one for the phone number's visibility and one for being added by phone.

**Accounts without a SIM.** Since December 2022, people can create a Telegram account without a SIM card, using anonymous numbers bought on the Fragment platform ([Telegram, 2022](https://telegram.org/blog/ultimate-privacy-topics-2-0)). Such an account isn't tied to a number from a mobile network at all.

Compare that with apps where an account is normally discoverable through the number it was registered with. On Telegram, the link between "a person" and "a phone number you hold" is looser, and it's under the person's control.

## What can a Telegram registration check tell you?

It answers one narrow question: can a Telegram account be found for this number right now? That supports a few practical decisions:

- **Channel selection.** If a customer asked for updates on Telegram, you know whether their number leads to an account before you try. See [channel selection](/use-cases/channel-selection).
- **Verification code routing.** Before sending a passcode through Telegram, you know whether the number is likely to receive it there, or whether SMS is the better first attempt.
- **A presence signal at sign-up.** A number with an account passed Telegram's own sign-up verification at some point. That makes it a little more likely to be a number in real use. It's one signal among several, as our guide to [reducing fake sign-ups](/blog/how-to-reduce-fake-signups-with-phone-and-email-checks) explains.

Every conclusive answer carries `checked_at`. Accounts come and go, and numbers get reassigned by carriers, so a recent answer is stronger than an old one.

## What can't it tell you?

More than on most platforms, because of the design choices above:

- **Whether the person uses Telegram at all.** They may be on Telegram with a different number, with an anonymous number, or with number discovery switched off.
- **Their username or identity.** The check never returns usernames, names, photos, bios or last-seen times, and it can't be used to look up who is behind a number.
- **Whether they read messages there.** Registration isn't activity. Many people keep accounts they rarely open.
- **Whether you may message them.** An account is not consent. More on this below.

The practical consequence: a `true` is fairly informative, a `false` much less so. Never use `false` alone to conclude that a number is fake.

## How do privacy settings affect the answer?

They can turn "has an account" into "can't be found by this number". When someone restricts who can find them by their phone number, a check through that number may return `registered: false` or `unknown` even though the account exists. Our [Telegram check](/services/telegram-number-check) page notes the same limit.

That's a feature of Telegram, not a fault in the check, and it's the right outcome for the person. They chose not to be found by number. Respect it in your design:

- Don't retry repeatedly to "get a better answer". A privacy setting won't change because you ask again.
- Don't try to work around it through other data sources.
- For people who matter to you, such as a customer who opted in to Telegram updates, ask them directly for the channel and handle they prefer.

## How do you check Telegram with the API?

Use `checks: ["telegram"]` (the alias for `telegram.registered`) on `POST /v1/lookup`. It works in real time for up to 100 numbers per request, and in bulk jobs for larger lists. The test numbers return every state:

```bash
curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001", "+447700900002", "+447700900003", "+447700900005"],
       "checks": ["telegram"], "wait": 5}'
```

The four `telegram.registered` results from the real test-mode response, trimmed:

```json
{"status": "completed",           "registered": true,  "confidence": "high", "checked_at": "2026-09-25T17:17:34.544Z", "billed": false, "reason": null}
{"status": "completed",           "registered": false, "confidence": "high", "checked_at": "2026-09-25T17:17:34.544Z", "billed": false, "reason": null}
{"status": "unknown",             "registered": null,  "confidence": null,   "checked_at": null, "billed": false, "reason": "UPSTREAM_TIMEOUT"}
{"status": "unsupported_country", "registered": null,  "confidence": null,   "checked_at": null, "billed": false, "reason": "UNSUPPORTED_COUNTRY"}
```

Telegram has no country restrictions in live mode; `+447700900005` is the test number that simulates `unsupported_country`. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). Test keys never bill.

Answers that take longer than `wait` come back as `pending`. With test number `+447700900004` and `"wait": 1`, the real response was:

```json
"status": "pending",
"next": {"poll_url": "/v1/lookups/lkp_0VWFm9xa9KWE4k5QYBeh", "poll_after_ms": 2000}
```

Poll `GET /v1/lookups/{id}?wait=10`, or register a [webhook](/docs/webhooks) for `lookup.completed`. You can also combine Telegram with other checks in one request, for example `["telegram", "whatsapp", "viber"]`, to see which apps a customer can be reached on. Answers differ per service for the same number.

## How should you act on each answer?

Decide per message type, and remember that Telegram's "no" is soft:

| Answer | Passcode delivery | Updates the customer opted into | Stored record |
|---|---|---|---|
| `registered: true` | Offer Telegram if you support it; keep SMS as fallback | Send on Telegram if the customer chose it | Store `true` with `checked_at` |
| `registered: false` | Use SMS or another channel | Use the customer's other chosen channel | Store `false`, but treat it as "not found by number" |
| `registered: null` (unknown) | Use your default channel | Keep previous routing | Don't overwrite a stored conclusive answer |
| `pending` | Don't wait in a user-facing flow; use the default | Apply the answer to the next message | Update when it arrives |
| `unsupported_country`, `invalid_number` | Use your default; fix the number if invalid | Same | Flag for cleanup if invalid |

Repeat checks within the freshness window are served from your account's cache for free (`cached: true`, `billed: false`). A monthly refresh, or a re-check after a failed Telegram delivery, is usually enough.

## Where does Telegram fit for verification codes?

It can be a cheaper route for passcodes in markets where Telegram is widely used. Telegram runs a Gateway API that lets businesses send verification codes to users inside Telegram. At the time of writing (September 2026), its own page lists a price of $0.01 per delivered code and says you only pay for codes delivered within the time you specify ([Telegram Gateway](https://core.telegram.org/gateway)).

A registration check fits in front of that: send the code through Telegram only when the number leads to an account, and send the rest by SMS or voice. That avoids a failed attempt and a delay for users who aren't on Telegram. The general pre-send logic, including line type and fraud checks, is in [OTP fraud prevention: checks to run before sending a code](/blog/otp-fraud-prevention-checks-before-sending-a-code).

## What does consent look like for Telegram?

The same as for any channel: people must have given you their number and agreed to hear from you there. A registration check helps you deliver messages people expect. It doesn't create permission to send new ones.

Telegram's public groups and channels make it attractive for spam, which is why the check is built with limits:

- **Check only numbers you hold** for a legitimate purpose: customers, sign-ups and leads who gave you their number.
- **Ranges are refused.** Requests with 20 or more consecutive numbers return `403 suspected_enumeration`, and each account has a daily cap. See [rate limits and abuse](/docs/rate-limits-and-abuse).
- **Yes, no or unknown only.** No usernames, profiles or activity. Our [acceptable use policy](/legal/acceptable-use) forbids profiling and finding people to message unsolicited.
- **Objections are honoured.** People can object through our [opt-out form](/opt-out). Suppressed numbers are skipped and never charged.

Respect the fact that many Telegram users hide their number on purpose. Telegram is named here descriptively. MobileValidate is not affiliated with Telegram.

## What are the key takeaways?

- Telegram links accounts to phone numbers at sign-up but is built around usernames. Numbers are hidden by default, and people control whether they can be found by number.
- A registration check answers whether an account can be found for a number you hold. `true` is informative; `false` often means "not reachable through this number", not "doesn't use Telegram".
- Privacy settings, other numbers and SIM-free anonymous numbers all limit what the check can see. Don't work around them.
- Use `checks: ["telegram"]` in real time or bulk. Handle `pending` without blocking users, and never overwrite a stored answer with unknown.
- Use the answer to route passcodes and expected messages, for example in front of Telegram's own verification gateway.
- It's not consent and it's not a lookup tool. Test every branch with the [test numbers](/docs/test-mode) and see the [Telegram check](/services/telegram-number-check) page for pricing.

## Sources

1. [Telegram FAQ](https://telegram.org/faq) — Telegram, 2026
2. [Usernames and Secret Chats 2.0](https://telegram.org/blog/usernames-and-secret-chats-v2) — Telegram, 2014
3. [Focused Privacy, Discussion Groups, Seamless Web Bots and More](https://telegram.org/blog/privacy-discussions-web-bots) — Telegram, 2019
4. [No-SIM Signup, Auto-Delete All Chats, Topics 2.0 and More](https://telegram.org/blog/ultimate-privacy-topics-2-0) — Telegram, 2022
5. [Privacy settings (API documentation)](https://core.telegram.org/api/privacy) — Telegram, 2026
6. [Telegram Gateway](https://core.telegram.org/gateway) — Telegram, 2026

## Frequently asked questions

### Why can a Telegram check say not registered when the person uses Telegram?

Telegram lets people control whether others can find them by their phone number, and an account can also be linked to a different number than the one you hold. When an account can't be found through the number you checked, the answer can be not registered or unknown even though the person uses Telegram.

### Does the check return the Telegram username or profile?

No. It answers only whether an account is associated with the number. Usernames, names, photos, bios and last-seen times are never returned.

### Is the person notified when their number is checked?

No. Nothing is sent to the number, and the person is not notified by us.

### Can I check Telegram in real time?

Yes. Use the telegram alias (telegram.registered) on POST /v1/lookup for up to 100 numbers per request, or in bulk jobs for up to 50,000 numbers and e-mails.

### Can I use the result to message people on Telegram?

Only people who gave you their number and agreed to hear from you on Telegram. A registered answer is not consent, and our acceptable use policy forbids finding recipients for unsolicited messages.
