WhatsApp vs Telegram Number Lookup: Which API Do You Need?
WhatsApp and Telegram are two of the biggest messaging platforms for business outreach, but they are separate networks with separate user bases. A number registered on one tells you nothing about the other, so a contact list needs a check per platform. If you validate or enrich phone numbers, you will often want to know which platform, or both, a contact actually uses.
This guide compares the WhatsApp and Telegram lookup APIs side by side: what you send, what you get back, how the two-step flow works on each, and a short Python script that checks one contact on both.
What they have in common
Both APIs answer the same core questions about a contact:
- Is it registered? A lightweight check tells you whether the number (or, on Telegram, the handle) has an account.
- What is the public profile? For registered accounts you can fetch the avatar and the bio or About text.
Both follow the same two-step flow. The registration check returns a userHash for accounts that exist, valid for 24 hours, and the heavier profile operations accept only that hash. A missing, unknown or expired hash is rejected, so you never pay for profile calls on numbers that do not exist.
Side-by-side comparison
| Telegram | ||
|---|---|---|
| Check operation | check-exist-by-phone | check-exists |
| Input | phoneNumber, or cc + phone in the variant | peer: +phone, @username / bare username, or user:<id> |
| Registered flag | isExist: true, false or null (indeterminate, retry later) | exists: true or false with a reason such as PHONE_NOT_OCCUPIED |
| Hash | userHash, valid 24 hours | userHash, valid 24 hours |
| Extras summary | hasExtra lists the enrichment fields on offer | the check returns the numeric user id, username and display name |
| Avatar | get-avatar: temporary photo URL plus a picture version id | get-picture: base64 image data plus pictureSet |
| Bio | get-about | get-about |
| Business data | get-biz-profile (isBusiness, name, address, website) | not part of the lookup |
| Presence | get-presence (privacy-constrained) | not part of the lookup |
| Bulk helper | batch-check-10 takes up to 10 numbers | one call per peer |
Request examples
The numbers you pass in matter. WhatsApp takes the digits of a full international number; spaces, dashes, + and a 00 prefix are all accepted. Telegram's peer has three forms, and a phone must carry its leading +, which you write as %2B in a hand-built URL.
# WhatsApp: validate by phone number
curl "https://api.opendata-api.com/api/project/whatsapp/check-exist-by-phone?key=YOUR_API_KEY&phoneNumber=15551234567"
# Telegram: validate by phone number (plus sign encoded)
curl "https://api.opendata-api.com/api/project/telegram/check-exists?key=YOUR_API_KEY&peer=%2B15551234567"
# Telegram: validate by username
curl "https://api.opendata-api.com/api/project/telegram/check-exists?key=YOUR_API_KEY&peer=@some_username"
The Telegram handle lookup is the practical difference: when all you have is a username, only Telegram can resolve it. For the full WhatsApp flow, read the WhatsApp number lookup guide; for the Telegram side, see the Telegram number checker.
What the profile calls return
WhatsApp leans toward business context. get-biz-profile returns the business name, verified level, description, address, email and website, and personal numbers answer isBusiness=false. get-presence reports online and last-seen state only when the person's privacy allows it, otherwise visible=false. The details are in the profile photo, About and presence guide.
Telegram profile lookups focus on the avatar and the bio. Telegram photos have no public URL, so get-picture returns the image base64-encoded as image/jpeg in data; decode it to get the bytes. pictureSet=false means no photo or a hidden one. get-about returns the bio, the numeric user id and the username, and a group or channel peer gets a bad-request business code instead.
Check one contact on both platforms
This script runs the cheap check on both networks and returns one record. It uses .get() throughout, so a missing field never raises.
import requests
API_KEY = "YOUR_API_KEY"
ROOT = "https://api.opendata-api.com/api/project"
def get(project, operation, **params):
params["key"] = API_KEY
resp = requests.get(f"{ROOT}/{project}/{operation}", params=params, timeout=30)
resp.raise_for_status()
body = resp.json()
# A reply can be wrapped more than once as {"code": ..., "data": {...}}
while isinstance(body, dict) and "code" in body and isinstance(body.get("data"), (dict, list)):
body = body["data"]
return body
def channels(number):
"""Return which platforms the number is registered on."""
wa = get("whatsapp", "check-exist-by-phone", phoneNumber=number.lstrip("+"))
tg = get("telegram", "check-exists", peer="+" + number.lstrip("+"))
return {
"number": number,
"whatsapp": wa.get("isExist"), # True, False or None (unknown)
"telegram": tg.get("exists"),
"telegram_reason": tg.get("reason"),
"wa_hash": wa.get("userHash"),
"tg_hash": tg.get("userHash"),
}
print(channels("+15551234567"))
A None in the WhatsApp field is not a "no": it means the answer was indeterminate, so retry after a short pause. Store the hashes, reuse them for profile calls within 24 hours, and run the registration check again afterwards.
When to use which
- Consumer lead lists and broad international reach: start with WhatsApp.
- Telegram-centric communities, handles instead of numbers, group and channel audiences: use Telegram.
- Maximum coverage: run both. A contact may be reachable on one platform and absent from the other, and channel choice affects deliverability and engagement.
Platform popularity varies sharply by country, so measure your own list rather than assuming: check a sample on both, compare hit rates per country and prioritize accordingly. The lead verification workflow shows how to turn per-channel results into one contact-quality score.
Best practices
- Treat the checks as independent. Never infer WhatsApp registration from a Telegram hit or the reverse.
- Pre-validate before you message. If you plan to send, the WhatsApp messaging guide and the Telegram messaging guide both start with a recipient check.
- Cache per platform. Keep the registration answer and the hash with a timestamp, and re-check on a schedule instead of on every touch.
- Respect privacy. Empty bios and missing photos are normal outcomes, not errors. Use profile data only for a lawful purpose and follow each platform's terms.
FAQ
If a number is on WhatsApp, is it also on Telegram? Not necessarily. The two networks are independent, so you have to check each one. Run both lookups and treat each result separately.
Which platform lets me search by username?
Telegram. Its check-exists operation accepts @username or a bare username as well as +phone and user:<id>. The WhatsApp check starts from a phone number.
Do both APIs use the same two-step flow?
Yes. Each registration check returns a userHash for accounts that exist, valid for 24 hours, and the profile operations accept only that hash.
Which one returns business information?
WhatsApp. Its get-biz-profile operation returns the business name, address and website, and flags personal numbers with isBusiness=false. The Telegram lookup returns the avatar and the bio.
How do I check many numbers at once?
WhatsApp offers batch-check-10 for up to 10 numbers in one request, which cuts HTTP round-trips on larger lists. Telegram checks run one peer per call.
Get started
Both APIs share the same free-credit model, so you can test each before committing. Create an account on the login page, copy a key from your Dashboard, then try the WhatsApp and Telegram pages side by side, and check pricing for per-request costs.