---
title: "Get channel message by id"
method: GET
path: "/v1/messages/by_id"
tags: ["Channels"]
---

# Get channel message by id

`GET /v1/messages/by_id`

## Request

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

## Query parameters

- `internal_id` string, required
- `message_id` integer, required

## Response `200`

Channel message

- ChannelMessage
  - `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
            - `text` string, required
            - `entities` MessageEntity[], required
              - …
          - `answers` TextWithEntities[], required
            - `text` string, required
            - `entities` MessageEntity[], required
              - …
          - `close_period` integer, nullable
          - `close_date` string, date-time, nullable
        - `results` PollResults, required
          - `min` boolean, required
          - `results` PollAnswerVoters[], nullable
            - `chosen` boolean, required
            - `correct` boolean, required
            - `voters` integer, required
          - `total_voters` integer, nullable
          - `solution` string, nullable
          - `solution_entities` MessageEntity[], nullable
            - `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
    - object
      - `Story` MediaStory, required
        - `via_mention` boolean, required
        - `peer` union, required
          - object: Channel
            - `channel_id` string, required
            - `_` 'PeerChannel', required
          - object
            - `chat_id` string, required
            - `_` 'PeerChat', required
          - object
            - `user_id` string, required
            - `_` 'PeerUser', required
        - `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
            - `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
    - 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

## 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/by_id/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)
