Telegram hub

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}/posts

1 credit Failed requests are free

About this endpoint

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.page.nextCursor while data.page.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; bill from 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. See the API docs for parameters and examples.

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.page.nextCursor and data.page.hasMore. When hasMore is true, pass nextCursor as the cursor query param on the next request. The cursor is opaque. 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.