Telegram API

Telegram Channel posts API

Get a public Telegram channel's posts by username, about 20 per page with a cursor for older pages: text, posting time, views, photo and video links, and reactions.

POST/v1/run/telegram.channel_posts
Uptime
100.00%
30d · 1 call
Requests
1
30d
Response
1.2s
median · 30d

Pricing and providers

Telegram Channel posts API pricing: one API, 3 interchangeable providers

The cheapest provider serves first. If it fails, the next one takes over in the same call.

Provider
1LemurServes first$1.10/1k reqflat2GiraffeBackup 1$1.20/1k reqflat3FoxBackup 2$3.60/1k reqflat
You pay
$11.00
$1.10/1k req, only for what you use. No monthly plan.
Your first 90 requests are free with the $0.10 starting balance.

Try it

Get Telegram channel posts in one request

Open in
Get a free key
Sample response
Free runs return only the first 3 results. Fund a key to get the full response.
{
  "data": {
    "nextCursor": "example",
    "posts": [
      {
        "channel": "example",
        "createdUtc": 12.5,
        "id": "a1b2c3d4",
        "image": "https://example.com/image.jpg",
        "mediaUrls": [
          "https://example.com/page"
        ],
        "reactions": [
          {
            "count": 12500,
            "emoji": "example"
          }
        ],
        "text": "A short example description of this item.",
        "url": "https://example.com/page",
        "views": 12500
      }
    ]
  },
  "found": true,
  "reason": "not_found"
}

Full parameter and response reference - every field, type, and example for this endpoint.

Reference

One request, one response shape.

Every field you send and every field you get back, each with a real example.

Last verified 2026-10-19 · uptime and latency measured over 30d

Request body

JSON, posted to this endpoint.

  • handlestring

    telegram

    Public Telegram channel username, with or without the @ (e.g. "telegram"), or its t.me link.

  • cursorstring

    Opaque pagination cursor from a previous response's nextCursor, for older posts. Omit for the newest page; a page holds about 20 posts.

You send. A small JSON body. The values shown are examples to replace with your own.

Response

JSON, one example value per field.

datadata

Wrapper holding the posts array and the next-page cursor, or null when nothing was found.

  • nextCursorstring

    Opaque cursor for the next, older page of posts, or null/empty when there are no more. Pass it back as cursor to continue.

each postdata.posts[]

One page of the channel's posts, about 20, from the newest page back. Populated whenever the provider has data for the entity.

  • channelstring

    Username of the channel that published the post.

  • createdUtcnumber

    UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity.

  • idstring

    Post number, unique within the channel. Posts are numbered in order. Populated whenever the provider has data for the entity.

  • imagestring

    Thumbnail image URL for the post's photo, video or link preview; null when it has none. Temporary: Telegram's CDN link expires.

  • mediaUrlsstring[]

    Direct URLs of the post's photos and videos. Temporary and signed: keep the query string. Empty when the post has no media or Telegram withholds a large video's file.

  • textstring

    Post text or media caption, plain. Empty when the post has none. Some sources collapse line breaks into spaces. Populated whenever the provider has data for the entity.

  • urlstring

    The post's t.me link, e.g. https://t.me/telegram/441. Populated whenever the provider has data for the entity.

  • viewsinteger

    View count. Telegram rounds it ("1.2K" becomes 1200). Null when not shown.

each reactiondata.posts[].reactions[]

Reactions on the post and how many of each. Empty when the post has none or the channel hides them.

  • countinteger

    How many times it was given. Telegram rounds large counts.

  • emojistring

    The reaction's emoji; null for a custom emoji, and on some sources for a paid star reaction.

top level
  • foundboolean

    True when the channel's posts were found; false when no public channel has this username or it has no readable posts.

  • reason"not_found"

    Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.

You get back. Named, typed fields in the same shape whichever source answers.

FAQ

About the Telegram Channel posts API

The AnyAPI Telegram Channel posts API returns Telegram channel posts data as normalized JSON from one POST call to /v1/run/telegram.channel_posts. Get a public Telegram channel's posts by username, about 20 per page with a cursor for older pages: text, posting time, views, photo and video links, and reactions. AnyAPI routes each request across 3 sources and falls back automatically when one fails. It costs from $1.10 per 1,000 requests, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of Telegram channel posts calls through AnyAPI succeeded, with a median response time of 1.2 seconds across 1 measured calls.

It costs from $1.10 per 1,000 requests, in US dollars with no subscription and no monthly minimum. You fund one USD wallet and each call draws it down. Some failed wallet-funded requests incur processing charges that we pass through at cost, with no markup; the error response shows the amount charged.

Get a public Telegram channel's posts by username, about 20 per page with a cursor for older pages: text, posting time, views, photo and video links, and reactions. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.

Over the last 30 days, 100.0% of Telegram channel posts calls through AnyAPI succeeded, with a median response time of 1.2 seconds across 1 measured calls. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.

Yes. A new AnyAPI account starts with $0.10 of free balance and no card required, which covers 90 Telegram Channel posts calls at $0.0011 each.

AnyAPI asks the next of its 3 sources in the same request, cheapest first, so one source going down does not fail your call.

Send a POST request to https://api.getanyapi.com/v1/run/telegram.channel_posts with your AnyAPI key in an "Authorization: Bearer" header and the input as a JSON body. The same key and the same wallet work on every AnyAPI endpoint.

No. You add US dollars to one prepaid AnyAPI balance and each request draws it down. There is no monthly plan and no minimum, and the same balance pays for every AnyAPI endpoint.

Yes. Install @getanyapi/sdk from npm for TypeScript or getanyapi from pip for Python. Both call every AnyAPI endpoint with the same key, and any HTTP client works too.

Yes. An agent can connect to the AnyAPI MCP server at https://api.getanyapi.com/mcp, or create its own free-trial key with one unauthenticated POST to https://api.getanyapi.com/agent/signup and call this endpoint over HTTP.