CrowdIntel API
Build Polymarket bots and agents on the deepest data: 1.7B+ indexed on-chain fills, smart-money signals, whale alerts, funding clusters, and hosted backtests — read-only, so your bot keeps execution. Wallet signals, market sentiment, on-chain trades, and sybil clusters over REST, MCP, and webhooks. Mint a key in Settings → API — free, no credit card — then call the base URL https://crowdintel.xyz/api. Every endpoint answers on a free key; paid plans raise the rate limit, not the surface.
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 https://crowdintel.xyz/api/v1/signals/wallet/0xYOUR_WALLET \
-H "Authorization: Bearer cint_api_xxxxxxxxxxxxxxxxxxxxxxxx"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);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