Telegram API: List channel posts
Lists the latest posts from a public Telegram channel preview, with text, posting time, approximate views, edit flag, forwarded source, thumbnails and post links.
Unofficial. Not affiliated with or endorsed by Telegram.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Channel, required
channel Public channel username with or without @, or its t.me link, for example durov.
https://t.me/TelegramTips
- Max Results optional
max_results Maximum number of recent posts to return, for example 40. Up to 100.
45
Whole number from 1 to 100. Default
20.
Input as JSON
{ "channel": "https://t.me/TelegramTips" , "max_results": 45}Output
{ "posts": [ { "text": "Buttons Inside Messages. Developers are able to put multiple buttons inside any message.\n\nWith ephemeral messages, this allows for automated flows that can run entire apps in one message.\n\nMore information for developers is available here.", "views": 1280000, "edited": false, "post_link": "https://t.me/TelegramTips/576" , "posted_at": "2026-10-16T16:47:51+00:00", "post_number": 576, "photo_thumbnail_links": [], "video_thumbnail_links": [ "https://cdn1.telesco.pe/file/aUIHQwn8GPF_LRNxPwSSXdBtBd9BBrScp_l_ebOBy8JrYclghi3Tl6iuegdn3cJtTng0kM75ScpH4feNG7TNKj21b5SfiJzcjcrpvCIVIc3vB91b67FEA64_Q3hnrrnba9L1ZCZLn0GLQF_bgto98_JVDF3HgQf26iY0avlu-PQNn0pAQcVDva5PvXOWCpoiMsdn-XxTEVeF8CzRhR1ZVQ3YL_AXZwi7oBUkhdBpr2Qyuk8IeMInQtouZ3CqXTxCU7QsHcPSCM5syjd…" ], "forwarded_from_channel": null }, { "text": "Welcome Messages. Group and channel owners can create messages to greet new members and give them extra info.\n\nWelcome messages are only visible to each new member – and can include media, rich formatting and more.\n\nTo add a welcome message in your group or channel, open its profile and select Edit …", "views": 7560000, "edited": false, "post_link": "https://t.me/TelegramTips/575" , "posted_at": "2026-08-27T22:11:03+00:00", "post_number": 575, "photo_thumbnail_links": [], "video_thumbnail_links": [ "https://cdn1.telesco.pe/file/NGmNxtNS2xEOeEq-mEImzZhz_xruCBvJvXvHDmwJIMpi2TjY2-NSGp4PL-Ihj63PNBxJfINS40C5_aSYmE2J6wcSCwkQRKzuWRvpF-xsgGTLcn1Mni_pqMGSIVGszKLoyYbaxxI8swO3g5y-upSh4ZcZrDS3GsWq0on_sexAHfKx7dlPpvB0TBuGn3lWfZTju-Rns5s3pH_okTNTm29Yq8Fs8jcn8mIv0joCMivW6imGlUM1qWS-rYoLYnQi8D_SJxvaUuu47JfdzI-…" ], "forwarded_from_channel": null }, { "text": "Telegram Communities. Several groups, channels and bots can be linked together in a single community, where members can view and join other chats instantly.\n\nAdmins in communities have granular privacy controls that allow them to hide certain chats and control whether members can add new chats or on…", "views": 10500000, "edited": false, "post_link": "https://t.me/TelegramTips/574" , "posted_at": "2026-07-22T21:06:21+00:00", "post_number": 574, "photo_thumbnail_links": [], "video_thumbnail_links": [ "https://cdn1.telesco.pe/file/eE6PBgH68wpuqeeZEI5WkoZ6BdWF5IjsGDiMYQ_id74iaRI6UGH0i5Soh7V54eiUTnGv_pPEcvGBD98-TFuHciJCr76HTu6b-hq1LtWv0mAwKJR3KiqSp1gCExp7AGp_HQx61oRSZLcA_lZV5-x9Y0Sa5Ks5gv8ZZjPrqd5MaJoD5ueFBHksTE4kpylTuf4VvYvOB5Qs5kxleeOkr2_99H0jL-r0eEsN0N61SHi8qI0MjN2CU0pmJU0VI_SfJgVeIMZ5jge73DpS9sm…" ], "forwarded_from_channel": null } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"t.me/list_channel_posts","input":{"channel":"https://t.me/TelegramTips","max_results":45}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "t.me/list_channel_posts" , "input": { "channel": "https://t.me/TelegramTips" , "max_results": 45 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "t.me/list_channel_posts" , "input": { "channel": "https://t.me/TelegramTips" , "max_results": 45 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run t.me/list_channel_posts# with {"channel":"https://t.me/TelegramTips","max_results":45}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "channel" ], "properties": { "channel": { "type": "string", "description": "Public channel username with or without @, or its t.me link, for example durov." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of recent posts to return, for example 40. Up to 100." } }}Output schema
{ "type": "object", "required": [ "posts" ], "properties": { "posts": { "type": "array", "items": { "type": "object", "required": [ "text", "posted_at", "views", "edited", "forwarded_from_channel", "photo_thumbnail_links", "video_thumbnail_links", "post_link", "post_number" ], "properties": { "text": { "type": "string", "description": "Plain text of the post, including link labels." }, "views": { "type": [ "integer", "null" ], "description": "Displayed view count converted to an approximate whole number, or null when unavailable." }, "edited": { "type": "boolean", "description": "Whether the preview marks this post as edited." }, "post_link": { "type": "string", "description": "Link to the post." }, "posted_at": { "type": "string", "format": "date-time", "description": "Post date and time in UTC, ISO 8601." }, "post_number": { "type": "integer", "description": "Channel post number." }, "photo_thumbnail_links": { "type": "array", "items": { "type": "string" }, "description": "Links to photo thumbnails." }, "video_thumbnail_links": { "type": "array", "items": { "type": "string" }, "description": "Links to video thumbnails." }, "forwarded_from_channel": { "type": [ "string", "null" ], "description": "Name shown as the forwarded source, or null." } } }, "description": "Channel posts in newest-first order." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
t.me/list_channel_posts- Returns
- text, posted_at, views, edited, forwarded_from_channel, thumbnail links, post_link, post_number
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method t.me/list_channel_posts with the inputs above.
Ask your agent
- Show me the latest 40 posts from the durov channel with their view counts and post times
- Pull the 15 most recent posts from @techdigest_news including which ones were edited
- List recent posts from the t.me/markets_daily channel with links and any forwarded sources
- I need the last 60 messages from the public channel newsroom_alpha, with thumbnails and post numbers
- Get up to 25 recent posts from the travel_deals_eu channel on Telegram, showing text and approximate views
See more
All Telegram methodsGets the title, username, description, subscriber total, verification, photo and public media totals of a public Telegram channel.
t.me/get_channelLists an account's latest public Threads posts, newest first, with text, engagement counts, thumbnails and links. Only posts shown without logging in are returned.
threads.com/list_recent_postsLists the latest publicly embeddable posts and reels from an Instagram account, newest first. Without login Instagram may show fewer posts than requested. View counts that are not available are null.
instagram.com/list_recent_postsLists a YouTube channel's public videos, Shorts, or live uploads, newest first or most popular first, along with channel details. Counts and dates taken from displayed text may be approximate.
youtube.com/list_channel_videosLists a Mastodon account's latest public posts, newest first. Replies and boosts are optional. Private and unlisted posts are left out.
mastodon.social/list_recent_postsLists an account's latest public Bluesky posts, newest first. Replies and reposts are left out unless requested; a repost's time is when the account reposted it.
bsky.app/list_recent_postsLists the latest public articles by a Medium writer or publication (by username, publication name or Medium link), with dates, reading times, claps, member-only labels and tags.
medium.com/list_author_articlesFinds a Substack newsletter by name or web address and returns its latest public posts with dates, authors, access level and engagement counts.
substack.com/list_newsletter_posts