Build on
the record.
Everything Cyclops reads, from code: two SDKs, a server for AI agents, a drop-in warning for dApps, researcher SQL and Slack, with runnable examples and a changelog of every API change.
Three
steps.
- 01Read without a key:
curl https://cyclopslabs.dev/api/v1/launches?limit=5. - 02Get a key when you need higher limits or your own routes: a free key in 30 seconds, or one tied to your wallet’s tier on the account page. Send it as
x-api-key. - 03Find the call in the API reference, send it from the console, copy it as curl.
Pick your
client.
// packages/sdk-ts · zero dependencies · Node 18+, Deno, Bun, browsers
import { Cyclops } from '@cyclops/sdk';
const cx = new Cyclops({ apiKey: process.env.CYCLOPS_API_KEY });
const { launches } = await cx.launches({ outcome: 'collapsed', limit: 20 });
const read = await cx.inspect('0x…'); // token, wallet, contract or tx hash
const stop = cx.firehose((l) => console.log(l.symbol, l.firstMinute));# packages/sdk-py · standard library only · Python 3.9+
# pip install ./packages/sdk-py
import os
from cyclops_sdk import Cyclops
cx = Cyclops(api_key=os.environ.get("CYCLOPS_API_KEY"))
stats = cx.launch_stats()
read = cx.inspect("0x…")
for launch in cx.firehose(): # blocks; yields each new launch
print(launch["symbol"], launch["firstMinute"])Both SDKs live in the repository (packages/sdk-ts, packages/sdk-py) and are not on npm or PyPI yet. They return the API’s JSON unchanged and retry 429 and 503 answers after Retry-After.
{
"mcpServers": {
"cyclops": {
"command": "node",
"args": ["/path/to/cyclops/packages/mcp/src/index.mjs"],
"env": { "CYCLOPS_API_KEY": "cyc_…" }
}
}
}Tools: scan, inspect, wallet, launches, creator. Stdio, no dependencies, Node 18+. See tools for AI agents for x402 pay-per-scan.
import { CyclopsWarn } from '@cyclops/warn/react';
<CyclopsWarn address={tokenAddress} />
<CyclopsWarn address={tokenAddress} compact onResult={(s) => setNeedsConfirm(s.status === 'scanned' && s.label === 'High')} /><script type="module">
import { defineCyclopsWarn } from '@cyclops/warn/element';
defineCyclopsWarn();
</script>
<cyclops-warn address="0x…"></cyclops-warn>A pre-trade warning next to a swap button: the stored scan’s label, score and top observations, or a plain “no stored scan” or “could not be reached”. It reads the cached explorer endpoint, never starts a scan, never blocks a trade and never calls a token free of risk. Source and props: packages/warn/README.md; not on npm yet.
Beyond
the SDKs.
- DOCResearcher SQL
Read-only SQL over the research views, for Pro and research grants.
- DOCSlack
/cyclops in any channel, and alerts to team channels.
- DOCWebhooks
Signed alert and launch deliveries (POST /v1/me/webhooks), HMAC-SHA256 with a five-minute window.
- DOCExplorer snippet
Show the stored scan beside any address page.
- DOCPre-launch API
Check a contract before it trades (partners).
- DOCAgents
The MCP server and x402 pay-per-scan.
Zapier and n8n integrations on top of the webhooks are in the repository (packages/zapier-cyclops, packages/n8n-nodes-cyclops) and not listed in either directory yet.
Runnable,
no install.
examples/launch-watchThe latest launches with first-minute stats, then 30-day outcomes. Public reads, no key.
node examples/launch-watch/index.mjsexamples/outcomes-pyOutcome shares for recent launches with the Python SDK.
PYTHONPATH=packages/sdk-py python3 examples/outcomes-py/outcomes.pyexamples/webhook-receiverA receiver that checks the x-cyclops-signature HMAC before trusting an alert.
CYCLOPS_WEBHOOK_SECRET=whsec_… node examples/webhook-receiver/server.mjsexamples/research-sqlA read-only SQL query over the research views, printed as a table.
CYCLOPS_API_KEY=cyc_… node examples/research-sql/query.mjs
From a checkout of the repository. Each prints what the API returns and exits non-zero, saying why, when the API is unreachable.
What
changed.
Every public API change, from the repository history. Subscribe: Atom feed. Paths under /v1 keep their meaning; fields are added, never removed or retyped.
Researcher SQL and the Slack app
Read-only SQL over published research views for Pro and research-grant wallets, with a row cap, a statement timeout, a planner cost cap and a daily quota. A Slack app with a /cyclops command and a Slack alert channel, switched off until the deployment has Slack credentials. Not yet deployed.
- ΔAlert rules accept "slack" as a channel (POST /v1/me/rules, POST /v1/me/alerts/test).
7 endpoints added
- GET
/v1/research/schema - POST
/v1/research/sql - POST
/v1/me/slack/install - GET
/v1/slack/oauth - GET
/v1/me/slack - DELETE
/v1/me/slack/{id} - POST
/v1/slack/commands
Typed contract in the OpenAPI document
Twenty-nine public routes now publish request and response schemas in /v1/openapi.json, generated from the same zod objects the site’s client uses. The route table was split into domain modules with the same paths and match order; no public route moved or changed shape.
- ΔGET /v1/openapi.json: parameters, request bodies and 200 responses carry JSON Schemas for the typed routes.
- ΔToken scans report `phase` on progress events (fetch, decode, cluster, score, persist).
Wave 3: deeper scanner, alerts inbox, growth and trust
Score explanations, swap tapes, proxy and approval audits, cabals, creator identity, survival curves, exits, incremental and verifiable scans, the alert inbox, teams, pre-launch checks, x402 pay-per-scan and instant keys.
58 endpoints added
- GET
/v1/token/{address}/explain - GET
/v1/token/{address}/tape - GET
/v1/contract/{address}/proxy - GET
/v1/wallet/{address}/approvals - GET
/v1/wallet/{address}/exits - GET
/v1/cabals - GET
/v1/creator/{address}/identity - GET
/v1/survival - GET
/v1/lockers - GET
/v1/collapses - GET
/v1/explorer/{address} - GET
/v1/scan/{address}/diff - GET
/v1/scan/{address}/verify - POST
/v1/scan/{address}/rerun - GET
/v1/live - GET
/v1/rpc/health - GET
/v1/slo - GET
/v1/flags - GET
/v1/ground-truth - GET
/v1/score/bias - GET
/v1/score/calibration - GET
/v1/reports/quarterly - GET
/v1/reports/quarters - GET
/v1/me/inbox - GET
/v1/me/inbox/count - POST
/v1/me/inbox/read - POST
/v1/me/inbox/delete - GET
/v1/me/alert-prefs - POST
/v1/me/alert-prefs - GET
/v1/me/mutes - POST
/v1/me/mutes - POST
/v1/me/alerts/test - GET
/v1/me/alerts/record - GET
/v1/me/rules/{id}/template - GET
/v1/rules/template/{code} - GET
/v1/me/wallet-watch - POST
/v1/me/wallet-watch - POST
/v1/fates/changes - GET
/v1/me/labels - PUT
/v1/me/labels - GET
/v1/me/keys/{id}/usage - POST
/v1/keys/anonymous - POST
/v1/keys/instant - POST
/v1/prelaunch/check - POST
/v1/partner/prelaunch - GET
/v1/prelaunch/{id} - GET
/v1/x402 - GET
/v1/x402/scan/{address} - POST
/v1/me/data/delete - POST
/v1/data/receipt/verify - GET
/v1/corrections - POST
/v1/corrections - GET
/v1/incidents - POST
/v1/teams - GET
/v1/me/teams - GET
/v1/kalshi/history - GET
/v1/markets/feed - GET
/v1/markets/books
Wave 2: alerts platform, labels, datasets, keys and the OpenAPI document
Alert rules, follows, webhooks and push; community labels; datasets; API keys; bulk inspect; receipts; AI summaries; the firehose; and the machine-readable spec.
41 endpoints added
- GET
/v1/openapi.json - GET
/v1/me/rules - POST
/v1/me/rules - DELETE
/v1/me/rules/{id} - GET
/v1/me/follows - POST
/v1/me/follows - GET
/v1/me/webhooks - POST
/v1/me/webhooks - POST
/v1/me/webhooks/{id}/test - GET
/v1/push/key - POST
/v1/me/push - GET
/v1/me/keys - POST
/v1/me/keys - DELETE
/v1/me/keys/{id} - POST
/v1/bulk/inspect - GET
/v1/labels - POST
/v1/labels/propose - POST
/v1/labels/{id}/vote - GET
/v1/datasets - GET
/v1/datasets/{file} - GET
/v1/firehose - GET
/v1/firehose/recent - GET
/v1/search - GET
/v1/trail/{address} - GET
/v1/creator/{address} - GET
/v1/smart-money - GET
/v1/flags/accuracy - POST
/v1/flags/report - GET
/v1/flags/reports - GET
/v1/scan/{address}/receipt - GET
/v1/receipts/key - GET
/v1/score/changelog - GET
/v1/token/{address}/holders/history - POST
/v1/ai/summary - POST
/v1/ai/ask - GET
/v1/chains - GET
/v1/queue - POST
/v1/digest/subscribe - GET
/v1/me/investigations - PUT
/v1/me/investigations - POST
/v1/discord/interactions
Streaming scans, history, reports and badges
Scans stream their progress as server-sent events; daily token history, weekly reports and the embeddable scan badge.
5 endpoints added
- GET
/v1/inspect/{q}/stream - GET
/v1/token/{address}/history - GET
/v1/reports - GET
/v1/reports/weekly - GET
/v1/badge/token/{file}
The on-chain scanner
Point the scanner at a token, wallet, contract or transaction on Robinhood Chain; launches with outcomes and the creator board.
7 endpoints added
- GET
/v1/inspect/{q} - GET
/v1/scan/wallet/{address} - GET
/v1/tx/{hash} - GET
/v1/launches - GET
/v1/launches/stats - GET
/v1/devs - GET
/v1/labels/{address}