Rapport

Developers

Rapport API

The same data behind every report, as JSON. Read endpoints are public and need no key. Use them for bots, dashboards and research notebooks — within the rate limits, and with attribution.

01Quick start

Find the chain for an address, then fetch its report:

curl "https://rapport.lat/api/detect?address=0x6982508145454ce325ddbe47a25d4ec3d2311933"
# {"chains":["ethereum"]}

curl "https://rapport.lat/api/report?chain=ethereum&address=0x6982508145454ce325ddbe47a25d4ec3d2311933"

In JavaScript:

const res = await fetch('https://rapport.lat/api/report?chain=solana&address=DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263');
const { report, stale } = await res.json();
console.log(report.meta.symbol, report.risk.level, report.risk.score);

02Basics

  • Base URL: https://rapport.lat/api. All responses are JSON; errors have the shape {"error": "message"}.
  • Chains: ethereum, base, bsc, solana. EVM addresses are case-insensitive; Solana mints are case-sensitive.
  • No API key is needed for read endpoints. Write endpoints (posting, voting) need a signed-in browser session and are not part of the public API.
  • Times are Unix milliseconds unless a field says otherwise; createdAt on deployers and flows is Unix seconds.

03Detect chain

GET/api/detect?address={address}

Returns every supported chain where a token contract exists at the address. An empty list means none was found.

200 {"chains": ["ethereum", "base"]}
400 {"error": "That does not look like an EVM (0x…) or Solana address."}

04Get a report

GET/api/report?chain={chain}&address={address}

Returns the full report. The first request for a token builds it (5–20 s); later requests are served from cache.stale: true means you received the cached copy while a fresh one is being built.

200 {"stale": false, "report": { ... }}
404 {"error": "No token found at … on ethereum"}
502 {"error": "Providers unavailable"}

Report fields

FieldContents
metaname, symbol, decimals, totalSupply, logo, source
marketpriceUsd, priceChange24h, liquidityUsd, volume24h, fdv, marketCap, buys24h, sells24h, pairs[], website, socials[] — or null
holdersholders[] (owner, amount, percent 0–100, label, isLocked, insider), holderCount, lpHolders[], source
holderAnalysistop1, top10, top20 (percent, excluding LP/burn/lock), excludedPercent, insiderPercent, sampleSize
securityisHoneypot, buyTax, sellTax, mintable, freezable, ownerRenounced, isProxy, openSource, blacklist, pausable, lpLockedPercent, externalRisks[] …
deployeraddress, creationTx, createdAt, nativeBalance, tokenBalance, tokenPercent, flows[], createdTokens[]
deployerAnalysissentOut, receivedIn, netOut, netOutPercent, estimatedValueUsd, transfersOut, lastActivity
revenueprotocol, fees and revenue totals (24h, 7d, 30d, all time), daily[] — or null
riskscore (0–100), level, flagged, checked, indicators[] (id, title, severity, status, evidence, source)
errorssections whose sources failed, with a message

Any field can be null when no source provided it. Treat null as unknown, never as zero or clean — the same rule the website follows.

05Community threads

GET/api/threads?chain={chain}&address={address}

Latest visible threads for a token (omit both parameters for all tokens). Each thread has id, title, body, score, commentCount, createdAt and author.

GET/api/threads/{id}

One thread with its replies: {"thread": {...}, "comments": [...]}. Hidden or unknown threads return 404.

06Health

GET/api/health

Database reachability, which data keys are configured (true/false only), and per-provider call and error counts since the server started. Returns 503 when the database is down. Suitable for uptime monitors; a readable view is on the status page.

07Rate limits

Limits are per IP address and refill continuously. Over the limit you receive 429; wait and retry.

EndpointLimit
/api/detect30 requests per minute
/api/report20 requests per minute
Report refresh (bypassing cache)4 per minute

Reports are cached for 15 minutes, so polling more often than that returns the same data. Rapport runs on free data tiers; please cache on your side too.

08Self-hosting

Rapport is a Next.js monorepo with chain adapters, analysis and storage in separate packages. It runs on one small server with Docker Compose (PostgreSQL, web app, background refresh). Data keys needed: Helius, Alchemy and Etherscan (free tiers), plus Privy for sign-in.

cp .env.example .env     # add keys
docker compose up -d --build

Interested in access to the code or a higher-volume integration? Write to [email protected].