Public Telegram, X, Reddit, and Discord channels, groups, and community posts that ordinary web crawlers never index. Pay per call with x402 or MPP — no API keys, no signup.
curl {BASE_URL}/v1/telegram/search?q=coffee
Protocol
One platform per call — the platform is part of the path
(/v1/{platform}/...). Fan out client-side for cross-platform search.
e.g. GET /v1/telegram/search. Without payment you get HTTP 402 with the payment
requirements — price, network, receiving address.
Use either supported protocol. Your client pays the micropayment and retries automatically — no manual step.
Newest-first where the platform supports it, with permalinks back to the original post.
Pricing
Each call has a fixed USD price. Supported payment protocols are advertised in /openapi.json under
x-payment-info — that document is the source of truth, never hardcode a price.
# x402 — pay with a funded Base wallet
import { wrapFetchWithPayment } from "x402-fetch";
const fetchWithPay = wrapFetchWithPayment(fetch, walletClient);
const res = await fetchWithPay("{BASE_URL}/v1/telegram/search?q=coffee&limit=20");
const data = await res.json();
# MPP / Tempo — agents discover both protocols via /openapi.json
# and pay over Tempo using the "Payment" auth scheme.
const res = await fetch("{BASE_URL}/v1/telegram/search?q=coffee", {
headers: { "Accept-Payment": "mpp" }
});
Reference
Backed by Telegram's own built-in message search — no separate index to go stale.
Search messages globally or within specific chats.
| Param | Meaning |
|---|---|
q / query |
Required phrase search query. Provide exactly one. |
from / to |
Time bounds — ISO-8601 (2026-06-01T00:00:00Z) or relative (now-7d).
to defaults to now.
|
limit |
Max results, 1–100 (default 20). |
cursor |
Opaque continuation token from a previous response's next_cursor. |
filter[chat] |
Restrict to one channel (eq, shorthand) or several (filter[chat][in][]=...,
max 20), by username without @. |
filter[message_type] |
One native Telegram message filter, e.g. photo, url, voice. See
/openapi.json for the full enum.
|
# Recent messages mentioning "coffee"
GET /v1/telegram/search?q=coffee
# Same, last 7 days only
GET /v1/telegram/search?q=coffee&from=now-7d
# Restrict to one channel
GET /v1/telegram/search?q=coffee&filter[chat]=somechannel
# Multiple channels, links only
GET /v1/telegram/search?q=coffee
&filter[chat][in][]=channel_a
&filter[chat][in][]=channel_b
&filter[message_type]=url
Search posts across public Telegram channels using Telegram's built-in global post
search, not limited to a predefined set. Accepts only q/query, limit,
and cursor — no from/to or filters. Priced higher per call than
/search to cover the broader scan.
GET /v1/telegram/search/public-posts?q=coffee&limit=20
Accept: text/plain to either endpoint for a human-readable rendering instead of
JSON.No payment required
The live list of supported platforms, endpoint paths, and exactly which controls and filters each accepts.
GET /openapi.jsonOpenAPI 3.1 spec with x402 + MPP payment metadata, for agent discovery. Revalidate with ETag.
Download the agent skill (Markdown) to drop into your agent.
GET /healthLiveness check.
400 (with a docs link to the current contract) at no cost. Upstream rate
limits return 429 with Retry-After.