OpenAPI 3.1 · Bearer auth · snake_case JSON
CrowdIntel API
Read-only Polymarket smart-money intelligence: wallet signals, full wallet intel, leaderboards, market sentiment, on-chain trades, sybil clusters, and investigations. Mint a key in Settings → API (Terminal $99+), then call the base URL https://crowdintel.xyz/api.
Free50 / hr · 500 / moSingle wallet/market lookup + top leaderboards
Terminal · $991k / hr · 50k / moFull read API + bundled MCP server
Terminal Pro · $2995k / hr · 250k / mo+ analyze, clusters, investigations
Quickstart
Every request needs an Authorization: Bearer cint_api_… header. Responses are snake_case; errors use { error: { code, message, request_id } }; lists return { data, next_cursor }.
curl
curl https://crowdintel.xyz/api/v1/signals/wallet/0xYOUR_WALLET \
-H "Authorization: Bearer cint_api_xxxxxxxxxxxxxxxxxxxxxxxx"JavaScript (fetch)
const res = await fetch(
"https://crowdintel.xyz/api/v1/signals/wallet/0xYOUR_WALLET",
{ headers: { Authorization: `Bearer ${process.env.CROWDINTEL_API_KEY}` } },
);
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message} (${error.request_id})`);
}
const signal = await res.json();
console.log(signal.smart_money_score, signal.confidence);
// Cursor pagination
let cursor = null;
do {
const url = new URL("https://crowdintel.xyz/api/v1/leaderboards/pnl");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const page = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.CROWDINTEL_API_KEY}` },
}).then((r) => r.json());
for (const row of page.data) console.log(row.address, row.total_pnl);
cursor = page.next_cursor;
} while (cursor);Python (requests)
import os
import requests
API = "https://crowdintel.xyz/api"
HEADERS = {"Authorization": f"Bearer {os.environ['CROWDINTEL_API_KEY']}"}
# Single lookup
res = requests.get(f"{API}/v1/signals/wallet/0xYOUR_WALLET", headers=HEADERS)
res.raise_for_status()
signal = res.json()
print(signal["smart_money_score"], signal["confidence"])
# Cursor pagination
cursor = None
while True:
params = {"limit": 100}
if cursor:
params["cursor"] = cursor
page = requests.get(f"{API}/v1/leaderboards/pnl", headers=HEADERS, params=params).json()
for row in page["data"]:
print(row["address"], row["total_pnl"])
cursor = page.get("next_cursor")
if not cursor:
break