Skip to content
scrapeatlas.Dashboard

Get Telegram channel posts

Try in Playground

Read one page of Telegram channel posts with channel metadata, media inventory, text, media and reactions. Continue older history with cursor or search within the channel with q.

GET/v1/telegram/channel/postsx-api-key
x-api-keystringrequiredheader

Your ScrapeAtlas customer key. Create one on /account/ and set SCRAPEATLAS_API_KEY.

Query parameters
3
handlestringrequiredquery

Public handle, @handle or HTTPS t.me/handle URL.

max 128 chars

Exampleexample
cursorstringquery

Optional numeric older-message cursor for the request; the response carries the next older cursor or null.

qstringquery

Optional channel text query, from 1 to 200 characters.

min 1 chars · max 200 chars

Response fields
64
requestIdstring

Operational request identifier.

Source attempts, decoded bytes, elapsed time and active-request sharing.

accounting.upstreamRequestsinteger

Always included.

≥ 0

accounting.responseBytesinteger

Always included.

≥ 0

accounting.durationMsnumber

Always included.

≥ 0

accounting.coalescedbooleanoptional

Optional.

successboolean

Whether usable data was returned.

statusenum

success, partial, failed or challenged.

one of: success, partial

sourceUrlstring

Retrieved channel page URL.

absolute HTTPS URL

fetchedAtstring

UTC retrieval time.

Field coverage and extraction warnings.

coverage.sourceenum

Always included.

one of: public_preview, public_embed

coverage.completeboolean

Always included.

coverage.warningsenum[]

Always included.

Channel metadata, audience and photo/video/file/link inventory.

channel.handlestring

Canonical lowercase username.

channel.urlstring

Canonical t.me URL.

absolute HTTPS URL

channel.entity_typeenum

channel, group, user_or_bot or unknown, based on the landing page.

one of: channel, group, user_or_bot, unknown

channel.namestring

Public display name.

min 1 chars

channel.descriptionstringnullable

Public description with visible inline text and rendered line breaks. Null when absent.

channel.avatar_urlstringnullable

Public HTTPS avatar URL, or null when absent.

channel.is_verifiedboolean

Whether the page displays a verified badge.

channel.subscriber_countintegernullable

Numeric channel subscriber count derived from the displayed count.

channel.subscriber_count_textstringnullable

Original displayed subscriber count, retaining abbreviations.

channel.member_countintegernullable

Public group member count; null for channels.

channel.member_count_textstringnullable

Original displayed member count, retaining abbreviations.

channel.online_countintegernullable

Group online count when shown, otherwise null.

channel.photo_countintegernullable

Displayed inventory count; null when absent.

channel.video_countintegernullable

Displayed inventory count; null when absent.

channel.file_countintegernullable

Displayed inventory count; null when absent.

channel.link_countintegernullable

Displayed inventory count; null when absent.

Post records in source order, including rendered text, media and reactions.

up to 100 items

posts.idstring

Source message ID as a decimal string.

posts.channel_handlestring

Canonical channel handle.

posts.urlstring

Canonical post permalink.

absolute HTTPS URL

posts.author_namestringnullable

Displayed author name.

posts.author_urlstringnullable

Public author URL.

posts.textstringnullable

Post text with normalized whitespace.

posts.renderedTextstringnullable

Post text with rendered line breaks and visible inline text.

posts.published_atstringnullable

Source publication datetime.

posts.view_countintegernullable

Numeric displayed view count.

posts.view_count_textstringnullable

Original displayed view count.

Emoji or custom emoji ID with numeric and displayed reaction counts.

up to 100 items

posts.reactions.emojistringnullable

Always included.

posts.reactions.emoji_idstringnullable

Always included.

posts.reactions.countintegernullable

Always included.

posts.reactions.count_textstringnullable

Always included.

posts.reaction_countintegernullable

Sum of available reaction counts.

Forward attribution name and URL when shown.

posts.forwarded_from.namestringnullable

Always included.

posts.forwarded_from.urlstringnullable

Always included.

Ordered photo, video, document or audio entries with source URLs, thumbnails and displayed duration.

up to 100 items

posts.media.typeenum

Always included.

one of: photo, video, document, audio

posts.media.urlstringnullable

Always included.

posts.media.thumbnail_urlstringnullable

Always included.

posts.media.durationstringnullable

Always included.

Linked URL, site name, title, description and image URL.

posts.link_preview.urlstringnullable

Always included.

posts.link_preview.site_namestringnullable

Always included.

posts.link_preview.titlestringnullable

Always included.

posts.link_preview.descriptionstringnullable

Always included.

posts.link_preview.image_urlstringnullable

Always included.

cursorstringnullable

Optional numeric older-message cursor for the request; the response carries the next older cursor or null.

has_moreboolean

Whether another older-message cursor is available.

HTTP 200 returns the success variant. Check status: partial means usable data with warnings, and failed or challenged requests carry a failure object described in Errors & responses.

Error codes
10
HTTPfailure.codeMeaning
400invalid_requestMissing, duplicate, unsupported or invalid parameters.
401unauthorizedMissing or invalid service key.
403restricted_pagePublic page explicitly reports restricted access.
404not_foundMissing profile or generic contact fallback.
429upstream_rate_limitedNo automatic retry.
502upstream_challenged unsupported_pageChallenge, unrecognized page or identity mismatch.
502upstream_error unsafe_redirect response_too_large payload_too_complex request_limitBounded retrieval failed.
503busyAll worker slots occupied.
504timeoutDeadline exceeded.
200partialUnknown entity type or unavailable displayed counts.