Post history for a public channel, newest first, 20 posts per page, with reactions, views, media, polls, documents, link previews and forward origins.
Pass next_before from the previous response as before to walk backwards. Pagination stops at the oldest post of the channel, so the cursor is never 0.
View counts arrive rounded, for example 14.3K. The raw string is returned with is_approximate; an exact integer is never invented.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
1 optional filter available.
string
Required
Public channel handle. A bare handle or an @handle also works in the path; use this parameter for the host forms, which contain a slash: t.me/telegram, t.me/s/telegram, https://t.me/s/telegram, https://telegram.me/telegram, https://telegram.dog/telegram. Every form normalises to the bare lowercase handle, because Telegram usernames are case-insensitive, and no request is ever issued to a mirror host.
When this parameter is present it is the handle that is used; the path segment is only the fallback for the forms that fit there.
example
integer
Optional
Post id cursor: the lowest id of the previous page.
10
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
data
meta
success
{
"data": {
"count": 1,
"posts": [
{
"id": 459,
"date": "2026-07-16T20:45:25+00:00",
"poll": null,
"text": "Post body text.",
"media": {
"album": null,
"photos": [
{
"url": "https://cdn.example/media/photo-459.jpg",
"width": 320,
"height": 240
}
],
"videos": [],
"documents": []
},
"views": {
"raw": "14.3K",
"is_approximate": true
},
"edited": false,
"channel": "telegram",
"post_key": "telegram/459",
"permalink": "https://t.me/telegram/459",
"reactions": [
{
"count": 41,
"glyph": "\ud83c\udf89",
"is_paid": false,
"emoji_id": "5265077361648368841"
}
],
"view_blob": {
"c": -1001234567890,
"h": "a1b2c3d4e5f60718",
"p": 459,
"t": 1784246725
},
"link_preview": null,
"forward_origin": null,
"reply_to_post_id": null
}
],
"channel": {
"username": "telegram",
"preview_url": "https://t.me/s/telegram",
"permalink_url": "https://t.me/telegram"
},
"has_more": true,
"next_before": 459
},
"meta": {
"attempts": 1,
"duration_ms": 744
},
"success": true
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
The username, post id or search query failed validation. A 422 carries a message and an errors map, and no error code.
{
"errors": {
"username": [
"The username may only contain letters, digits and underscores."
]
},
"message": "The request validation failed"
}Upstream Unavailable
No usable page came back. The request did not consume a credit. The code varies by failure type: UPSTREAM_HTTP_ERROR when the target answered with a non-successful status, TELEGRAM_DISABLED while the surface is switched off, TRANSPORT_ERROR when every gateway failed to connect, and a generic upstream_unavailable when no connection was available at all.
{
"error": {
"code": "UPSTREAM_HTTP_ERROR",
"message": "Telegram did not return usable data. Please retry."
},
"success": false
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.