✈️

Telegram Number Validation & Profile Lookup APIs

Query a Telegram user's public profile by phone number, username, or user ID.

Two-step flow: first call Check Exists to obtain a userHash, then pass that userHash to Get About / Get Picture. The backend automatically picks an available logged-in account to serve the query and transparently fails over to another account if one becomes unavailable. No session management required.

RESTful JSON API for lead validation, CRM enrichment, and customer intelligence.

Try the interactive demo

Overview

💡

Base URL https://api.opendata-api.com

Every call needs an API key. Paste it once below — it's attached to each request automatically.

GET /api/project/telegram/check-exists

Check Telegram Peer Exists

Details

Resolve a peer and return whether it exists on Telegram. Cheapest query; use it to pre-validate numbers/usernames before the about/picture queries. When exists=true, the response also includes the numeric Telegram user id, username (when the peer has one), display name, and a userHash that must be passed to Get About / Get Picture to authorize the heavier lookup. The userHash is valid for 24 hours. When the peer cannot be resolved, exists=false and reason carries the upstream error code (e.g. PHONE_NOT_OCCUPIED, USERNAME_NOT_OCCUPIED). The peer accepts three forms: +phone (digits with a leading +, e.g. +8613800138000), @username or a bare username, and user:<id> for a numeric user ID.

ParameterInValue
peer* path
curl -X GET 'https://api.opendata-api.com/api/project/telegram/check-exists?key=<API_KEY>&peer=<peer>'
GET /api/project/telegram/get-about

Get About / Bio Text

Details

Retrieve a Telegram user's public bio (About) text, plus the numeric user id and username. Two-step flow: first call Check Telegram Peer Exists to obtain a userHash for the target peer, then pass that userHash here. Calls without a valid (or expired/unknown) userHash are rejected without hitting the upstream. The peer is resolved from the userHash server-side — no peer parameter is accepted. If the peer does not exist, exists=false and reason explains why. An empty about means the user has no bio or hides it. If the peer exists but is a group/channel rather than a user, the response carries a bad-request business code.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/telegram/get-about?key=<API_KEY>&userHash=<userHash>'
GET /api/project/telegram/get-picture

Get Profile Photo (Avatar)

Details

Fetch a Telegram user's profile photo. Two-step flow: first call Check Telegram Peer Exists to obtain a userHash for the target peer, then pass that userHash here. Calls without a valid (or expired/unknown) userHash are rejected without hitting the upstream. The peer is resolved from the userHash server-side — no peer parameter is accepted. Telegram photos have no public URL, so the photo is returned base64-encoded with its MIME type (image/jpeg) — decode the data field to get the image bytes. pictureSet=false means the user has no photo or hides it by privacy settings. If the peer does not exist, exists=false and reason explains why.

ParameterInValue
userHash* query
curl -X GET 'https://api.opendata-api.com/api/project/telegram/get-picture?key=<API_KEY>&userHash=<userHash>'