Telegram is live · X, Reddit, Discord, LinkedIn, Threads soon

Live search over the
deep conversation layer

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

How it works

One platform per call — the platform is part of the path (/v1/{platform}/...). Fan out client-side for cross-platform search.

01

Call a search endpoint

e.g. GET /v1/telegram/search. Without payment you get HTTP 402 with the payment requirements — price, network, receiving address.

02

Pay with a funded wallet

Use either supported protocol. Your client pays the micropayment and retries automatically — no manual step.

03

Get matching results

Newest-first where the platform supports it, with permalinks back to the original post.

Telegram is the live platform today. X, Reddit, Discord, LinkedIn, and Threads are next in the rollout.

Pricing

Payment options

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.

$0.00 / call
Chain / asset
Base · USDC
How clients pay
Send the X-PAYMENT header. An unpaid request returns the PAYMENT-REQUIRED challenge.
Client libraries
x402-fetch / x402-axios
# 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();
$0.00 / call
Chain / asset
Tempo · USDC
How clients pay
The Payment auth scheme — Authorization: Payment …, or Accept-Payment to fetch a WWW-Authenticate challenge.
Client libraries
Any MPP-capable client, e.g. AgentCash.
# 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

Telegram search

Backed by Telegram's own built-in message search — no separate index to go stale.

GET /v1/telegram/search

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
GET /v1/telegram/search/public-posts

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
Add Accept: text/plain to either endpoint for a human-readable rendering instead of JSON.

Reference

Digital Footprint

How long has this brand existed, where does it actually appear, and is the audience real? Four endpoints answer that from public sources — X, the Wayback Machine, RDAP and GitHub — and every claim comes back with the sources it rests on.

Four rungs, four prices

Buy one question or the whole picture. Each rung is a separate endpoint at its own price — nothing is bundled, and a cheap rung is the same answer the full report would have given for that block.

Endpoint What it answers Price
/v1/footprint/age When the subject first appeared online, and whether the presence since then is continuous. Dated anchors, gap years, and a warning when the domain long predates the identity using it.
/v1/footprint/mentions Which surfaces carry the subject at all, each with a link and a first-seen date, plus which surfaces cross-reference each other.
/v1/footprint/audience Whether the visible reputation is organic or manufactured — author concentration and author account age, the two axes a bought audience cannot fake at once.
/v1/footprint/report All three at once plus a headline verdict, with every claim carrying its sources.
Parameters — the same on all four

Which sources a call spends is decided by the rung, not by the caller: the price of a rung is the set of sources it buys, so there is no parameter that drops one.

Param Meaning
q / query Required. The subject: a domain, a handle, or a brand or person name. Provide exactly one.
filter[type] brand or person — changes which anchors and which provenance are believable.
filter[lang] BCP-47 tag. Shifts source weighting; Telegram carries Russian-language activity that X does not.
# Full report on a domain
GET /v1/footprint/report?q=polymarket.com

# Just the age question, for a fiftieth of the price
GET /v1/footprint/age?q=polymarket.com

# A person, with Russian-language sources weighted in
GET /v1/footprint/report?q=pavel+durov
  &filter[type]=person
  &filter[lang]=ru
The verdict is one of established, emerging, thin, absent — or insufficient_data. That last one is the point: finding nothing is only reported as absent when enough independent sources answered to make silence mean something. When they did not, the report says so instead of guessing. Accept: text/plain works here too.

No payment required

Free endpoints

Validation runs before any charge: unsupported parameters, filters, or operators return a structured 400 (with a docs link to the current contract) at no cost. Upstream rate limits return 429 with Retry-After.