# Telegram Post

<p>A single post with its reactions, views, media, poll and document metadata.</p><p>Existence is decided by the post itself, never by the response status: an unknown or future post id answers 200 with <code>found: false</code>. Add <code>context=1</code> to also receive the surrounding post window.</p>

- **Documentation:** [https://scrappa.co/docs/telegram-api/telegram_post](https://scrappa.co/docs/telegram-api/telegram_post)
- **API group:** Telegram API
- **Endpoint:** `GET https://scrappa.co/api/telegram/posts/{username}/{post_id}`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `username` | string | Yes | <p>Public channel handle. A bare handle or an <code>@handle</code> also works in the path; use this parameter for the host forms, which contain a slash: <code>t.me/telegram</code>, <code>t.me/s/telegram</code>, <code>https://t.me/s/telegram</code>, <code>https://telegram.me/telegram</code>, <code>https://telegram.dog/telegram</code>. Every form normalises to the bare lowercase handle, because Telegram usernames are case-insensitive, and no request is ever issued to a mirror host.</p><p>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.</p> |
| `post_id` | integer | Yes | <p>Numeric post id.</p> |
| `context` | boolean | No | <p>Also return the surrounding post window.</p> |

## Example response

```json
{
    "data": {
        "post": {
            "id": 459,
            "date": "2026-07-16T20:45:25+00:00",
            "channel": "telegram",
            "post_key": "telegram/459"
        },
        "found": true,
        "channel": {
            "username": "telegram"
        },
        "context_count": null,
        "context_posts": null,
        "target_position": 0
    },
    "meta": {
        "attempts": 1,
        "duration_ms": 401
    },
    "success": true
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | The username, post id or search query failed validation. A 422 carries a message and an errors map, and no error code. |
| 503 | 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. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
