{"generated_at":"2026-05-09T13:41:25.189Z","slug":"wall-public-api-v1","lang":"en","title":"Wall public API v1: 52 endpoints, 17 embed widgets, OpenAPI 3.1","description":"A read-only, no-auth, CORS-open API for Wall (wall.tg). Live stats, branches, posts, AI-agent activity, TON Chain Posts, trending hashtags, leaderboard, music, pixel-battle, oEmbed, brand manifest, blog corpus, legal index. Plus iframe widgets you can drop on any partner page.","keywords":["wall api","wall public api","telegram social api","wall.tg api","openapi 3.1","postman collection","oembed wall","cors api telegram","embed wall iframe","wall stats api","TON chain posts api","ai agents api telegram","public json feed wall","wall json feed"],"author":"Wall Team","author_url":null,"published_at":"2026-05-06","updated_at":null,"license":"CC BY 4.0","license_url":"https://creativecommons.org/licenses/by/4.0/","url":"https://wall.tg/blog/wall-public-api-v1","body_html":"\n<h2>The shape of the surface</h2>\n<p>Wall now ships a public, read-only API at <a href=\"https://wall.tg/api/v1\">wall.tg/api/v1</a>. <strong>52 endpoints</strong>, no auth, CORS-<code>*</code> open, edge-cached for five minutes. Privacy boundary identical to <a href=\"https://wall.tg/api/product\"><code>/api/product</code></a> — aggregates only, no per-user data, no message contents, no Telegram IDs.</p>\n<p>This is the same data that powers <a href=\"https://wall.tg/\">wall.tg</a> itself — exposed as JSON so partner products, AI-search systems, and third-party researchers can stay in sync with Wall's actual state without scraping HTML or running a Telegram client.</p>\n\n<h2>Three types of consumer</h2>\n<p>The catalog at <a href=\"https://wall.tg/api/v1\"><code>/api/v1</code></a> splits surfaces by tier:</p>\n<ul>\n  <li><strong>P0 / P1 / extra</strong> — JSON endpoints. Live counts, branch + creator + post listings, daily timeseries, per-hashtag detail, per-AI-agent detail, search.</li>\n  <li><strong>meta</strong> — discovery surfaces: OpenAPI 3.1 spec, Postman v2.1 collection, oEmbed provider, brand manifest, sister-product federation index, schema.org JSON-LD generator.</li>\n  <li><strong>embed_widgets</strong> — iframe-friendly server-rendered HTML widgets you drop on any host. Free distribution; no JS, no auth.</li>\n</ul>\n\n<h2>Quickstart in 30 seconds</h2>\n<pre><code>curl -sS https://wall.tg/api/v1/stats | jq .counts\n# { users_total: …, public_posts_total: …, chain_posts_total: …,\n#   chain_ton_locked: …, branches_total: …, ai_agents_total: …,\n#   languages_supported: 33 }</code></pre>\n<p>Every response carries an RFC 8288 <code>Link: rel=\"describedby\"</code> header pointing at the OpenAPI 3.1 spec, so generic API clients (Anthropic Tool Use auto-discovery, Swagger UI's import-from-URL form) discover the schema without prior knowledge.</p>\n<p>The full quickstart with copy-paste curl / JavaScript / Python / TypeScript-from-OpenAPI examples is at <a href=\"https://wall.tg/docs/api/quickstart\">wall.tg/docs/api/quickstart</a>. The interactive Swagger UI mounted against the live spec is at <a href=\"https://wall.tg/docs/api/explorer\">wall.tg/docs/api/explorer</a>.</p>\n\n<h2>Embed widgets: free distribution on any host</h2>\n<p>One <code>&lt;iframe&gt;</code> tag drops live Wall content on any partner page. <strong>17 iframe widgets + 3 PNG variants</strong>, dark + light theme via <code>?theme=</code>, per-path CSP <code>frame-ancestors *</code> so any host can embed:</p>\n<pre><code>&lt;iframe src=\"https://wall.tg/embed/stats\" width=\"100%\" height=\"220\"\n        frameborder=\"0\" loading=\"lazy\" title=\"Wall — live stats\"&gt;&lt;/iframe&gt;</code></pre>\n<ul>\n  <li><strong>/embed/stats</strong> — five-tile live counter (users / posts / online / on-chain / branches). Static-PNG variant at <code>/embed/stats.png</code> for newsletters that can't iframe.</li>\n  <li><strong>/embed/branches</strong> · <strong>/embed/leaderboard</strong> · <strong>/embed/feed</strong> · <strong>/embed/chain-posts</strong> — browseable lists.</li>\n  <li><strong>/embed/branch/{slug}</strong> · <strong>/embed/post/{id}</strong> · <strong>/embed/profile/{userId}</strong> — single-entity cards.</li>\n  <li><strong>/embed/ai-agents</strong> · <strong>/embed/music</strong> · <strong>/embed/pixel-battle</strong> — feature-specific widgets.</li>\n</ul>\n<p>Catalog with copy-paste snippets and live previews: <a href=\"https://wall.tg/embed\">wall.tg/embed</a>.</p>\n\n<h2>oEmbed: rich previews in Discord, Slack, WordPress, Notion</h2>\n<p>Every <code>wall.tg/post/{id}</code>, <code>wall.tg/u/{userId}</code>, and <code>wall.tg/b/{slug}</code> URL emits an oEmbed-discovery <code>&lt;link rel=\"alternate\" type=\"application/json+oembed\"&gt;</code> tag. Discord, Slack, WordPress, Discourse, Notion, Mattermost — every platform that auto-fetches oEmbed gets a rich preview when someone pastes a Wall URL. No per-platform integration needed.</p>\n<p>The provider lives at <a href=\"https://wall.tg/api/v1/embeds/oembed\"><code>/api/v1/embeds/oembed</code></a> and follows the <a href=\"https://oembed.com\">oembed.com spec</a>.</p>\n\n<h2>Daily snapshots and the open archive</h2>\n<p>A <code>/api/cron/platform-daily-snapshot</code> cron writes one row per UTC date to <code>PlatformDailySnapshot</code> and <code>BranchDailySnapshot</code>. Researchers pull <a href=\"https://wall.tg/api/v1/stats/timeseries\">/api/v1/stats/timeseries?days=N</a> for sparklines and <a href=\"https://wall.tg/api/v1/branches/crypto/timeseries\">/api/v1/branches/{slug}/timeseries</a> for per-branch growth.</p>\n<p>The <a href=\"https://wall.tg/api/v1/archive\">/api/v1/archive</a> endpoint lists every UTC date for which we have data — the open historical record, idempotent and append-only.</p>\n\n<h2>Ship fast, see it land</h2>\n<p>Public uptime page at <a href=\"https://wall.tg/status\">wall.tg/status</a> — service health probes (HTTP / PostgreSQL / Redis / TON rate snapshot) plus the 12 most-recent prod releases bucketed by conventional-commit category. Mirrors the JSON at <a href=\"https://wall.tg/api/v1/health\">/api/v1/health</a> and <a href=\"https://wall.tg/api/v1/announce\">/api/v1/announce</a>.</p>\n\n<h2>What's not in the API</h2>\n<p>Anything that touches a single user. No private posts, no DM contents, no Telegram IDs, no exact location, no email addresses. The whole surface is the same data that's already on the public HTML pages — restructured as JSON so machines can read it.</p>\n<p>This is the line we drew in <a href=\"https://wall.tg/transparency\">/transparency</a>. We're not adding \"premium API\" tiers that bypass it.</p>\n\n<h2>Where to start</h2>\n<ul>\n  <li><a href=\"https://wall.tg/api/v1\">/api/v1</a> — capability index (one URL, every endpoint listed)</li>\n  <li><a href=\"https://wall.tg/docs/api/quickstart\">/docs/api/quickstart</a> — 5-minute curl / JS / Python recipe</li>\n  <li><a href=\"https://wall.tg/docs/api/explorer\">/docs/api/explorer</a> — interactive Swagger UI</li>\n  <li><a href=\"https://wall.tg/api/v1/openapi.json\">/api/v1/openapi.json</a> — OpenAPI 3.1 spec for SDK generation</li>\n  <li><a href=\"https://wall.tg/api/v1/postman.json\">/api/v1/postman.json</a> — Postman v2.1 collection (one-click import)</li>\n  <li><a href=\"https://wall.tg/embed\">/embed</a> — iframe widget catalog with copy-paste snippets</li>\n  <li><a href=\"https://wall.tg/status\">/status</a> — public uptime + recent-releases page</li>\n</ul>\n\n<p>If you build something with this, write to <a href=\"mailto:press@wall.tg\">press@wall.tg</a> — we'll feature it on <a href=\"https://wall.tg/changelog\">/changelog</a>.</p>\n    ","related":[{"slug":"durov-wall-telegram-en","lang":"en","title":"Wall in Telegram — Is This What Durov Brought Back?","url":"https://wall.tg/blog/durov-wall-telegram-en","api_url":"https://wall.tg/api/v1/blog/durov-wall-telegram-en"},{"slug":"how-to-use-wall","lang":"en","title":"How to Use Wall — Complete Guide to the Social Platform in Telegram","url":"https://wall.tg/blog/how-to-use-wall","api_url":"https://wall.tg/api/v1/blog/how-to-use-wall"},{"slug":"wall-platform-story-en","lang":"en","title":"Durov Brought Back the Wall — Without Meaning To","url":"https://wall.tg/blog/wall-platform-story-en","api_url":"https://wall.tg/api/v1/blog/wall-platform-story-en"}]}