For developers
Build whale-tracking bots on clean Polymarket data
Clean data, farmer-filtered, NegRisk-corrected. Public REST API for builders. Free tier for community bots, Premium $19.99/mo for production loads.
Free tier on public endpoints ยท Premium $19.99/mo for 600 req/min ยท Time to first request: 60 seconds
Live API example (copy-paste, returns real data):
$ curl -s "https://orcalayer.com/api/leaderboard?period=24h&filter=smart" \
| jq '.traders[0]'
{
"wallet": "0x2005d16a84ceefa912d4e380cd32e7ff827875ea",
"display_name": "RN1",
"win_rate": 55.1,
"market_win_rate": 67.2,
"total_pnl": 9902400,
"roi": 2.5,
"is_smart": true,
"role_profile": "Whale"
}MIT-licensed, built in the open. Clone an example, wire the SDK into your stack, or drop our data straight into your AI client.
orcalayer-mcpโ
Model Context Protocol server. Pipe live whale trades, smart-money flags and wallet PnL straight into Claude, Cursor, or any MCP client.
orcalayer-pythonโ
Official Python client for the OrcaLayer API. Anonymous access to public endpoints; drop in a Premium key for premium data and higher limits.
whale-watchlist-monitorโ
Reference bot. Watches a wallet list and alerts on new, closed and resized positions โ Telegram, Discord or stdout.
polymarket-backtest-cookbookโ
Ready-to-run notebooks to backtest copy-trade strategies on Polymarket smart-money data โ follow one whale, follow the smart-money consensus, or compare raw vs farmer-filtered leaderboards. Public leaderboard is keyless; full backtests use a Premium API key.
orcalayer-skillโ
Agent skill (SKILL.md) that teaches Claude Code, Cowork or Desktop to do Polymarket smart-money research with OrcaLayer โ farmer-filtered leaderboards, NegRisk-corrected win rates, per-wallet backtests and the ISW Ukraine overlay. Same capabilities as the MCP server, with no server to run.
What you can build
Trading bot
Auto-execute trades when smart-money consensus crosses your threshold. Poll the recent-trades endpoint, react to position shifts. Premium tier provides 600 req/min for real-time strategies. NegRisk correction built into wallet responses.
Community alerts bot
Notify your Discord or Telegram community when whales move $50K+ on Polymarket. Filter by category, wallet, or threshold. The free public stream covers most community-sized bots; Premium handles high-frequency setups.
Custom dashboard
Embed Polymarket whale data on your site with a handful of fetches. Track specific wallets, markets, or categories. JSON responses, CORS-friendly for browser clients. Works with React, Vue, plain HTML.
Research notebook
Jupyter or Colab analysis: fetch resolved markets, calculate true returns minus hedge offsets, identify patterns in whale entry timing. Public methodology, reproducible by anyone โ academic researchers welcome.
Data you can pull
Dozens of endpoints, farmer-filtered and NegRisk-corrected. A taste below โ full reference at /docs/api.
Free ยท no key
- โข Wallet profiles, PnL, positions, similar traders
- โข Market search + hot markets with whale skew
- โข Farmer-filtered leaderboard
- โข Smart-money flow by category
- โข Whale clusters, top movers, 24h whale volume
Premium ยท $19.99/mo
- โข Conviction clusters โ where smart money agrees
- โข AI wallet analysis โ an LLM dossier per wallet
- โข Whale backtest + full resolved history
- โข Big-position alerts + whale-alert feed
- โข Per-trade history with date-range slicing
- โข Live whale trade feed (SSE) โ sub-second relay with live
settlement_type(100.000% verified on MINT/MERGE) - โข Indexed trade stream (SSE) with
entry_typeMINT/MERGE flags NEW - โข ISW territory webhooks โ push, not poll
Two layers โ pick the right one
Positions & performance (overview, positions, closed, whale backtest, leaderboard) are netted, NegRisk-corrected and human-readable โ use these for copy-trade analysis and dashboards. The raw per-wallet trade feed (/wallet/{addr}/trades) is the advanced layer: raw fills tagged with entry_type โ settlement mechanics, not trader intent (MINT = matched an opposite-side buyer, the protocol minted the pair between the two counterparties; MERGE = two sells matched, pair burned to USDC; COMPLEMENTARY = matched an existing holder; null = legacy V1). ~80% of fills are MINT. side is the CTF operation direction, not an exchange buy/sell. Reach for it only when you want event-level granularity โ full details in the API reference.
Two live streams, pick by need. Raw relay (GET /api/public/v1/live/trades, SSE, Premium) is the speed path: sub-second + a fixed 700ms buffer, and since 22.07 every event carries settlement_type (MINT/MERGE/COMPLEMENTARY/null) derived live by tx-grouping โ shadow-verified 100.000% accurate on MINT/MERGE (54,470 tx, zero mislabels; coverage 91.8%, null = honest refusal). Indexed stream (GET /api/public/v1/live/trades-indexed?types=mint,merge) is the completeness path: per-fill entry_type from on-chain OrdersMatched, both counterparties and market metadata on every fill, typically 20โ45 seconds after on-chain confirmation โ the server-side types filter accepts mint, merge, complementary. Both labels are settlement mechanics, not trader intent โ a MINT means the order matched an opposite-side buyer, not that the wallet deliberately split collateral. Reading it correctly matters: a MINT with SELL on YES is an entry into NO, not an exit. Both are live-only โ no replay on reconnect, so keep a REST poll as your fallback.
Start building
Python SDK
Official client for the OrcaLayer API. Anonymous access works out of the box; add a Premium key for higher limits and Premium endpoints.
Install and first call
pip install orcalayer
from orcalayer import OrcaLayer
ol = OrcaLayer() # or OrcaLayer(api_key="YOUR_KEY")
print(ol.leaderboard(limit=5))Source: github.com/orcalayer/orcalayer-python ยท Package: pypi.org/project/orcalayer ยท Example project: whale-watchlist-monitor โ watches a wallet list and alerts on new, closed and resized positions (Telegram, Discord or stdout).
Prefer raw HTTP? Three Python snippets โ each runs against the live API. Replace the wallet/condition_id with your target.
Track a specific whale (full profile + smart-money flag)
import requests
WALLET = "0x7f3c8979d0afa00007bae4747d5347122af05613"
# /api/v2/wallet/{addr} is a public endpoint โ no API key required
r = requests.get(f"https://orcalayer.com/api/v2/wallet/{WALLET}")
data = r.json()
# Response is composed: profile / overview / stats / categories
profile = data["profile"]
stats = data["stats"]
overview = data["overview"]
print(f"Name: {profile['name'] or profile['pseudonym']}")
print(f"Total PnL: ${stats['total_pnl']:,.0f}")
print(f"Win rate: {stats['win_rate']:.1%}")
print(f"Smart Money flag: {stats['is_smart']}")
print(f"Markets traded: {overview['total_markets']}")
print(f"Median hold: {overview['median_hold_days']} days")List hot markets with whale skew
import requests
# Markets with whale positioning (public endpoint โ no key needed)
r = requests.get("https://orcalayer.com/api/v2/markets/search?limit=10")
markets = r.json()["markets"]
for m in markets:
skew = m["whales_yes"] - m["whales_no"]
print(
f"{m['question'][:60]:60s} "
f"YES={m['price_yes']:.2f} "
f"whales={m['whales_yes'] + m['whales_no']:4d} "
f"skew={skew:+d}"
)Poll whale trades โ bot loop
import requests
import time
from collections import deque
API_KEY = "your_premium_key" # premium /api/v2 endpoints use the X-API-Key header
# Bounded de-dup: remember the last 10k tx hashes, not every hash forever.
seen = set()
seen_order = deque(maxlen=10_000)
while True:
try:
r = requests.get(
"https://orcalayer.com/api/v2/whales/recent-trades",
headers={"X-API-Key": API_KEY},
timeout=15,
)
r.raise_for_status()
trades = r.json()
except requests.RequestException as exc:
print(f"request failed, retrying in 30s: {exc}")
time.sleep(30)
continue
for trade in trades:
key = trade["tx_hash"]
if key in seen:
continue
if len(seen_order) == seen_order.maxlen:
seen.discard(seen_order[0]) # evict oldest as the ring rolls over
seen_order.append(key)
seen.add(key)
# Filter: $50K+ trades from named whales
if trade["size_usd"] >= 50_000 and trade.get("whale_name"):
print(
f"WHALE: {trade['whale_name']} "
f"${trade['size_usd']:,.0f} {trade['side']} "
f"@ {trade['price']:.2f} on '{trade['question'][:50]}'"
)
# โ forward to Discord / Telegram / Slack webhook
time.sleep(30) # Premium tier โ well under 600 req/min budgetLive indexed trade stream โ MINT/MERGE events (SSE, Premium)
# Connect with your existing Premium API key โ no extra setup.
# types filter: mint, merge, complementary; omit for all classified fills.
curl -N -H "Authorization: Bearer YOUR_PREMIUM_KEY" \
"https://orcalayer.com/api/public/v1/live/trades-indexed?types=mint,merge"
# Each event: entry_type, maker, taker, price, usd_amount, market metadata.
# A MINT with SELL on YES = the wallet ENTERED NO โ not an exit.
# Live-only (no replay on reconnect) โ keep a REST poll as fallback.
# Typical latency: 20-45s after on-chain confirmation.Authentication
Most read endpoints (wallet profiles, market search, leaderboard) are public โ make GET requests directly, no key. Paid endpoints take an API key in a header. The /api/public/v1/* namespace accepts either a Bearer token or X-API-Key; premium /api/v2/* endpoints (whale-alerts, whales/recent-trades, whale-flips, wallet trades) require the X-API-Key header:
# /api/public/v1/* โ either header works:
Authorization: Bearer YOUR_API_KEY
X-API-Key: YOUR_API_KEY
# premium /api/v2/* โ use X-API-Key:
X-API-Key: YOUR_API_KEYGet your key after upgrading at /pricing. Keys can be rotated anytime; they expire only if you request rotation.
Rate limits
| Tier | Requests/minute | Endpoint scope |
|---|---|---|
| Free | ~200 / min (Cloudflare-throttled) | Public reads (wallet, search, leaderboard) |
| Premium | 600 / min default | + key-gated (public/v1, premium v2) |
Rate limit response: HTTP 429. Higher per-minute caps available for heavy production usage โ contact support.
Choose your tier
Free
$0/month
- โข Public reads: wallets, markets, leaderboard
- โข No authentication, no card
- โข Cloudflare-throttled burst-friendly
- โข Full public methodology
Best for developers
Premium
$19.99/month
- โข 600 requests/minute default
- โข All key-gated endpoints (public/v1 + premium v2)
- โข API key auth (Bearer or X-API-Key)
- โข Higher caps on request
- โข Priority support <24h
Looking for the full dashboard without API? See /pricing for the Pro tier ($9.99/mo).
OrcaLayer API vs Polymarket native API
We use Polymarket as our source. We add: methodology, filtering, classifications, aggregations. Use both โ we layer, we do not replace.
| Feature | OrcaLayer API | Polymarket native |
|---|---|---|
| Farmer detection | Built-in is_smart flag (farmers excluded from Smart classification) | โ |
| NegRisk correction | Auto-applied to wallet PnL | โ |
| Smart-money aggregation | Whale head-count, conviction clusters, whale flips | โ |
| ISW Ukraine overlay | Live frontline distance per market | Not in scope |
| Wallet PnL | Single endpoint, NegRisk-corrected | Multiple calls + manual reconciliation |
| OpenAPI spec | /api/openapi.json (auto-synced) | Sparse, read client SDK |
| Authentication | API key (Bearer or X-API-Key) or open public | Polygon wallet sign or none |
| Methodology | Public, full disclosure at /methodology | Proprietary |
| Maker-side trades | Both sides indexed by default | Hidden by default (takerOnly=true) |
| Trade-history depth | Complete indexed history | Offset capped at 10,000 |
| History by date range | Per-market date slice (full rolling out) | No date filter on /trades |
Full side-by-side breakdown: OrcaLayer vs Polymarket Data API โ โ maker visibility, the 10,000 offset ceiling, and full-history access compared in detail.
Developer FAQ
What languages can I use to query the OrcaLayer API?
Any language with HTTP client support. We provide Python examples; cURL, JavaScript/Node.js, Go, Rust, Ruby, PHP, and Java all work the same way. Responses are plain JSON, no SDK required.
How fresh is the OrcaLayer API data?
Whale trades and live markets refresh under 30 seconds end-to-end from Polygon block to API response. Wallet stats refresh within minutes after each trade. ISW Ukraine territory data refreshes daily after ISW publishes: we probe ArcGIS every ~5 seconds during the 13:00โ19:00 UTC publish window (every 30s otherwise) and pull the new map the moment a layer moves.
Can I use OrcaLayer API for commercial trading bots?
Yes. Both Free (public endpoints) and Premium tiers allow commercial use. We do not take a cut of trades, do not require disclosure, and do not restrict use case. The only limit is rate.
What rate limits apply on Free tier?
Public read endpoints (wallet profiles, market search, leaderboard) are open to anonymous requests, Cloudflare-throttled per IP. Premium tier provides 600 requests/minute with no daily cap. Note: some /api/v2/* endpoints (whale-alerts, recent whale trades, whale-flips) are key-gated even though they live under v2 โ see the Authentication section above.
Does the API include farmer-filtered data by default?
Wallet responses include the is_smart flag (and exclude wallets that fail the farmer test from Smart Money classification). Leaderboard endpoints return the farmer-filtered ranking. Raw wallet data is available too if you want to apply your own filter. Methodology documented at orcalayer.com/methodology.
How do I authenticate API requests?
It depends on the endpoint. Public read endpoints (e.g. /api/v2/wallet/{addr}, /api/v2/markets/search, /api/leaderboard) need no key. Paid endpoints take a key in a header: the /api/public/v1/* namespace accepts either 'Authorization: Bearer YOUR_KEY' or 'X-API-Key: YOUR_KEY'; premium /api/v2/* endpoints (whale-alerts, whales/recent-trades, whale-flips, wallet trades, market whale-trades) require the 'X-API-Key: YOUR_KEY' header. Get your key at orcalayer.com/pricing.
Are there official client libraries?
Yes. There is an official Python SDK (pip install orcalayer, MIT-licensed, github.com/orcalayer/orcalayer-python), an MCP server for AI agents (uvx orcalayer-mcp), and an agent skill. For other languages the API is plain REST plus JSON, so any HTTP client works (Node.js fetch, Go net/http, cURL).
What happens if Polymarket changes their data model?
We adapt and ship updated endpoints under /api/v3/ when needed. Within v2, we promise no breaking changes โ only additive fields. Customers on Premium tier get advance notice via email; everyone sees the changelog at orcalayer.com/docs/api.
Why am I getting 404 on an endpoint?
Check the exact path. Whale flips is /api/v2/whale-flips (not /whale/flips). The leaderboard is /api/leaderboard. Batch wallet lookups are POST /api/public/v1/wallets/overview and /wallets/positions (not /wallets/batch/overview). All data lives under /api/v2/* and /api/public/v1/* โ the only path under /api/v1/ is the health check (/api/v1/health). The authoritative path list is the OpenAPI spec at orcalayer.com/api/openapi.json.
Built with OrcaLayer
Coming soon: showcase of bots, dashboards, and research projects built on the OrcaLayer API.
Built something? Reach out at @orcalayer.
Coming next
- More aggregation endpoints โ sector-level smart-money flow, multi-wallet correlation
- WebSocket transport โ an alternative to the live SSE push feed (Premium)
- TypeScript / JavaScript SDK โ a typed client for Node and browser apps (the Python SDK already ships:
pip install orcalayer)
Subscribe to our Telegram channel @orcalayer for API changes and new endpoint announcements.
Start building today
Get your API key โ60 seconds from sign-up to first API call. No credit card required for Free tier.
