POST /api/v1/bulk-taskscurl -X POST "https://tgvalidator.com/api/v1/bulk-tasks" \
-H "X-API-Key: sk_your_api_key" \
-F service_type=tg_username_profile_batch \
-F file=@usernames.txtPOST /api/v1/bulk-tasksservice_type=tg_username_profile_batchUser ID, active days and avatar URL for a whole list of usernames.
An add-on for whole large lists — for a handful of numbers the realtime check answers in the same request. Realtime check →
Submitting returns a task id right away; check the task by that id and, once it succeeds, the response carries the result file download link. Each request is shown with its own response.
The task id comes back straight away with preparing set to true while the file is prepared in the background: invalid lines, duplicates and — for number tasks — numbers without a country code or from another country are removed and not charged. Balance is reserved for the submitted lines and settled on completion; the difference is refunded.
POST /api/v1/bulk-taskscurl -X POST "https://tgvalidator.com/api/v1/bulk-tasks" \
-H "X-API-Key: sk_your_api_key" \
-F service_type=tg_username_profile_batch \
-F file=@usernames.txt200 OK{
"code": 0,
"msg": "ok",
"data": {
"id": "3f9c2a7d8e4b4c1a9f0e6b2d5c8a7e13",
"product": "tg_username_profile_batch",
"status": "processing",
"submitted_lines": 1015,
"total": 1015,
"invalid_cnt": 0,
"no_code_cnt": 0,
"other_country_cnt": 0,
"duplicate_cnt": 0,
"preparing": true,
"created_at": "2026-09-08T09:30:00Z"
}
}Poll by task id. Once preparation finishes, submitted_lines = total + invalid_cnt + no_code_cnt + other_country_cnt + duplicate_cnt, where total is what is checked and charged. A successful response carries the success and failure counts and the result file download link; a task refused during preparation is failed with reason_detail and refunded in full.
GET /api/v1/bulk-tasks/{id}curl "https://tgvalidator.com/api/v1/bulk-tasks/3f9c2a7d8e4b4c1a9f0e6b2d5c8a7e13" \
-H "X-API-Key: sk_your_api_key"200 OK{
"code": 0,
"msg": "ok",
"data": {
"id": "3f9c2a7d8e4b4c1a9f0e6b2d5c8a7e13",
"product": "tg_username_profile_batch",
"status": "success",
"submitted_lines": 1015,
"total": 1000,
"invalid_cnt": 3,
"no_code_cnt": 0,
"other_country_cnt": 0,
"duplicate_cnt": 12,
"preparing": false,
"success_cnt": 990,
"failure_cnt": 10,
"result_url": "https://…/result.csv",
"created_at": "2026-09-08T09:30:00Z"
}
}Bulk is not realtime made bigger — it is submit once, run in the background, collect later. You do not need to keep the page open; task state and results stay in your dashboard.
A .txt or .csv with one number per line. It is streamed straight through; nothing is written to disk.
Obvious problems (an empty file, the wrong format, too few lines) are rejected on upload. Balance is then reserved and the file is prepared in the background: invalid lines, duplicates and numbers without a country code or from another country are removed, and the single-country rule is checked. A file that fails there ends as a failed task, refunded in full; otherwise only the remaining lines are checked, and the task is settled on completion.
The task runs on its own — close the page if you like. A failure is reported straight away and fully refunded.
Collect the file from the bulk check page. You pay only for numbers that actually returned a result; the difference is refunded.
The download is a single CSV file containing this full table.
identifier · alex_kim — The submitted username, without @ or t.me/ (e.g. alex_kim).activated · true — Whether the username belongs to an existing Telegram account: true or false. When it is not true, every other column in that row is left empty.uid · 1234567890 — Telegram user ID; can be empty even for an existing account.activedays · 9 — Days since the account was last seen, as a whole number — smaller is more recent. When the account hides its exact last-seen time, Telegram only reveals a range, and the value is an approximation: 0 (recently), 7 (within a week), 30 (within a month) or 1000 (a long time ago). Can be empty when the account reveals no last-seen information.avatar_url · https://cdn5.telesco.pe/file/example.jpg — Avatar URL, empty when the account has no avatar.activedaysactivatedSeparate recently active usernames from long-inactive ones and work through the likelier responders first.
activatedactivedaysConfirm the account exists, then flag usernames with no sign of recent activity before spending further effort.
activedaysuidGroup usernames by how recently they were active to support later list scoring and prioritisation.
uidavatar_urlAdd user IDs and public avatar links to an existing username list, reducing manual lookups later.
Telegram bulk username profile check returns, on top of confirming the account exists, the user ID, how many days have passed since the account was last seen, and the avatar URL. Input is usernames, not numbers; no country to choose, one username per line.
| Realtime check | Bulk check | |
|---|---|---|
| How many numbers | 1 number per single check; several per multi request — exact caps are in the API docs | A whole large list in one task — the current size range is on the pricing page |
| Getting results | Right away: single and multi-endpoint answer in the same response; the dashboard returns them one by one | Download a result file when the task finishes |
| Country / region | No restriction — mix freely in one request | Pick one country/region on submission; the list should be essentially that country, and too many numbers from elsewhere fail the task with a full refund |
| Result shape | JSON, fields per number | Result file (one CSV with the full table) |
| Typical use | Form validation, agent lookups, pre-send gating | List hygiene, pre-campaign filtering, stored-data cleanup |
Use bulk for a whole large list. For a handful of numbers the realtime check answers in the same request, with no task to schedule.
The precheck drops malformed lines, so they never enter the billable count. Of the numbers that remain, any the upstream cannot resolve are not charged either. You pay only for numbers that actually return a result.
It depends on the number count and the product. You can close the page after submitting; the task runs in the background and the result waits for you on the bulk check page.
Yes. A failed task is refunded in full. If the task succeeds but some numbers return nothing, that portion is refunded automatically. The difference between the reserved amount and what was actually charged always comes back.
Bulk and realtime checks draw on the same balance — nothing extra to enable. Sign up and upload your first file on the bulk check page.