Telegram hub

Telegram channel post API

Resolve a public channel username and post ID to one message — text, views, media, and reactions.

GET /v1/telegram/channels/{handle}/posts/{postId}

1 credit per successful request.

About this endpoint

Alert webhooks, shared t.me links, and archived message IDs often point at one Telegram post you already know. You need that message as structured JSON: body text, view count, photos or video, and reaction tallies. Scraping the public preview yourself means brittle HTML and CDN URLs that change. An MTProto userbot adds session files and flood risk for a single lookup.

`GET /v1/telegram/channels/{handle}/posts/{postId}` returns one public broadcast-channel message. Pass the channel username (with or without `@`) and the numeric `postId` from the public URL, send `x-api-key`, and branch on `data.lookupStatus` before you write a row. On `found`, `data.post` can include `postId`, simplified HTML `text`, ISO `date`, `views`, `forwardedFrom`, `replyTo`, `photoUrls`, `videoUrl`, and `reactions`. The handle path segment may also be a full t.me post URL when it matches the same `postId`. CDN media URLs can expire; download promptly if you need durable copies.

This route is channels only. Public groups are not supported. To page recent messages without a known id, use `GET /v1/telegram/channels/{handle}/posts`. For the entity card (title, description, subscriber count), use `GET /v1/telegram/channels/{handle}`. Pricing for this single-post operation is shown on this page; trust `meta.creditsCharged` on the response.

Telegram channel post API FAQ

How do I fetch a single Telegram channel post by ID?

Call GET /v1/telegram/channels/{handle}/posts/{postId} with your Social Fetch API key in the x-api-key header. The handle is the public @username; postId is the numeric id from the public t.me URL. Read data.lookupStatus, then data.post. Full parameters and examples are in the API docs linked from this page.

How many credits does a Telegram channel post lookup 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.

Where do I get the postId?

Use the numeric message id from a public Telegram post URL (t.me/channelname/12345 → postId 12345), or from a prior list response where each item includes postId. The path parameter must be digits only.

What fields are in a single Telegram channel post?

On found, data.post 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 single-post and channel posts list 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.

Single post vs channel posts list vs channel metadata?

Use this route when you already know the numeric post id. Use GET /v1/telegram/channels/{handle}/posts to page recent messages for a handle. Use GET /v1/telegram/channels/{handle} for the channel or group identity card, not message content.

What does lookupStatus mean on a single channel post?

found means data.post is populated. not_found means the username or post did not resolve on 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 the payload as a found message.