Limzo Data API
Every public Limzo group profile is also available as read-only JSON — the same aggregate stats the human page shows, built for dashboards, bots, and AI agents. No authentication, CORS-enabled, described by an OpenAPI 3.1 spec.
Quick start
Take any public profile URL and append .json — or just open limzo.com/s/hipo.json in your browser right now (hipo is a real group, the site's live example):
curl https://limzo.com/s/hipo.json
A real response from that URL, trimmed:
{
"ok": true,
"schema": "limzo.public_stats/v1",
"generated_at": "2026-07-15T12:55:04.464Z",
"docs": "https://limzo.com/docs/",
"openapi": "https://limzo.com/api/public/openapi.json",
"group": {
"slug": "hipo",
"title": "Hipo Chat",
"username": "hipo_chat",
"is_private": false,
"plan": "community",
"member_count": 3922,
"url": "https://limzo.com/s/hipo",
"telegram_url": "https://t.me/hipo_chat"
},
"range": { "key": "7d", "label": "7 days", "days": 7 },
"stats": {
"messages": 906,
"replies": 391,
"active_users": 228,
"lifetime_messages": 1728,
"peak_hour_utc": 21,
"mood": { "label": "Sunny", "emoji": "☀️", "positive_pct": 81 },
"daily": [ { "day": "2026-07-09", "messages": 142, "replies": 80, "active_users": 31 }, "…" ],
"top_members": [ { "rank": 1, "name": "Josip", "username": "heretic", "messages": 213, "replies": 116 }, "…" ],
"top_reactor": { "name": "mili", "username": "milibilij", "count": 120 },
"reaction_magnet": { "name": "Josip", "username": "heretic", "count": 228 }
}
}That's the whole API: public, read-only JSON over plain HTTPS. No key, no signup, no SDK needed.
Use it with an AI assistant
The API is designed to be consumed by AI tools directly — assistants can fetch these URLs in-conversation, and the OpenAPI spec plugs into agent frameworks with zero glue code. Three things to try (the admin-facing story lives at AI visibility for your group). No group connected yet? Every prompt below works as-is with hipo, the live example group, in place of yourgroup:
1. Instant health read. Paste into ChatGPT or Claude:
Open https://limzo.com/s/yourgroup.json and tell me how my community is doing — the trend, the mood, and what I should fix first.
2. Native tools in ChatGPT and Claude. In ChatGPT, try the official Limzo Community Analyst in the GPT Store — or build your own custom GPT by importing the spec as an Action:
https://limzo.com/api/public/openapi.json
In Claude, add the Limzo MCP connector (Settings → Connectors → Add custom connector) and Claude gets the stats as native tools:
https://limzo.com/api/public/mcp
The OpenAPI URL also works anywhere OpenAPI-described tools are accepted; the MCP URL works with any MCP client.
3. A live dashboard with no backend. The API is CORS-open, so browser fetches work from any origin. One prompt to Claude or ChatGPT:
Build a single-file HTML dashboard that fetches https://limzo.com/s/yourgroup.json and shows the daily trend (stats.daily), the leaderboard (stats.top_members), and the mood (stats.mood). Refresh every 30 minutes. The exact response schema: https://limzo.com/api/public/openapi.json
Endpoints
/s/{slug}.jsonStats for one public group. Mirrors the human page URL — {slug} is the last part of the group's limzo.com/s/<slug> address. Alias: GET /api/public/{slug} returns the identical payload.
Optional query parameter ?range=7d|30d|all — see ranges. Unknown slugs return a JSON 404 ({"ok":false,"error":"Public stats page not found."}); groups whose public page is switched off return 403.
Try it: /s/hipo.json · /api/public/hipo (alias) · a 404
/api/public/global-statsNetwork-wide totals across all listed public groups (group count, messages, active members, replies, reactions, karma — 7-day and all-time) plus the current top groups by Limzo Score.
Try it: /api/public/global-stats
/api/public/openapi.jsonThis API as a machine-readable OpenAPI 3.1 document — full request/response schemas for code generators, API clients, and AI agents. Open the spec.
/api/public/mcpThe same API as an MCP server (Model Context Protocol, streamable HTTP, no auth) for Claude and any MCP client. Exposes two read-only tools: get_group_stats and get_global_stats.
Connect it in Claude: Settings → Connectors → Add custom connector → https://limzo.com/api/public/mcp. In Claude Code: claude mcp add --transport http limzo https://limzo.com/api/public/mcp
The range parameter
Group stats default to the last 7 days. Two wider windows exist:
| Value | Window | Availability |
|---|---|---|
| 7d | Last 7 days | All groups (default) |
| 30d | Last 30 days | Groups on a Pro or Community plan |
| all | All-time | Groups on a Pro or Community plan |
Requesting 30d or all on a free-plan group is not an error — the response silently falls back to 7 days. Always check range.key in the payload to see which window you actually got.
The example group is on a paid plan, so both wider windows serve real data — compare range.key across ?range=30d and ?range=all.
Response reference
The group stats payload (schema: "limzo.public_stats/v1") has three parts: group, range, and stats. The exact machine-readable definition lives in the OpenAPI spec.
group
| Field | Type | Meaning |
|---|---|---|
| slug | string | The group's public slug. |
| title | string? | Display title. |
| username | string? | Telegram username without @, when the group is public on t.me. |
| is_private | boolean | True when the group has no public t.me address. |
| plan | string | free, pro, or community. |
| member_count | integer? | Total members. |
| description | string? | Group description. |
| url | string | The human stats page. |
| telegram_url | string? | t.me link, when public. |
range
| Field | Type | Meaning |
|---|---|---|
| key | string | The window actually served: 7d, 30d, or all. |
| label | string | Human label, e.g. "7 days". |
| days | integer | Window length in days. |
stats
| Field | Type | Meaning |
|---|---|---|
| messages | integer | Messages in the selected range. |
| replies | integer | Replies in the selected range. |
| stickers | integer | Stickers in the selected range. |
| active_users | integer | Unique posting members in the range. |
| messages_today | integer | Messages so far today (UTC). |
| active_users_today | integer | Unique posting members so far today (UTC). |
| lifetime_messages | integer | Messages since tracking started. |
| tracked_since_days | integer | Days since tracking started. |
| new_active_members | integer | Members who posted for the first time in the range. |
| peak_hour_utc | integer? | Busiest hour of day, 0–23 UTC. |
| mood | object? | { label, emoji, positive_pct } — group mood from reactions. |
| daily | array | Per-day series: { day, messages, replies, active_users }. |
| top_members | array | Leaderboard: { rank, name, username, messages, replies }. |
| top_reactor | object? | Member who reacted the most: { name, username, count }. |
| reaction_magnet | object? | Member whose messages attracted the most reactions. |
Fields marked ? can be null — usually when a group hasn't accrued that data yet.
Caching, CORS & rate limits
| Header / limit | Value | Notes |
|---|---|---|
| Cache-Control | public, max-age=1800 | Stats move slowly; respect the 30-minute cache instead of polling. |
| Access-Control-Allow-Origin | * | Call the API straight from browser apps. |
| Rate limit | 5 req/s, burst 20 | Per client IP. Excess requests get HTTP 429 — back off and retry. |
| HEAD | supported | All endpoints answer HEAD probes with headers only. |
See for yourself:
$ curl -I https://limzo.com/s/hipo.json HTTP/2 200 content-type: application/json; charset=utf-8 cache-control: public, max-age=1800 access-control-allow-origin: *
JSON is the cheap way to consume Limzo — a typical payload is ~50× smaller than the equivalent HTML page. If you're building something that needs more than the public feed offers, tell us about it.
Privacy & fair use
The API exposes only what the group's public stats page already shows — it is a different format, never a wider window:
• No message content. Payloads never include verbatim member messages, on any plan.
• Private groups stay private. Groups without a public t.me address expose aggregate metrics and the member leaderboard only.
• Admins stay in control. If a group's admins switch its public page off or restrict visibility, the JSON disappears with it (403).
• How the numbers are made: see the methodology page.
Finding groups to query
Slugs are public and discoverable:
• The public group directory lists active public profiles.
• The group sitemap enumerates every public profile URL.
• Every stats page carries a <link rel="alternate" type="application/json"> tag pointing at its JSON twin.
• llms.txt summarizes the whole site — including this API — for AI assistants.
Versioning & stability
The payload carries schema: "limzo.public_stats/v1". New fields may be added at any time without notice — write consumers that ignore unknown keys. Breaking changes (renamed or removed fields, changed meanings) will bump the schema version, so pin your integration to the schema value.
Questions or feature requests? Join the Limzo Telegram community or contact us.