# Telegram Post API. Send a post link.

Views, reactions, media and forwards. We handle the proxies, blocks and platform changes.

[Get API key](https://socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dtelegram.post)

## Telegram Post API at a glance

Returns one post of a public Telegram channel or group from its t.me link, with its text, media, views and reactions. It also has the links, hashtags and mentions in it, its date, photos, albums, videos, voice messages and stickers with their files, its poll, link preview and file, what it was forwarded from or replies to, whether it was edited, its signature, and the channel's numeric ID. Accepts links on t.me, telegram.me and telegram.dog, or the post's id.

GET `/v1/telegram/post`

[Read the API reference](https://socialtap.dev/docs/reference/telegram/post/index.md)

- **1 credit** per request, $0.75–$1.97 per 1,000 requests
- **22 typed fields** null when unknown
- **`url`** is all it needs, e.g. `https://t.me/durov/546`
- **100 credits** free when you sign up, no card, so you can build before you spend

## Send one request. Get 22 fields back.

Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.

`$ npm install socialtap`

`url = https://t.me/durov/546`

[Open in playground](https://socialtap.dev/playground/?endpoint=telegram.post)

cURL:

```shell
curl -G 'https://socialtap.dev/v1/telegram/post' \
  --data-urlencode 'url=https://t.me/durov/546' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

TypeScript SDK:

```typescript
import { SocialTap } from "socialtap";

const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY

const res = await client.telegram.post.get({ url: "https://t.me/durov/546" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);
```

Node.js (fetch):

```javascript
const params = new URLSearchParams({
  url: "https://t.me/durov/546",
});
const res = await fetch(`https://socialtap.dev/v1/telegram/post?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);
```

Python (requests):

```python
import os

import requests

res = requests.get(
    "https://socialtap.dev/v1/telegram/post",
    params={"url": "https://t.me/durov/546"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])
```

Go (net/http):

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("url", "https://t.me/durov/546")
	req, err := http.NewRequest("GET", "https://socialtap.dev/v1/telegram/post?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": {
    "approximate_fields": [
      "metrics.view_count",
      "metrics.like_count",
      "platform_specific.telegram.reactions[].count"
    ],
    "author": {
      "avatar_url": "https://cdn4.telesco.pe/file/AM3EaKY4OWoCIpqIJGL2G4hcjBupbm4OuzSyAnEGF2gBOPJJIYOcnXbjDpqmilOWXXjheFFey4oGODL1BybYTdbTaJHo9qb3KEAIw9y3VvSrrKwoRdfBHWovcRqFmFEu5EeKeGrOZPTVcZEHBP6rbBp5qM4WbNdvEbGQLAnCPle0ArPYn70dJpY8D3zpJWbhZ2V1bnF2k0VXfyWUnokwHk6Q56QkaNg5gs1PhbGSaPshnBDj1xw7QOhLE-o…",
      "display_name": "Pavel Durov",
      "id": "durov",
      "is_verified": true,
      "url": "https://t.me/durov",
      "username": "durov"
    },
    "coauthors": [],
    "duration_ms": 20000,
    "hashtags": [],
    "id": "durov/546",
    "is_nsfw": null,
    "is_pinned": null,
    "is_sponsored": null,
    "language": null,
    "media": [
      {
        "alt_text": null,
        "duration_ms": 20000,
        "expires_at": null,
        "height": 1920,
        "thumbnail_url": "https://cdn4.telesco.pe/file/oSUZWQy5ajo9qNzPTyVfWPmynW0e-n68CIbR2KJvGHXnnmSLUlvzUGAE3bGypAec9zc8kk1sHdcB0soW00CX-tKMVdzpwisCSYN_ZGrIBu9T637jvBhDK6eG8TLUWI7J9TyTGa5Y7qk3U3meRc7EBvCBrz-HyX61s0SkkfG-akkNQH1bm-ZOLdUKGsKIN2MmVccLPNINVf3cdzMiJcta6zKY1hLXMGAzeV45qpPy1MEGGmYJmhwsuareyIN…",
        "type": "video",
        "url": "https://cdn4.telesco.pe/file/e0b2769474.mp4?token=SCRUBBED",
        "width": 1920
      }
    ],
    "mentions": [],
    "metrics": {
      "comment_count": null,
      "like_count": 80950,
      "quote_count": null,
      "repost_count": null,
      "save_count": null,
      "share_count": null,
      "view_count": 4280000
    },
    "platform": "telegram",
    "platform_specific": {
      "telegram": {
        "buttons": [],
        "channel_id": "1006503122",
        "document": null,
        "forwarded_from": null,
        "is_edited": false,
        "link_preview": null,
        "links": [],
        "message_id": 546,
        "poll": null,
        "reactions": [
          {
            "count": 35700,
            "custom_emoji_id": null,
            "emoji": null,
            "is_paid": true
          },
          {
            "count": 28400,
            "custom_emoji_id": "5399847211989246390",
            "emoji": null,
            "is_paid": false
          },
          {
            "count": 9350,
            "custom_emoji_id": "5373223594484587136",
            "emoji": null,
            "is_paid": false
          }
        ],
        "reply_to": null,
        "sender_name": null,
        "signature": "Pavel Durov"
      }
    },
    "platform_type": "video",
    "published_at": "2026-08-31T16:30:15Z",
    "text": "🏳️ Gram Wallet in Telegram is ready and is now accessible to a select group of users.\n\n🤩 We'll be gradually rolling it out to our billion+ users over the next couple of weeks.\n\n⚡️ Thanks to the validators who approved the smart contract that powers it, future upgrades of the wall…",
    "thumbnail_url": "https://cdn4.telesco.pe/file/oSUZWQy5ajo9qNzPTyVfWPmynW0e-n68CIbR2KJvGHXnnmSLUlvzUGAE3bGypAec9zc8kk1sHdcB0soW00CX-tKMVdzpwisCSYN_ZGrIBu9T637jvBhDK6eG8TLUWI7J9TyTGa5Y7qk3U3meRc7EBvCBrz-HyX61s0SkkfG-akkNQH1bm-ZOLdUKGsKIN2MmVccLPNINVf3cdzMiJcta6zKY1hLXMGAzeV45qpPy1MEGGmYJmhwsuareyIN…",
    "title": null,
    "type": "video",
    "unknown_fields": [],
    "url": "https://t.me/durov/546"
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "telegram",
    "source": "page",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 321,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": {
      "kind": "post",
      "id": "durov/546",
      "url": "https://t.me/durov/546"
    },
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": []
  }
}
```

Long arrays and strings are shortened here. Real responses are complete.

## One schema on 21 platforms.

The [response reference](https://socialtap.dev/docs/reference/telegram/post/index.md#response) lists every field, its type and when it is `null`. [See the full schema](https://socialtap.dev/resources/post/index.md).

- ### Null means unknown

  A field Telegram doesn't show is null, never zero or an empty string, so a real zero always means zero.
- ### What it accepts

  A Telegram post: its link (t.me/\<name>/\<number>, also on telegram.me and telegram.dog, the channel page's t.me/s/\<name>/\<number>, a forum topic's t.me/\<name>/\<topic>/\<number>, the account's own host \<name>.t.me/\<number>, with any query) or its id as this API writes it (\<name>/\<number>).
- ### Write one parser

  Telegram, TikTok, Instagram and 18 more platforms answer in these fields, so the code that reads one reads them all.

- **`platform`string**: Platform ID (tiktok, youtube, …).
- **`id`string**: Platform-native post ID (string; Instagram shortcode, Reddit with its t3_ prefix).
- **`url`string**: Canonical post URL.
- **`type`string**: Normalized content shape. New values may be added; treat unknown values as other.
- **`platform_type`string**: The platform's own product label, lowercase (reel, short, story, live, tweet, …).
- **`title`string**: Headline (YouTube title, Reddit title); null on caption-only platforms.
- **`text`string**: Caption, description or body as plain text.
- **`language`string**: BCP-47 language of text, when the platform states it.

Live data from 33 platforms.

[TikTok](https://socialtap.dev/apis/tiktok/index.md) · [Instagram](https://socialtap.dev/apis/instagram/index.md) · [Facebook](https://socialtap.dev/apis/facebook/index.md) · [YouTube](https://socialtap.dev/apis/youtube/index.md) · [Reddit](https://socialtap.dev/apis/reddit/index.md) · [Threads](https://socialtap.dev/apis/threads/index.md) · [Spotify](https://socialtap.dev/apis/spotify/index.md) · [Amazon](https://socialtap.dev/apis/amazon/index.md) · [Apple Music](https://socialtap.dev/apis/applemusic/index.md) · [Pinterest](https://socialtap.dev/apis/pinterest/index.md) · [Rumble](https://socialtap.dev/apis/rumble/index.md) · [X](https://socialtap.dev/apis/x/index.md) · [Bluesky](https://socialtap.dev/apis/bluesky/index.md) · [Twitch](https://socialtap.dev/apis/twitch/index.md) · [LinkedIn](https://socialtap.dev/apis/linkedin/index.md) · [Telegram](https://socialtap.dev/apis/telegram/index.md) · [TikTok Shop](https://socialtap.dev/apis/tiktokshop/index.md) · [Kwai](https://socialtap.dev/apis/kwai/index.md) · [Snapchat](https://socialtap.dev/apis/snapchat/index.md) · [SoundCloud](https://socialtap.dev/apis/soundcloud/index.md) · [Truth Social](https://socialtap.dev/apis/truthsocial/index.md) · [Kick](https://socialtap.dev/apis/kick/index.md) · [Komi](https://socialtap.dev/apis/komi/index.md) · [Lnk.Bio](https://socialtap.dev/apis/linkbio/index.md) · [Linkme](https://socialtap.dev/apis/linkme/index.md) · [Linktree](https://socialtap.dev/apis/linktree/index.md) · [Pillar](https://socialtap.dev/apis/pillar/index.md) · [TikTok Ad Library](https://socialtap.dev/apis/tiktok-ad-library/index.md) · [Facebook Ad Library](https://socialtap.dev/apis/facebook-ad-library/index.md) · [Facebook Events](https://socialtap.dev/apis/facebook-events/index.md) · [Facebook Marketplace](https://socialtap.dev/apis/facebook-marketplace/index.md) · [Google Ads Transparency Center](https://socialtap.dev/apis/google-ads-transparency/index.md) · [LinkedIn Ad Library](https://socialtap.dev/apis/linkedin-ad-library/index.md)

## What teams build with the Telegram Post API.

- ### Read a post from a shared link
- ### Track a post's views and reactions over time
- ### Read a public group's message by link
- ### Trace a forward to its original post

## Good to know before you build.

- Views, reactions and voters are as Telegram shows them, rounded from the thousands up (10.4K), and the rounded ones are listed in approximate_fields.
- An album returns under the number you asked, with all of its files, whichever of its numbers you asked. The Telegram Channel Posts API lists it under its first number.
- A link with ?comment= returns the post the comment is under, not the comment.
- In a public group, author is the member who sent the message. A member without a username has nothing to refer to them by, so author is then the group and platform_specific.telegram.sender_name the member's name.
- Service messages (a channel's creation, a changed name or photo) return platform_type service and their sentence as text. In a group the page doesn't show the sentence, so text is null.
- Telegram's pages sometimes leave a forward's origin out: forwarded_from is then present with a null name and url.
- Media links can stop working after a while, so download what you need promptly. A video too big for Telegram's web page has its poster and duration but no url.
- Some posts Telegram's web page won't show ("Please open Telegram to view this post"). They return platform_type unsupported, their date, views and reactions, null text, and media among their unknown_fields: their \[\] means unknown, not none.
- An audio file is a post of type audio with its title and performer in platform_specific.telegram.document. Telegram's web page doesn't link the file, so its media url is null.
- A post that doesn't exist returns not_found, as does a name that is no channel or group, since Telegram says the same of a user and a bot. A channel Telegram won't display returns private_or_unavailable, with its reason where it gives one, and this can depend on the country a request leaves from.

## 1 credit per request. Failed requests are free.

Buy credits once and spend them on any endpoint, on any platform.

[Plans and packs](https://socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://socialtap.dev/docs/reference/telegram/post/index.md#pricing) · [How credits work](https://socialtap.dev/docs/credits/index.md)

| Source | Price per successful request | Per 1,000 requests |
| --- | --- | --- |
| Public page `page` | 1 credit | $0.75–$1.97 |

- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.

## Questions about the Telegram Post API.

More in the [API reference](https://socialtap.dev/docs/reference/telegram/post/index.md).

**How much does the Telegram Post API cost?**

A request costs 1 credit. SocialTap credits cost $0.75–$1.97 per 1,000, depending on the plan or pack.

Other platforms

## Posts on 20 more platforms.

- [TikTok Post API](https://socialtap.dev/apis/tiktok/post/index.md) (1 credit · `GET /v1/tiktok/post`)
- [Instagram Post API](https://socialtap.dev/apis/instagram/post/index.md) (1 credit · `GET /v1/instagram/post`)
- [Facebook Post API](https://socialtap.dev/apis/facebook/post/index.md) (1 credit · `GET /v1/facebook/post`)
- [YouTube Video API](https://socialtap.dev/apis/youtube/post/index.md) (1 credit · `GET /v1/youtube/post`)
- [Reddit Post API](https://socialtap.dev/apis/reddit/post/index.md) (1 credit · `GET /v1/reddit/post`)
- [Threads Post API](https://socialtap.dev/apis/threads/post/index.md) (1 credit · `GET /v1/threads/post`)
- [Spotify Track API](https://socialtap.dev/apis/spotify/track/index.md) (1 credit · `GET /v1/spotify/track`)
- [Amazon Shop Posts API](https://socialtap.dev/apis/amazon/shop_posts/index.md) (1 credit / page · `GET /v1/amazon/shop_posts`)
- [Apple Music Track API](https://socialtap.dev/apis/applemusic/track/index.md) (1 credit · `GET /v1/applemusic/track`)
- [Pinterest Pin API](https://socialtap.dev/apis/pinterest/pin/index.md) (1 credit · `GET /v1/pinterest/pin`)
- [Rumble Video API](https://socialtap.dev/apis/rumble/post/index.md) (1 credit · `GET /v1/rumble/post`)
- [X (Twitter) Post API](https://socialtap.dev/apis/x/post/index.md) (1 credit · `GET /v1/x/post`)
- [Bluesky Post API](https://socialtap.dev/apis/bluesky/post/index.md) (1 credit · `GET /v1/bluesky/post`)
- [Twitch Video and Clip API](https://socialtap.dev/apis/twitch/video/index.md) (1 credit · `GET /v1/twitch/video`)
- [LinkedIn Post API](https://socialtap.dev/apis/linkedin/post/index.md) (1 credit · `GET /v1/linkedin/post`)
- [Kwai Post API](https://socialtap.dev/apis/kwai/post/index.md) (1 credit · `GET /v1/kwai/post`)
- [Snapchat Spotlight API](https://socialtap.dev/apis/snapchat/spotlight/index.md) (1 credit · `GET /v1/snapchat/spotlight`)
- [SoundCloud Track API](https://socialtap.dev/apis/soundcloud/track/index.md) (1 credit · `GET /v1/soundcloud/track`)
- [Truth Social Post API](https://socialtap.dev/apis/truthsocial/post/index.md) (1 credit · `GET /v1/truthsocial/post`)
- [Kick Clip API](https://socialtap.dev/apis/kick/post/index.md) (1 credit · `GET /v1/kick/post`)

More Telegram

## Telegram API. 4 endpoints, one key.

- [Telegram Channel Posts API](https://socialtap.dev/apis/telegram/channel_posts/index.md) (1 credit / page · `GET /v1/telegram/channel_posts`)
- [Telegram Channel API](https://socialtap.dev/apis/telegram/channel/index.md) (1 credit · `GET /v1/telegram/channel`)
- [Telegram Channel Search API](https://socialtap.dev/apis/telegram/search_channels/index.md) (From 1 credit / page · `GET /v1/telegram/search_channels`)

## Try it on a link you already have.

Paste it in the playground, or copy the request into your code.

100free credits

- No credit card
- Failed requests are free
- Works on all 218 endpoints

[Start for free](https://socialtap.dev/signup/) [Read the docs](https://socialtap.dev/docs/index.md)

---

[HTML version](https://socialtap.dev/apis/telegram/post/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
