Telegram channel posts API
Page recent messages from a public Telegram channel by @username — text, views, media, and reactions in JSON.
GET /v1/telegram/channels/{handle}/posts1 credit per successful request.
About this endpoint
News monitors and research pipelines often start with a channel username and need the recent message stream: body text, view counts, photos or video links, and reaction tallies. Building that with an MTProto userbot means session files, flood waits, and account bans. The public t.me preview already exposes what most enrichment jobs need.
`GET /v1/telegram/channels/{handle}/posts` lists recent posts for a public broadcast channel. Pass the username in the path (with or without `@`), send `x-api-key`, and branch on `data.lookupStatus` before you write rows. On `found`, `data.posts` is newest-first. Each item can include `postId`, simplified HTML `text`, ISO `date`, `views`, `forwardedFrom`, `replyTo`, `photoUrls`, `videoUrl`, and `reactions`. Page older messages with the opaque `cursor` query param from `data.nextCursor` while `data.hasMore` is true. CDN media URLs can expire; download promptly if you need durable copies.
This route is channels only. Public groups are not supported on the posts operations. For the entity card (title, description, subscriber count), use `GET /v1/telegram/channels/{handle}`. For one message by id, use `GET /v1/telegram/channels/{handle}/posts/{postId}`. Pricing for this list operation is shown on this page; trust `meta.creditsCharged` on the response.
Telegram channel posts API FAQ
How do I list Telegram channel posts by handle?
Call GET /v1/telegram/channels/{handle}/posts with your Social Fetch API key in the x-api-key header. The handle is the public @username. Read data.lookupStatus, then data.posts. Full parameters and examples are in the API docs linked from this page.
How many credits does listing Telegram channel posts cost?
Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged — that field is the billing source of truth.
How does pagination work on Telegram channel posts?
Each response includes data.nextCursor and data.hasMore. When hasMore is true, pass nextCursor as the cursor query param on the next request. The cursor is opaque — do not invent or parse it. Omit cursor for the first page.
What fields are in each Telegram channel post?
Items can include postId, text (simplified HTML with line breaks and links), date (ISO 8601), views, forwardedFrom, replyTo (when the message quotes another), photoUrls, videoUrl, and reactions (emoji or custom emoji metadata plus counts). Media URLs come from Telegram CDN and may expire.
Does this work for public Telegram groups?
No. The channel posts list and single-post routes support public broadcast channels only. Groups are not supported on these operations. Use GET /v1/telegram/channels/{handle} when you need group metadata from a public username.
Channel posts list vs single post vs channel metadata?
Use this route to page recent messages for a handle. Use GET /v1/telegram/channels/{handle}/posts/{postId} when you already know the numeric post id. Use GET /v1/telegram/channels/{handle} for the channel or group identity card, not the message stream.
What does lookupStatus mean on channel posts?
found means data.posts may contain messages. not_found means the username did not resolve to a public channel page. restricted covers private or non-scrapable contact pages. HTTP 200 still means the request finished; always branch on lookupStatus before treating posts as a found feed.