> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scraperize.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Channel posts

> Fetches the recent public posts of a Telegram channel/group by handle — each with its text, date, view count, author, media (photos/videos with thumbnails + durations), link preview, and reactions. Paginated (older posts) via a numeric `cursor`.

<Info>
  **Cost: 1 credit** per successful request. Errors and cache hits (`cache_max_age`) are free.
</Info>

<Accordion title="Copy for AI assistant" icon="sparkles">
  Paste this into ChatGPT, Claude or your coding assistant to generate working code for this endpoint (use the copy button).

  ```text Prompt
  I want to make an API call to /v1/telegram/channel/posts. Here are the details:

  Endpoint: GET https://api.scraperize.com/v1/telegram/channel/posts
  Description: Fetches the recent public posts of a Telegram channel/group by handle — each with its text, date, view count, author, media (photos/videos with thumbnails + durations), link preview, and reactions. Paginated (older posts) via a numeric `cursor`.

  Required Headers:
  - x-api-key: Your API key

  Parameters:
  - handle (string) [required]: A public Telegram handle or t.me URL, e.g. telegram or https://t.me/telegram.
  - cursor (string): Numeric cursor from a previous response's `paging.cursor` (pages to older posts).
  - cache_max_age (select): Optional. Return a cached result if one this age or newer exists — served for **0 credits** with `meta.cached=true` and `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and refreshes the cache. Omit to always scrape fresh.

  Example Response:
  {
    "data": {
      "posts": [
        {
          "id": 460,
          "url": "https://t.me/telegram/460",
          "handle": "telegram",
          "channelId": -1005640892,
          "date": "2026-08-26T19:12:34.000Z",
          "text": "For all the info from today's update and a look back at 13 years of Telegram features — check out our blog:\nhttps://telegram.org/blog/welcome-messages-buttons-T…",
          "views": 1670000,
          "author": "Telegram News",
          "authorUrl": "https://t.me/telegram",
          "authorPhotoUrl": "https://cdn1.telesco.pe/file/uFYNMdturrfQWQKIUN-OOFpGgW51ifC6zoFl5fDK03QXavKQLPsC7MpCEGSN9A7AuEBYSfUUPMZxtGMUXp7Ma4OLu2pPsltHPRzVF2zmVUBiHjV0g7ri29W94kYF5Mrqd8Y…",
          "verified": false,
          "edited": false,
          "forwardedFrom": null,
          "replyToUrl": null,
          "media": [],
          "linkPreview": {
            "url": "https://telegram.org/blog/welcome-messages-buttons-TG-13",
            "siteName": "Telegram",
            "title": "Welcome Messages, Buttons in Messages and Signed Gifts",
            "description": "Introducing Welcome Messages to greet new members of groups or channels, Buttons in Messages to make any text interactive, Inline Documents in Messages and much…",
            "imageUrl": "https://cdn4.telesco.pe/file/b01OYVU-nzH3fOkm1Atu-cXYGUC4IFztrQILNXi7XNqT3U06FUM6qsx8oxemaGkcZM7gO-R3grt2d5t8LgzYhIQGbBj5DFi7QnMXy9Tbiws9y-yLo_70_MqEyaMeo0wMWpR…"
          },
          "reactions": []
        }
      ],
      "count": 20,
      "paging": {
        "cursor": "441",
        "hasMore": true
      },
      "fetchedAt": "2026-10-05T14:44:06.408Z"
    },
    "meta": {
      "requestId": "req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f",
      "creditsCharged": 1,
      "creditsRemaining": 4999,
      "cached": false
    }
  }

  Please help me write code in my preferred programming language to make this API call and handle the response appropriately. Include error handling and best practices.
  ```
</Accordion>


## OpenAPI

````yaml /api-reference/openapi.json get /v1/telegram/channel/posts
openapi: 3.0.3
info:
  title: Scraperize API
  version: 1.0.0
  description: >-
    Extract public data from social media platforms as clean JSON. Endpoints are
    split by platform and by what they return, e.g. `GET /v1/twitter/tweet`.


    ## Authentication

    Send your API key in the `x-api-key` header (or `Authorization: Bearer
    <key>`). Create keys in your dashboard.


    ## Credits

    Each successful live scrape costs **1 credit**. Credits are prepaid and
    never expire.


    ## Caching

    Every endpoint accepts an optional `cache_max_age`
    (`1d`|`3d`|`7d`|`14d`|`30d`). A cache hit within that window is returned for
    **0 credits**.


    ## Responses

    Success returns `{ "data": …, "meta": { "requestId", … } }`. Errors return
    `{ "error": { "code", "message", "requestId" } }` with a matching HTTP
    status. `meta` on a scrape carries `creditsCharged`, `creditsRemaining`,
    `cached`, and (on a hit) `cachedAt`.


    ## Rate limits

    Requests are limited per team per minute; over the limit returns `429` with
    a `Retry-After` header.
servers:
  - url: https://api.scraperize.com
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Twitter
    description: Twitter / X scraping endpoints
  - name: Facebook
    description: Facebook scraping endpoints
  - name: Linkme
    description: Linkme (link.me) scraping endpoints
  - name: Amazon
    description: Amazon (creator shop / storefront) scraping endpoints
  - name: Linkbio
    description: Linkbio (lnk.bio) scraping endpoints
  - name: Pillar
    description: Pillar (pillar.io) scraping endpoints
  - name: Komi
    description: Komi (komi.io) scraping endpoints
  - name: Linktree
    description: Linktree (linktr.ee) scraping endpoints
  - name: Kick
    description: Kick (kick.com) scraping endpoints
  - name: Snapchat
    description: Snapchat (snapchat.com) scraping endpoints
  - name: Telegram
    description: Telegram (t.me) scraping endpoints
  - name: LinkedIn
    description: LinkedIn scraping endpoints
  - name: Twitch
    description: Twitch scraping endpoints
  - name: TikTok
    description: TikTok (tiktok.com) scraping endpoints
paths:
  /v1/telegram/channel/posts:
    get:
      tags:
        - Telegram
      summary: Channel posts
      description: >-
        Fetches the recent public posts of a Telegram channel/group by handle —
        each with its text, date, view count, author, media (photos/videos with
        thumbnails + durations), link preview, and reactions. Paginated (older
        posts) via a numeric `cursor`.
      parameters:
        - name: handle
          in: query
          required: true
          description: >-
            A public Telegram handle or t.me URL, e.g. telegram or
            https://t.me/telegram.
          schema:
            type: string
          example: telegram
        - name: cursor
          in: query
          required: false
          description: >-
            Numeric cursor from a previous response's `paging.cursor` (pages to
            older posts).
          schema:
            type: string
        - name: cache_max_age
          in: query
          required: false
          description: >-
            Optional. Return a cached result if one this age or newer exists —
            served for **0 credits** with `meta.cached=true` and
            `meta.cachedAt`. Otherwise a fresh scrape runs (**1 credit**) and
            refreshes the cache. Omit to always scrape fresh.
          schema:
            type: string
            enum:
              - 1d
              - 3d
              - 7d
              - 14d
              - 30d
          example: 7d
      responses:
        '200':
          description: A page of posts (newest first).
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      posts:
                        type: array
                        items:
                          type: object
                      count:
                        type: integer
                      paging:
                        type: object
                        properties:
                          cursor:
                            type: string
                            nullable: true
                          hasMore:
                            type: boolean
                      fetchedAt:
                        type: string
                        format: date-time
                  meta:
                    type: object
                    description: >-
                      requestId + credit/caching metadata (creditsCharged,
                      creditsRemaining, cached, cachedAt).
                required:
                  - data
                  - meta
              example:
                data:
                  posts:
                    - id: 460
                      url: https://t.me/telegram/460
                      handle: telegram
                      channelId: -1005640892
                      date: '2026-08-26T19:12:34.000Z'
                      text: >-
                        For all the info from today's update and a look back at
                        13 years of Telegram features — check out our blog:

                        https://telegram.org/blog/welcome-messages-buttons-TG-13


                        August Features

                        1 • 2 • 3 • 4 • 5 • More
                      views: 1670000
                      author: Telegram News
                      authorUrl: https://t.me/telegram
                      authorPhotoUrl: >-
                        https://cdn1.telesco.pe/file/uFYNMdturrfQWQKIUN-OOFpGgW51ifC6zoFl5fDK03QXavKQLPsC7MpCEGSN9A7AuEBYSfUUPMZxtGMUXp7Ma4OLu2pPsltHPRzVF2zmVUBiHjV0g7ri29W94kYF5Mrqd8YPzJ4ZE52eEV74TQ6dm9ATYW-LURHPfKCRQuSRxPmJydGQTo-dlzj_kfYqseyxonNUPJiL3MSEwn5CXlGZcgrZLzE8Q3CKXuxPTHg4SkDj_fUB4QKZs-k1tQRGmXPLHljwgH1-u5lkiOTo6Dlitd2memRuSKyhbiaP21gKyNvoPviDJDmThhnGk_oYxSembEWmcxLkTtEeAihAJ9EjOg.jpg
                      verified: false
                      edited: false
                      forwardedFrom: null
                      replyToUrl: null
                      media: []
                      linkPreview:
                        url: >-
                          https://telegram.org/blog/welcome-messages-buttons-TG-13
                        siteName: Telegram
                        title: Welcome Messages, Buttons in Messages and Signed Gifts
                        description: >-
                          Introducing Welcome Messages to greet new members of
                          groups or channels, Buttons in Messages to make any
                          text interactive, Inline Documents in Messages and
                          much more.
                        imageUrl: >-
                          https://cdn4.telesco.pe/file/b01OYVU-nzH3fOkm1Atu-cXYGUC4IFztrQILNXi7XNqT3U06FUM6qsx8oxemaGkcZM7gO-R3grt2d5t8LgzYhIQGbBj5DFi7QnMXy9Tbiws9y-yLo_70_MqEyaMeo0wMWpRvQ-6QinclKGZRx3Cd84ahcS8ZGyfNLM-u681NsCAK2CmNK2QxTqMOoTkTRjwhjJzhwd7gTVoEGsvPpYtCMCpoG1brJkS9Lo5zjpWQWkNZlY9csP3YfzrC7HpL9NZx5Bf5XqlAV58lPsf4D6xJMlPYIUHUnwbacY-QyYkX6tohtOf2DnYHjNsYVRdQA2QiNdDS3PLz-iH_cVLyeM_9gw.jpg
                      reactions: []
                    - id: 459
                      url: https://t.me/telegram/459
                      handle: telegram
                      channelId: -1005640892
                      date: '2026-08-26T19:12:24.000Z'
                      text: >-
                        Signed Gifts. You can now add your signature and a
                        comment to gifts you buy via the gift marketplace.


                        August Features

                        1 • 2 • 3 • 4 • 5 • More
                      views: 1470000
                      author: Telegram News
                      authorUrl: https://t.me/telegram
                      authorPhotoUrl: >-
                        https://cdn1.telesco.pe/file/uFYNMdturrfQWQKIUN-OOFpGgW51ifC6zoFl5fDK03QXavKQLPsC7MpCEGSN9A7AuEBYSfUUPMZxtGMUXp7Ma4OLu2pPsltHPRzVF2zmVUBiHjV0g7ri29W94kYF5Mrqd8YPzJ4ZE52eEV74TQ6dm9ATYW-LURHPfKCRQuSRxPmJydGQTo-dlzj_kfYqseyxonNUPJiL3MSEwn5CXlGZcgrZLzE8Q3CKXuxPTHg4SkDj_fUB4QKZs-k1tQRGmXPLHljwgH1-u5lkiOTo6Dlitd2memRuSKyhbiaP21gKyNvoPviDJDmThhnGk_oYxSembEWmcxLkTtEeAihAJ9EjOg.jpg
                      verified: false
                      edited: false
                      forwardedFrom: null
                      replyToUrl: null
                      media:
                        - type: video
                          url: >-
                            https://cdn1.telesco.pe/file/6efb59a075.mp4?token=k4wTC-I_8fiaMp8IjTctsSxGmjhSSMjmTV_8mRcewtEFkI9H3eeZSvwj_GEF_qohqj0sSrINWsWaPKryoR8qtSM9L9RKHdCDinuPbunrBXSMY_OaUVxodHAsfeGkdx6_SxwAClW3HNwfg0IAqhB7bMziErtdur2eDexEynJpvYtq0fXow1-u9RNRD5qO7CMy3i9iLAI_wtOnFa2MMHH_pI8BrZWEjjJSKEaB1Ei7c6SX1tBnKFmDVTqqR4J-gMKbtPUZT642Dlv1KId6h_9G0ZQG2qiHvJWhWKvUdqriv_HQWgZEx8x8Mr6_BCbezfHRyFIGXeZiiXmAmZwG30Gt7g
                          thumbnailUrl: >-
                            https://cdn1.telesco.pe/file/XnoHEm22Dzm7K_zBwmk2GTWOyk3aY8VR8OqoEpDPIndDerqDr4WaaF8BQ-Eyz85-h0pzx8YkBhR_ia6R0mXcYPKMsAFm6e1DxPIlBKIrc_LGsrUtkxtpne-MngcycQR8Q15ZJELkHUG1K5lRtglEg-uM0ntZZDeFXG34LtY7ICqC49kvhc5RsU2bHEXzmYppHvFWtGmU7sKdOfrseVjyl7IQi_kIAuLoRqu69-0LdQgr5K9JPRy66HbQOC_u8iaQT_mRVcd43Th7y4ml6a1IOMOy0S-qWuiOBfOEhp9ZSxLl3MVU9SF6jBE8RYMt8yMSF-P9raFI7EwR1m0Zao7_pg
                          duration: '0:12'
                      linkPreview: null
                      reactions: []
                    - id: 458
                      url: https://t.me/telegram/458
                      handle: telegram
                      channelId: -1005640892
                      date: '2026-08-26T19:12:04.000Z'
                      text: >-
                        Placeholders for App Updates. If a user with an outdated
                        app encounters a new feature, they can now instantly tap
                        to download the latest update.


                        August Features

                        1 • 2 • 3 • 4 • 5 • More
                      views: 938000
                      author: Telegram News
                      authorUrl: https://t.me/telegram
                      authorPhotoUrl: >-
                        https://cdn1.telesco.pe/file/uFYNMdturrfQWQKIUN-OOFpGgW51ifC6zoFl5fDK03QXavKQLPsC7MpCEGSN9A7AuEBYSfUUPMZxtGMUXp7Ma4OLu2pPsltHPRzVF2zmVUBiHjV0g7ri29W94kYF5Mrqd8YPzJ4ZE52eEV74TQ6dm9ATYW-LURHPfKCRQuSRxPmJydGQTo-dlzj_kfYqseyxonNUPJiL3MSEwn5CXlGZcgrZLzE8Q3CKXuxPTHg4SkDj_fUB4QKZs-k1tQRGmXPLHljwgH1-u5lkiOTo6Dlitd2memRuSKyhbiaP21gKyNvoPviDJDmThhnGk_oYxSembEWmcxLkTtEeAihAJ9EjOg.jpg
                      verified: false
                      edited: false
                      forwardedFrom: null
                      replyToUrl: null
                      media:
                        - type: photo
                          url: >-
                            https://cdn1.telesco.pe/file/EEW1dHuMcXpbaxv0c24oOLLzWW0RmzGo8zGcRq6Ii4spVcAlVJ8___vnCLb3d2-GdaYANc7hunKeAVCLe8WzEHvtVt_qIvcdFSnkqY8rAJGaMkdHzTg2TsdBgTtQdikYncxa7mk_Yk8OB6txRUY6w7EljJzKsRjo1AsR1CSLqVgmwtdS_04jQqJdxBnERxPJH9BLHskxeclPwJXhN5tMev43ArlQf0IO9161Q_ZkzdU9W1WQQ_LJ8M-C31HHm-eaN2wtqeOUpb4qWJuwQl6HNtPNrJ2h6DMrrepY4iazZ2tnPUX2BXAiZ4yZYHPRnKuYI3xAfYt66XYM3uMuq02E8w.jpg
                          thumbnailUrl: null
                          duration: null
                      linkPreview: null
                      reactions: []
                  count: 20
                  paging:
                    cursor: '441'
                    hasMore: true
                  fetchedAt: '2026-10-05T14:44:06.408Z'
                meta:
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
                  creditsCharged: 1
                  creditsRemaining: 4999
                  cached: false
        '401':
          description: Missing, invalid, or revoked API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: UNAUTHORIZED
                  message: API key required — pass it in the `x-api-key` header.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '402':
          description: Not enough credits for this request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: INSUFFICIENT_CREDITS
                  message: >-
                    This request costs 1 credit, but your balance is 0. Top up
                    to continue.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '404':
          description: Channel not found / private / no public preview.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: NOT_FOUND
                  message: >-
                    The requested content was not found (it may not exist, be
                    deleted, or be private).
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '422':
          description: Invalid query parameters (bad handle or non-numeric cursor).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: VALIDATION_ERROR
                  message: Request validation failed
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
                  details:
                    - path: url
                      message: Required
        '429':
          description: Over the per-minute rate limit — honour `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: RATE_LIMITED
                  message: >-
                    Rate limit exceeded — max 100 requests per 60s. Retry in
                    ~30s.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
        '503':
          description: >-
            Temporarily unavailable — retry after `Retry-After`. `error.code`
            tells you why: `UPSTREAM_BLOCKED` (the source blocked this request),
            `EXTRACTION_FAILED` (the source returned unexpected data),
            `PLATFORM_UNAVAILABLE` (the source is down), or
            `SERVICE_UNAVAILABLE` (we are at capacity).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: UPSTREAM_BLOCKED
                  message: >-
                    The source is temporarily unavailable. Please try again
                    shortly.
                  requestId: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: NOT_FOUND
            message:
              type: string
              example: The requested content was not found.
            requestId:
              type: string
              example: req_8f0c2b7e-1a2b-4c3d-9e8f-0a1b2c3d4e5f
            details:
              type: array
              items:
                type: object
              description: Present on validation errors.
          required:
            - code
            - message
            - requestId
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your API key. Send it in the `x-api-key` header (or `Authorization:
        Bearer <key>`). Create and manage keys from your dashboard.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.