Telegram Channel Posts (Recent, by Username)
omnial/telegram-web-fetch-channel-posts
Given a public Telegram channel's username, returns its recent posts (text, post type, view count, star/emoji reactions, media presence, and any link preview) plus channel info (title, subscriber count, verification status) and pagination cursors for paging through older posts with `before`/`after`.
Price
Up to $0.00205 per call; you pay what the call used
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
Data from Telegram.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/telegram-web-fetch-channel-posts" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/telegram-web-fetch-channel-posts" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/telegram-web-fetch-channel-posts", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/telegram-web-fetch-channel-posts", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.00205 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"channel"
],
"properties": {
"after": {
"type": "integer",
"default": 0,
"description": "Newer than this id"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"examples": [
20
],
"description": "Number of posts"
},
"before": {
"type": "integer",
"default": 0,
"description": "Older than this id"
},
"channel": {
"type": "string",
"examples": [
"durov"
],
"description": "Channel username"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"properties": {
"channel": {
"type": "string",
"description": "Echoes the queried channel username."
},
"messages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "The message id, used for `before`/`after` paging."
},
"date": {
"type": "string",
"description": "ISO 8601 post timestamp, e.g. '2026-09-06T17:40:39+00:00'."
},
"text": {
"type": "string",
"description": "Plain-text post body."
},
"type": {
"type": "string",
"description": "e.g. 'text', 'photo', 'video' -- observed on real posts."
},
"media": {
"type": "object",
"properties": {
"photos": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Withheld the same way as `channel_info.photo`."
},
"description": "Photo attachments. Empty on posts with no photo."
},
"videos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "Withheld the same way as `channel_info.photo`."
},
"thumb": {
"type": [
"string",
"null"
],
"description": "Withheld the same way as `channel_info.photo`."
},
"duration": {
"type": [
"string",
"null"
],
"description": "e.g. '0:20'. Observed `null` on at least one real video."
}
},
"additionalProperties": true
},
"description": "Video attachments. Empty on posts with no video."
},
"has_unsupported": {
"type": "boolean",
"description": "Usually `true`, including on plain-text posts with no attached media -- its meaning beyond 'has a photo/video' is unconfirmed."
}
},
"additionalProperties": true
},
"views": {
"type": "string",
"description": "Human-formatted view count, e.g. '719K' -- not a raw number."
},
"author": {
"type": "string",
"description": "The channel owner's display name as shown on the post."
},
"channel": {
"type": "string",
"description": "Repeats the channel username per message."
},
"reply_to": {
"type": [
"string",
"number",
"null"
],
"description": "Usually `null` (on posts that are not replies) -- presumed to hold the id of the message being replied to when populated, unconfirmed."
},
"reactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"paid": {
"type": "boolean",
"description": "True for the paid Telegram Star reaction, false for free emoji."
},
"count": {
"type": "string",
"description": "Human-formatted count, e.g. '6.15K' -- not a raw number."
},
"emoji": {
"type": "string",
"description": "The reaction emoji, or empty string for the Star reaction."
}
},
"additionalProperties": true
},
"description": "One entry per distinct reaction (emoji or Telegram Star) on the post."
},
"text_html": {
"type": "string",
"description": "The same post body as HTML, including the channel's own outbound links."
},
"is_forwarded": {
"type": "boolean"
},
"link_preview": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "Withheld the same way as `channel_info.photo`."
},
"title": {
"type": "string"
},
"site_name": {
"type": "string"
},
"description": {
"type": "string"
}
},
"description": "Null when the post has no outbound link preview card.",
"additionalProperties": true
},
"forwarded_from": {
"type": [
"string",
"null"
],
"description": "The source channel/username a forwarded post came from. Usually `null` (on posts that are not forwards) -- shape when populated is not documented."
}
},
"additionalProperties": true
},
"description": "Posts, newest first on every real call observed."
},
"pagination": {
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of posts actually returned on this page."
},
"limit": {
"type": "number",
"description": "Echoes the requested `limit`."
},
"after_cursor": {
"type": "number",
"description": "Pass as `after` to fetch newer posts than this page."
},
"before_cursor": {
"type": "number",
"description": "Pass as `before` to fetch older posts than this page."
},
"pages_fetched": {
"type": "number"
},
"has_more_before": {
"type": "boolean"
}
},
"additionalProperties": true
},
"channel_info": {
"type": "object",
"properties": {
"photo": {
"type": [
"string",
"null"
],
"description": "The channel's avatar image. Value withheld (returned as `null` regardless of whether the channel has one) -- only whether the field is populated is observable, not the image itself."
},
"title": {
"type": "string",
"description": "The channel's display name."
},
"counters": {
"type": "object",
"properties": {
"links": {
"type": "string"
},
"photos": {
"type": "string"
},
"videos": {
"type": "string"
},
"subscribers": {
"type": "string"
}
},
"description": "The same human-formatted-string convention as `subscribers` above.",
"additionalProperties": true
},
"username": {
"type": "string"
},
"verified": {
"type": "boolean"
},
"description": {
"type": "string"
},
"subscribers": {
"type": "string",
"description": "Human-formatted subscriber count, e.g. '10.9M' -- not a raw number."
}
},
"description": "Summary of the channel itself, unpaginated -- the same on every page.",
"additionalProperties": true
}
},
"description": "The channel-posts page.",
"additionalProperties": true
}