Developer platform · data.insiders.bot
Prediction-market data,
live.
One API for the entire prediction-market tape. Query markets, trades, OHLCV,
holders and wallet analytics over REST — or tap the global trade firehose over
WebSocket. Backed by insiders' 2.58 billion-row on-chain dataset.
Quickstart
Three steps to live data
No SDK required. Mint a free key, call any endpoint over HTTPS, then open the
WebSocket for the real-time firehose. The API is same-origin at
/v1/*; the socket lives at
wss://data.insiders.bot/streamwss://data.insiders.bot/stream
01
Get a key
Self-serve a free key with your email. Free tier is 60 rpm / 10k per day.
terminal
curl -s -X POST https://data.insiders.bot/v1/keys \
-H 'content-type: application/json' \
-d '{"email":"you@co.com","label":"my-app"}'
02
Call the REST API
Send your key as a Bearer token. Every list response carries count + meta.
terminal
curl -s https://data.insiders.bot/v1/markets?sort=volume_24h \
-H 'Authorization: Bearer ik_live_...'
03
Connect the socket
Open /stream, subscribe to channels, receive frames as they land.
javascript
const ws = new WebSocket(
'wss://data.insiders.bot/stream?key=ik_live_...');
ws.onopen = () => ws.send(JSON.stringify(
{type:'subscribe', channels:['trades','markets:new']}));
ws.onmessage = e => console.log(JSON.parse(e.data));
Authentication
API keys & tiers
Every /v1/* data endpoint requires a valid key
(only POST /v1/keys and /health are open).
Keys look like ik_live_<40 hex>. Send them as either header:
Header · Bearer
http
Authorization: Bearer ik_live_...
Header · X-API-Key
http
X-API-Key: ik_live_...
Free
- Self-serve — mint instantly with your email.
- Full REST + WebSocket access.
- Default tier for every new key.
Partner
- Higher throughput for production integrations.
- Provisioned by the insiders team.
- Contact us to upgrade an existing key.
Rate-limit headers
Returned on every response so you can back off gracefully.
| X-RateLimit-Limit | Your tier's per-minute cap |
| X-RateLimit-Remaining | Requests left in the window |
| X-RateLimit-Reset | Unix seconds until the window resets |
| Retry-After | Seconds to wait (sent on 429) |
Error responses
All errors are clean JSON: {"error":"..."}.
| 401 | missing_api_key · invalid_api_key · revoked_api_key |
| 429 | Rate limit hit, or daily_quota_exceeded. Honour Retry-After. |
| 503 | server_busy — ClickHouse queue full. Retry with backoff. |
| 502/504 | upstream_error · query_timeout — transient upstream trouble. Retry with backoff. |
| 400 | Bad/invalid params. Every input is validated. |
Get a key
Mint a free API key
Self-serve issuance is IP-rate-limited (5 keys / hour). Your key is shown
once — store it somewhere safe. It's saved to this browser so the playground and socket
demo below can reuse it.
⚠
Store this now — it won't be shown again. We only keep a hash. If you lose it, mint a new one.
ik_live_…
REST reference
Endpoints
Base URL https://data.insiders.bot. All responses are
JSON with a meta:{cached, age_sec, took_ms} envelope; amounts are USD
decimals, timestamps epoch ms. Expand any endpoint to see params and run it live against the API.
Not set — the playground & socket demo need a key.
WebSocket
Real-time stream
Connect to
wss://data.insiders.bot/streamwss://data.insiders.bot/stream
with your key (?key= query or a first {"type":"auth"} message
within 5s). On connect you receive a welcome frame with your limits and the
channel list. Max 50 subscriptions per connection.
Channels · subscribe
- tradesglobal firehose
- trades:asset:<id>one asset
- trades:market:<cid>both sides of a market
- trades:user:<wallet>one wallet
- markets:newnewly created markets
Frames · wire protocol
client → server
{"type":"subscribe","channels":["trades","markets:new"]}
{"type":"unsubscribe","channels":["trades"]}
{"type":"auth","key":"ik_live_..."}
{"type":"ping"}
server → client
welcome · ack · pong · error
{"type":"trade","channel":"trades","trade":{...}}
{"type":"market_new","market":{...}}
tap a chip to toggle before connecting
Not connected. Set a key above, then hit Connect to stream live trades.
Frames0
Trades0
New markets0
Rate limits & fair use
Play nice with the firehose
The API runs a single process with exact global counters and a ClickHouse
concurrency backstop — designed so partner traffic can never endanger insiders.bot itself.
Per-minute + daily
Two windows per key: a fixed per-minute cap and a UTC-day quota. Watch the
X-RateLimit-* headers and back off on 429.
ClickHouse backstop
A global semaphore caps concurrent queries. A burst past the queue returns
503 server_busy — retry with exponential backoff.
Cache & paginate
Responses are cached (10s markets, 1–3s trades/holders). Use keyset
next_cursor pagination instead of hammering large offsets.
A note on data freshness: prices, trades,
volumes and trade counts are live (<5s lag). The pnl /
invested fields on /v1/users/:wallet/stats and
the cost_basis / realized_pnl fields on
positions & holders come from a P&L rollup frozen at 2026-03-29 — they are
null where no rollup row exists. Live P&L backfill is on the roadmap.