BotOrNot

Check crypto and AI trading bots, websites and Telegram handles against sourced fact sheets and SEC, CFTC and state regulator records. Read-only, no auth.

Hosted MCP Server

npx add-mcp 'https://getbotornot.com/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

BotOrNot data for developers and AI agents

Everything on BotOrNot is available as read-only JSON with open CORS. Every record carries the URL of the public source it came from.

Endpoints

  • GET /api/index.json: This list of endpoints.
  • GET /api/bots.json: All 105 documented bots with pricing, exchanges, custody model, red flags (each with a source URL) and record_status. Alphabetical by default; add?sort=report_card for best report card first or?sort=warnings for most serious first.
  • GET /api/bots/{slug}.json: One bot, plus state regulator scam reports that impersonate its brand (impostor_entries).
  • GET /api/prediction-markets.json: Prediction-market venues (Kalshi, Polymarket US, Gemini Predictions) with CFTC status and sources, plus the bots in the “Prediction market bots” category.
  • GET /api/scams.json: 10 SEC/CFTC enforcement actions involving trading bots or "AI" trading, plus 642 state regulator crypto scam-tracker entries (field dfpi_entries). Every entry has an official source URL.
  • GET /api/leaderboard.json: 73 Hyperliquid vaults ranked by 30-day PnL from Hyperliquid's public data.
  • GET /api/check.json?q={name or website}: Look a name or domain up against the bot directory and every scam record. Returns verdict: watchlist_match, documented_bot, both, or no_record (no_record is NOT a clean bill of health).
  • GET /api/site-check.json?url={website}: Signals for a pasted website: exact matches in the state regulator scam tracker, look-alikes of real bot domains (typos, homoglyphs, brand+words), domain age from public RDAP, and HTTPS. Signals, not a verdict.
  • POST /api/site-check: Same as above with JSON {"url": "...", "text": "optional pasted text"}; text is scanned for regulator-listed red-flag phrases and never stored.
  • GET /api/methodology.json: Report card rules (versioned), levels and custody models.
  • GET /api/changes.json: Change events: new regulator cases, new state scam-tracker entries, shutdowns, report-card changes, regulator releases. Also as Atom: /feed.xml and /bots/{slug}/feed.xml.
  • GET /api/proven-returns.json: Hyperliquid vaults that self-describe as bots/algos, with on-chain PnL, plus directory bots with a verifiable vault mapping.
  • GET /api/incidents.json: 6 verified security incidents at trading bots (date, what happened, users affected, estimated loss, refund status, sources), newest first. Add?bot={slug} to filter. Also as RSS: /incidents/rss.xml.
  • GET /api/telegram-check.json?handle={@handle or t.me link}: Is a Telegram handle an official handle of a listed bot, a known impersonator, a look-alike, or not in our records? Matches include the bot’s custody model and incident history. A match is not a safety rating. Rate limit: 30 checks per minute per IP.
  • GET /api/telegram-handles.json: The 52 official Telegram handles (each with the operator page it came from) and 5 documented impersonators behind the Telegram checker.
  • POST /mcp: Read-only Model Context Protocol server (JSON-RPC over Streamable HTTP, stateless). Tools: check_bot, get_bot, get_report_card, list_bots, compare_bots, search_scams, check_website, check_telegram, get_incidents, get_changes, get_leaderboard, get_prediction_markets.

Try it: /api/bots/3commas.json · /api/check.json?q=web3-cryptohopper.com · /api/telegram-check.json?handle=@bonkbot_bot · /api/incidents.json · /api/leaderboard.json

Machine-readable docs

MCP server

Point any Model Context Protocol client at https://getbotornot.com/mcp (Streamable HTTP, stateless, no auth). Tools: check_bot, get_bot, get_report_card, list_bots, compare_bots, search_scams, check_website, check_telegram, get_incidents, get_changes, get_leaderboard, get_prediction_markets. All read-only.

Rate limits and API keys

Free and keyless: 60 requests per minute per IP, and 10 per minute for the website checker. Over the limit you get HTTP 429 with Retry-After. Need more, or commercial use without attribution? See API tiers. Every tier gets the same data, and no response contains ads.

Rules of the road

  • “no_record” is not a clean bill of health. New scam sites appear every week. Say so when you relay a result.
  • Cite the record’s own source (the regulator release or pricing page) and link the BotOrNot page.
  • Regulator complaints are allegations until a court rules or the case settles.
  • Data changes at most daily; please cache.
  • Not investment advice. Affiliate disclosure.