---
title: "Channel Messages"
method: GET
path: "/v1/messages/channel"
tags: ["Channels"]
---

# Channel Messages

`GET /v1/messages/channel`

## Request

- Base URL: `https://api.tlmtr.io`
- URL: `https://api.tlmtr.io/v1/messages/channel`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/docs/v1/messages/channel/get.ts> (a function with typed inputs; its response is checked against the schema)

## Query parameters

- `internal_id` string, required
- `from_date` integer
- `to_date` integer
- `short_info` boolean
- `cursor` string

## Response `200`

Channel messages

- ChannelMessagesResponse
  - `messages` ChannelMessage[], required: Messages array
    - `peer_id` string, required: Chanel or Group internal id
    - `message_id` integer, required: Telegram message id
    - `fwd_from` ForwardedFrom
      - `peer` union
        - object: Channel
          - `channel_id` string, required
          - `_` 'PeerChannel', required
        - object
          - `chat_id` string, required
          - `_` 'PeerChat', required
        - object
          - `user_id` string, required
          - `_` 'PeerUser', required
      - `channel_post` integer, nullable: Post id if forwarded from channel
      - `date` string, date-time, required: Source message publish date
    - `date` string, date-time, required: Message publish date
    - `is_ad` boolean, nullable: Telemetr.io decide message as ad.
    - `views` integer, required: Message views count
    - `forwards` integer, required: Message forwards count. Private or public, counted by Telegram
    - `comments` integer, required: Message comments count
    - `reactions` Reactions, required: Message reactions
      - `count` integer, required: Summary reactions count
      - `items` Reaction[], required: List of reactions
        - `emoji` string, required: Emoji or tg:// link for premium emoji like: 👍 or tg://emoji?id=5368324170671202286
        - `count` integer, required: Count reactions
    - `deleted_at` string, date-time, nullable: Message deletion date. If empty message is not deleted.
    - `text` string, required: Message text without markup
    - `entities` MessageEntity[]: Message text entities, bold, italic, links etc.
      - `type` string, required: One of "mention", "hashtag", "cashtag", "bot_command", "url", "email", "phone_number", "bold", "italic", "underline", "strikethrough", "spoiler", "code", "pre", "text_link", "text_mention", "custom_emoji"
      - `offset` integer, required: Offset in [UTF-16 code](https://core.telegram.org/api/entities#entity-length) units to the start of the entity
      - `length` integer, required: Length of the entity in UTF-16 code units
      - `url` string, nullable: For “text_url” only, URL that will be opened after user taps on the text
      - `user` string, nullable
      - `language` string, nullable
      - `custom_emoji_id` string, nullable
    - `media` union
      - object: Photo
        - `Photo` MediaPhoto, required: Attached photo.
          - `id` integer, required
          - `size` integer, nullable: File size in bytes
          - `url` string, nullable: Photo url
          - `thumb_url` string, nullable: Photo thumbnail url
          - `width` integer, nullable: Photo width
          - `height` integer, nullable: Photo height
          - `date` string, date-time, nullable: Photo upload date
      - object: Location, some point
        - `Geo` MediaGeo, required: GeoPoint.
          - `long` number, double, required: Longitude
          - `lat` number, double, required: Latitude
          - `accuracy_radius` integer, nullable: The estimated horizontal accuracy of the location, in meters; as defined by the sender.
      - object: Indicates a live geolocation
        - `GeoLive` MediaGeoLive, required
          - `long` number, double, required: Longitude
          - `lat` number, double, required: Latitude
          - `accuracy_radius` integer, nullable: The estimated horizontal accuracy of the location, in meters; as defined by the sender.
          - `period` integer, required: Validity period of provided geolocation
      - object
        - `Contact` MediaContact, required
          - `phone_number` string, required
          - `first_name` string, required
          - `last_name` string, required
          - `vcard` string, required
          - `user_id` integer, required
      - object
        - `Dice` MediaDice, required
          - `value` integer, required
          - `emoticon` string, required
      - object: Document or video
        - `Document` MediaDocument, required: Document (video, audio, voice, sticker, any media type except photo)
          - `id` integer, required
          - `size` integer, nullable: File size in bytes
          - `mime_type` string, required: File mime type
          - `file_name` string, required: File name
          - `url` string, nullable: Document url
          - `animated` boolean, required
          - `has_stickers` boolean, required
          - `audio` DocumentAttributeAudio
            - `voice` boolean, required
            - `duration` integer, required
            - `title` string, nullable
            - `performer` string, nullable
          - `custom_emoji` DocumentAttributeCustomEmoji
            - `free` boolean, required
            - `text_color` boolean, required
            - `alt` string, required
            - `stickerset` unknown, required
          - `video` DocumentAttributeVideo
            - `round_message` boolean, required
            - `supports_streaming` boolean, required
            - `duration` number, double, required
            - `w` integer, required
            - `h` integer, required
          - `sticker` DocumentAttributeSticker
            - `mask` boolean, required
            - `alt` string, required
            - `stickerset` unknown, required
            - `mask_coords` unknown
      - object: Web page previews
        - `WebPage` MediaWebPage, required: Preview of webpage
          - `url` string, required: Web page url
          - `type` string, required: Web page title Type of the web page. Can be: article, photo, audio, video, document, profile, app, or something else
          - `site_name` string, required: Short name of the site (e.g., Google Docs, App Store)
          - `title` string, required: Title of the content
          - `description` string, required: Content description
          - `author` string, required: Author of the content
      - object
        - `Venue` MediaVenue, required
          - `geo` MediaGeo, required: GeoPoint.
            - `long` number, double, required: Longitude
            - `lat` number, double, required: Latitude
            - `accuracy_radius` integer, nullable: The estimated horizontal accuracy of the location, in meters; as defined by the sender.
          - `title` string, required
          - `address` string, required
          - `provider` string, required
          - `venue_id` string, required
          - `venue_type` string, required
      - object
        - `Game` MediaGame, required
          - `id` integer, required
          - `short_name` string, required
          - `title` string, required
          - `description` string, required
      - object
        - `Invoice` MediaInvoice, required
          - `test` boolean, required
          - `title` string, required
          - `description` string, required
          - `receipt_msg_id` integer, nullable
          - `currency` string, required
          - `total_amount` integer, required
          - `start_param` string, required
      - object
        - `Poll` MediaPoll, required
          - `poll` Poll, required
            - `id` integer, required
            - `closed` boolean, required
            - `public_voters` boolean, required
            - `multiple_choice` boolean, required
            - `quiz` boolean, required
            - `question` TextWithEntities, required
              - …
            - `answers` TextWithEntities[], required
              - …
            - `close_period` integer, nullable
            - `close_date` string, date-time, nullable
          - `results` PollResults, required
            - `min` boolean, required
            - `results` PollAnswerVoters[], nullable
              - …
            - `total_voters` integer, nullable
            - `solution` string, nullable
            - `solution_entities` MessageEntity[], nullable
              - …
      - object
        - `Story` MediaStory, required
          - `via_mention` boolean, required
          - `peer` union, required
            - object: Channel
              - …
            - object
              - …
            - object
              - …
          - `id` integer, required
          - `story` StoryItem
            - `public` boolean, required
            - `edited` boolean, required
            - `id` integer, required
            - `date` string, date-time, required
            - `expire_date` string, date-time, required
            - `caption` string, nullable
            - `entities` MessageEntity[], nullable
              - …
      - object
        - `Giveaway` MediaGiveaway, required
          - `only_new_subscribers` boolean, required
          - `channels` integer[], required
          - `countries_iso2` string[], nullable
          - `quantity` integer, required
          - `months` integer, nullable
          - `stars` integer, nullable
          - `until_date` string, date-time, required
      - object
        - `GiveawayResults` MediaGiveawayResults, required
          - `only_new_subscribers` boolean, required
          - `refunded` boolean, required
          - `channel_id` integer, required
          - `additional_peers_count` integer, nullable
          - `launch_msg_id` integer, required
          - `winners_count` integer, required
          - `unclaimed_count` integer, required
          - `winners` integer[], required
          - `months` integer, nullable
          - `stars` integer, nullable
          - `prize_description` string, nullable
          - `until_date` string, date-time, required
      - object
        - `PaidMedia` MediaPaidMedia, required
          - `stars_amount` integer, required
      - object: Other not supported media
        - `Other` string, required: Other not supported media
    - `keyboard` MessageReplyMarkup
      - `rows` MessageReplyMarkupRow[]: Rows with buttons
        - `buttons` ReplyMarkupButton[]: Keyboard buttons
          - `kind` string, required
          - `text` string, required
          - `url` string, nullable
    - `grouped_id` integer, nullable: Album message, album has same grouped_id
    - `edit_date` string, date-time, nullable
  - `chats` ChatShort[], required: Chats short info (only if `short_info` query param is true)
    - `internal_id` string, required: Chat internal id
    - `peer` 'Group' | 'Channel', required: Chat type
    - `title` string, required: Chat name
    - `photo_url` string, nullable: Chat image
    - `country` string, nullable: Channel country
    - `language` string, nullable: Channel language
    - `category` string, nullable: Channel category
    - `members_count` integer, required: Number of members
    - `verified` boolean, required: Telegram verification
  - `cursor` string, nullable: Next page cursor

## Other responses

- `400`: **Bad Request:** The request sent to the server is invalid. Request parameters are missing, incorrect, or in the wrong format.
- `401`: **Unauthorized:** The provided API key is invalid or absent. Provided in the request API key is not valid or is missing.
- `402`: **Payment Required:** Not enough credits to perform this request. The plan allows this call but the credit balance does not cover it. Top up credits and retry. Amounts are in milli-credits (1 credit = 1000).
- `403`: **Forbidden:** Access to this resource is not allowed. User does not have permission to access this feature.
- `404`: **Not Found:** Requested resource could not be found on the server. Specific resource with the provided ID cannot be found.
- `412`: **Inactive Subscription:** The user's subscription is not currently active. User subscription has expired or is otherwise inactive.
- `426`: **Quota Reached:** The user's subscription limit has been reached. User has exceeded their monthly limit for unique channels or total requests. For higher limits please contact us via Telegram [@telemetrio_contact](https://t.me/telemetrio_contact) or write to contact@telemetr.io.
- `429`: **Too Many Requests:** The request rate limit has been reached. Retry after the interval indicated by the response headers.
- `503`: **Service Unavailable:** Credit accounting is temporarily unreachable. The request was refused rather than served without being billed. This is transient — retry with backoff. Carries the standard message envelope, with a constant message: the underlying failure is ours and its text names internal machinery, so it is never forwarded.

## Changes

- **2026-10-09** `6c2bfd66c5f2`: 8 breaking, 2 info
  - the response's body type changed from `object` to no type for status `402`
  - the response's body type changed from `object` to no type for status `426`
  - removed the required property `available_mc` from the response with the `402` status
  - removed the required property `limit` from the response with the `426` status
  - …6 more
- **2026-09-10** `80951ad7b3fb`: 2 info
  - added the media type `application/json` for the response with the status `412`
  - added the non-success response with the status `429`

[Operation history](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/changes/v1/messages/channel/get.md)

---

[API](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api.md) - [All operations](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/tlmtr/apis/telemetr-io-public-api/revisions/98f399867856?raw)
