Crypto data API. Free. All of it.
Labelled EVM wallets and tokens on Ethereum, BNB Chain, Base and HyperEVM, Hyperliquid perps, HL Cohorts (long and short by wallet group, hourly), the Polymarket tape and full L2 book and Predict.fun trades with their wallets and wallet P&L — 121 REST routes, a WebSocket, an MCP server and Parquet archives. One free key, 20,000 requests an hour, nothing billed.
Free = a free API key, 20,000 requests/hour, up to 3 keys, nothing billed. Keyless = archive samples (Polymarket and Hyperliquid) + the Polymarket manifest only.
labelBasis=point_in_time grades each hour with the label the wallet had then — no look-ahead.
→ Backtests, on HL Cohorts
5-min position snapshots
Hyperliquid positions every 5 minutes, kept for 1 year.
→ Position snapshots, on the Hyperliquid whale tracker
Keyset pagination
Pass nextCursor back as cursor. Up to 5,000 rows a page.
→ Paging, with a pager to try, on Hyperliquid AI & API
Parquet archive
Polymarket full L2, one file per stream per UTC day.
→ Order-book events, on Polymarket historical data
WebSocket bars
Closed Hyperliquid bars on hl.candles, wss://stream.vike.io/v1/stream/hl.
→ hl.candles, on Hyperliquid AI & API
MCP for agents
Point an agent at data.vike.io/mcp with the same free key.
→ On-chain AI: every tool and its parameters
Every dataset, live on its product's pages
Each product's pages draw every dataset from a real response captured from the real route, under the real field names.
On-chain datasets are on the On-chain pages →
- Token transfers: fields, real rows and loading code
- Wallet labels: fields, real rows and loading code
- Token holders: fields, real rows and loading code
Hyperliquid datasets are on the Hyperliquid pages →
- Position snapshots: fields, real rows and loading code
- Fills: fields, real rows and loading code
- Candles: fields, real rows and loading code
- Liquidations: fields, real rows and loading code
- Order book: L2 depth and L4 orders with their wallets
- HIP-3 markets: stocks, oil, gold, indices
HL Cohorts datasets are on the HL Cohorts pages →
- Cohort metrics: fields, real rows and loading code
Polymarket datasets are on the Polymarket pages →
- Order-book events: fields, real rows and loading code
- Trades: fields, real rows and loading code
- Market trades: fields, real rows and loading code
- Top-of-book quotes: fields, real rows and loading code
- Markets & settlements: fields, real rows and loading code
- Chainlink prices: fields, real rows and loading code
Historical data: how far back each dataset goes
One 2026 date axis. Each bar starts at the oldest row actually stored for that dataset; click a row to open its card.
Parquet archive: one square per daily partition
The Polymarket Parquet archive, read from the live manifest. A missing day would show as a gap.
Historical crypto data: public endpoints end when the moment passes
A venue API tells you what is true now. Backtests need what was true then — graded the way it looked then.
| Capability | Venue public API | Typical trackers | vike Data API | Show me |
|---|---|---|---|---|
| History depth | Live state, short lookback | Varies | Hyperliquid candles back to the end of 2025-12-31 · 5-min position snapshots kept 1 year · Polymarket archive | show me |
| Snapshot cadence | Live only | Varies | Hyperliquid positions every 5 minutes, kept 1 year | show me |
| Cohort grading without look-ahead | No cohorts | Not stated | labelBasis=point_in_time grades each hour with the label it had then |
show me |
| Every cohort of a coin, hourly, in one call | No cohorts | Varies | Up to 8,760 hours per request | show me |
| Keyset pagination | Varies | Varies | nextCursor → cursor, limit up to 5,000 |
show me |
| Wallet labels with their sources | No labels | Varies | /labels/{address}/provenance shows which source claimed what |
show me |
| Bulk Parquet archive | Varies | Often a paid tier | One file per stream per UTC day · | show me |
| Price | Free, rate-limited | Often a paid tier | Free · 20,000 requests/hour per key · nothing billed | show me |
The vike column is the API's own route signatures, the live catalog and measured counts. The other two columns describe a category, not any one product.
How to get the data: API, archive, samples
API free key
Every dataset, JSON over HTTPS. 20,000 requests an hour per key, keyset-paged.
BASE=https://data.vike.io/v1
curl -H "X-API-KEY: vk_…" \
"$BASE/hyperliquid/ohlcv?symbol=BTC&interval=1h"
- Base:
https://data.vike.io/v1 429+Retry-Afterover either limit (20,000/hour, 200/minute)
Archive free key
Polymarket and Hyperliquid Parquet, one file per stream per UTC day. Downloads do not count against your hourly limit.
# resolve one file (302 → Parquet)
GET /v1/polymarket/archive/url
?date=YYYY-MM-DD&stream=trades
&redirect=1
Samples no key
One complete Polymarket up/down 5-minute market from a recent day, all three streams, regenerated daily. No sign-in, no key.
# no key, no sign-in
curl -O https://data.vike.io/archive/samples/trades.parquet
curl -O https://data.vike.io/archive/manifest.json
- Same columns as the full archive
- Hyperliquid has its own, no key: BTC fills of one hour and BTC positions at one snapshot, at
/archive/hl-samples/ - Build your parser before you sign up
What the free API key includes
Free means free. Here is exactly where the edges are.
included with a free key
- Every route in
/v1/onchain,/v1/hyperliquid,/v1/hl-cohorts,/v1/polymarket, the shared/v1/searchand your own/v1/alerts— 121 in all - 20,000 requests/hour per key (200/minute on
/v1), up to 3 keys per account - Archive downloads — do not count toward the hourly limit. A file needs a key only to ask for its signed link (one ordinary request), and the download itself carries none. A link is valid 7 days; there is no download quota
- Nothing is billed — failed requests included, though they do count toward the hourly limit
- No key at all for
/archive/samples/,/archive/hl-samples/and/archive/manifest.json
not included by design
- No CEX market data. On-chain sources only, by design — no exchange candles, trades, funding boards or order books.
- Polymarket
/eventsand/orderbookbegin on 2026-07-25, the first recorded day; an earlier time answers empty. The Parquet archive holds the same days in bulk. - Over 20,000 requests/hour (or 200/minute on
/v1) you get429withRetry-After: 60 s for the hour, 1 s for the minute. - Hyperliquid position snapshots are kept 1 year, rolling.
Across products: questions no single product answers
A Hyperliquid whale's funding on HyperEVM, Polymarket odds against the Hyperliquid price, one address on every venue: some questions need more than one product. One free key reaches all four, and each study below joins them, with the sentence to ask your AI instead and the code that answers it.
They join On-chain, Hyperliquid, HL Cohorts and Polymarket. Every block was run against the live API on 2026-11-04.
- Daily brief: Hyperliquid cohorts, liquidations, Polymarket smart money and trending tokens
- Hyperliquid whale: who funded it on HyperEVM?
- Liquidation cascade on Hyperliquid: did whales see it coming?
- One address, three venues: Hyperliquid, Polymarket and EVM activity in one report
- Polymarket BTC Up/Down odds vs Hyperliquid BTC price and whale positioning
- Who are the biggest Hyperliquid traders, and which known entities are they?
- Give my AI assistant the whole vike API in one page
- Hyperliquid builder users: what else do they trade on-chain?
Daily brief: Hyperliquid cohorts, liquidations, Polymarket smart money and trending tokens
Four independent calls, one per line of the brief: what the top 1% of Hyperliquid wallets by realized PnL (3x smart) hold, the liquidations of the last 24 hours, where Polymarket smart money went, and which Ethereum tokens smart wallets bought. Two traps: the screener's 24h counts whole UTC days (today and yesterday), and Polymarket's net_inflow adds both outcomes, so read each row's outcomes for a direction.
- Uses
/v1/hl-cohorts/heatmap,/v1/hl-cohorts/segments/{…}/summary,/v1/hyperliquid/liquidations,/v1/hyperliquid/liquidations/risk,/v1/onchain/tokens/screener,/v1/polymarket/smart_money- Verified
- live API, 2026-11-04: 8 calls, all 200
The code
import os
from datetime import datetime, timedelta, timezone
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
SINCE = (datetime.now(timezone.utc) - timedelta(hours=24)).strftime("%Y-%m-%dT%H:%M:%SZ") # 24 hours ago, UTC
# 1. what the top 1% of Hyperliquid wallets by realized PnL hold right now, long against short
cohort = requests.get(
"https://data.vike.io/v1/hl-cohorts/segments/3x_smart/summary?axis=pnl",
headers={"X-API-Key": API_KEY},
).json()
# 2. the liquidations of the last 24 hours, newest first
liqs = requests.get(
f"https://data.vike.io/v1/hyperliquid/liquidations?start={SINCE}&limit=3",
headers={"X-API-Key": API_KEY},
).json()["liquidations"]
# 3. Polymarket markets with the largest net buying by its smart-money cohort over 24 hours
smart = requests.get(
"https://data.vike.io/v1/polymarket/smart_money?mode=flows&hours=24&limit=3",
headers={"X-API-Key": API_KEY},
).json()
# 4. Ethereum tokens ranked by the net inflow of smart wallets
tokens = requests.get(
"https://data.vike.io/v1/onchain/tokens/screener?window=24h&sort=smart_inflow&limit=3",
headers={"X-API-Key": API_KEY},
).json()
print(f"3x smart: ${cohort['total_long_usd']:,.0f} long, ${cohort['total_short_usd']:,.0f} short, bias {cohort['bias']:+.2f}")
for x in liqs:
print("liquidated:", x["liq_ts"], x["symbol"], x["side"], f"${x['size_usd']:,.0f}")
for m in smart:
print("smart money:", m["title"], f"${m['net_inflow']:,.0f}")
print("smart wallets bought:", [t["symbol"] or t["token_address"] for t in tokens])
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# smart-money flows inside Polymarket's Crypto category (category names are exact)
r = requests.get(
"https://data.vike.io/v1/polymarket/smart_money?mode=flows&category=Crypto&hours=24&limit=10",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# every coin against every cohort of the realized-PnL ladder, in one call
r = requests.get(
"https://data.vike.io/v1/hl-cohorts/heatmap?axis=pnl",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# what could be liquidated next: the share of each coin's open interest near its liquidation price
r = requests.get(
"https://data.vike.io/v1/hyperliquid/liquidations/risk?limit=10",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# Base tokens by plain net inflow (sort=smart_inflow is Ethereum only; any other chain is a 400)
r = requests.get(
"https://data.vike.io/v1/onchain/tokens/screener?chain=base&sort=net_inflow&window=24h&limit=10",
headers={"X-API-Key": API_KEY},
)
Hyperliquid whale: who funded it on HyperEVM?
Look the whale up on Hyperliquid, then ask for the earliest inbound transfers of the same address on HyperEVM. When the first HYPE comes from 0x2222…2222 (wallet_type: "system"), the whale moved it over from its own Hyperliquid balance. Many whales never touch HyperEVM: then the answer is found: false, and only the bridge deposits in /ledger say where the money came from.
- Uses
/v1/hyperliquid/leaderboard,/v1/hyperliquid/wallets/{…},/v1/hyperliquid/wallets/{…}/ledger,/v1/onchain/wallets/{…}/first-funder- Verified
- live API, 2026-11-04: 16 calls, all 200
4x whale), 6 had used HyperEVM under the same address and 4 had not. For 5 of the 6 the first HYPE came from 0x2222…2222, the system address that moves HYPE over from Hyperliquid: they funded HyperEVM from their own Hyperliquid balance. The sixth got its first 15 HYPE from another wallet. The example whale, 0xb83d…6e36, holds $94.9M; its first 10 HYPE came from 0x2222…2222 on 2025-06-26.The code
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
WALLET = "0xb83de012dba672c76a7dbbbf3e459cb59d7d6e36"
# 1. is it a whale? equity and cohorts on Hyperliquid
hl = requests.get(
f"https://data.vike.io/v1/hyperliquid/wallets/{WALLET}?window=30d",
headers={"X-API-Key": API_KEY},
).json()
# 2. the earliest inbound HYPE and token transfers of the same address on HyperEVM, with the sender
ff = requests.get(
f"https://data.vike.io/v1/onchain/wallets/{WALLET}/first-funder?chain=hyperevm",
headers={"X-API-Key": API_KEY},
).json()
print(hl["cohorts"]["size"], f"${hl['equity']['account_value']:,.0f}")
if ff["found"]:
first = ff["first_native_in"]
print("first HYPE from", first["from"], first["wallet_type"], first["time"])
else:
print("no HyperEVM activity under this address")
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the ten largest Hyperliquid accounts, each asked who first funded it on HyperEVM
top = requests.get(
"https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&sort=account_value&limit=10",
headers={"X-API-Key": API_KEY},
).json()["traders"]
for t in top:
wallet = t["wallet"]
ff = requests.get(
f"https://data.vike.io/v1/onchain/wallets/{wallet}/first-funder?chain=hyperevm",
headers={"X-API-Key": API_KEY},
).json()
first = ff["first_native_in"] or {}
print(wallet, f"${t['account_value']:,.0f}", ff["found"], first.get("from"), first.get("wallet_type"))
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the earliest inbound ETH and token transfers of the same address on Ethereum (the default chain)
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xb83de012dba672c76a7dbbbf3e459cb59d7d6e36/first-funder",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the very first inbound HYPE, however small (by default below 0.0001 HYPE is skipped)
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xb83de012dba672c76a7dbbbf3e459cb59d7d6e36/first-funder?chain=hyperevm&min_native=0",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# when money reached the Hyperliquid account: its bridge deposits, newest first
r = requests.get(
"https://data.vike.io/v1/hyperliquid/wallets/0xb83de012dba672c76a7dbbbf3e459cb59d7d6e36/ledger?event_type=deposit&limit=100",
headers={"X-API-Key": API_KEY},
)
Liquidation cascade on Hyperliquid: did whales see it coming?
Find the hour of the move with candles, pull the longs liquidated inside it, then read every cohort's long/short bias in the six hours before. bias is (long − short) / (long + short) of the cohort's BTC notional. On the PnL ladder pass labelBasis=point_in_time, or every past hour is graded with today's label; the size ladder is always point-in-time.
- Uses
/v1/hl-cohorts/symbols/{…}/cohort-metrics,/v1/hyperliquid/liquidations,/v1/hyperliquid/ohlcv- Verified
- live API, 2026-11-04: 11 calls, all 200
4x whale (accounts of $10m and up) was already net short, bias -0.38 to -0.47 on $1.18B–1.27B of BTC, while the three smaller whale rungs leaned long (+0.07 to +0.53) and 3x smart, graded point-in-time, sat at -0.15 to -0.20 on $1.73B–1.84B. The largest accounts were short before the drop; they did not turn short into it.The code
import os
from datetime import datetime, timedelta, timezone
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
def iso(t):
return t.strftime("%Y-%m-%dT%H:%M:%SZ")
now = datetime.now(timezone.utc).replace(minute=0, second=0, microsecond=0)
# 1. BTC hourly candles over the last 30 days, and the hour with the largest drop
candles = requests.get(
f"https://data.vike.io/v1/hyperliquid/ohlcv?symbol=BTC&interval=1h&start={iso(now - timedelta(days=30))}&end={iso(now)}&limit=720",
headers={"X-API-Key": API_KEY},
).json()["candles"]
worst = min(candles, key=lambda c: c["close"] / c["open"])
hour = datetime.fromtimestamp(worst["ts"] / 1000, timezone.utc)
print(iso(hour), worst["open"], "->", worst["close"])
# 2. the longs liquidated on BTC inside that hour (up to 5,000 a page; nextCursor says there is more)
liqs = requests.get(
f"https://data.vike.io/v1/hyperliquid/liquidations?symbol=BTC&direction=long&start={iso(hour)}&end={iso(hour + timedelta(hours=1))}&limit=5000",
headers={"X-API-Key": API_KEY},
).json()["liquidations"]
print(len(liqs), "longs liquidated,", f"${sum(x['size_usd'] or 0 for x in liqs):,.0f}")
# 3. every size cohort's BTC positioning, hour by hour, in the six hours before
before = requests.get(
f"https://data.vike.io/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=size&start={iso(hour - timedelta(hours=6))}&end={iso(hour - timedelta(hours=1))}&hours=7",
headers={"X-API-Key": API_KEY},
).json()["metrics"]
for row in before:
if row["cohort"] in ("4x whale", "shrimp"):
print(row["ts"], row["cohort"], f"bias {row['bias']:+.2f}", f"${row['total_position_value']:,.0f}")
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the realized-PnL ladder before the 2026-10-29 20:00 UTC drop, each hour's label as it stood then
r = requests.get(
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=pnl&labelBasis=point_in_time&start=2026-10-29T14:00:00Z&end=2026-10-29T19:00:00Z&hours=7",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# BTC daily candles of the last 30 days: find the day first
r = requests.get(
"https://data.vike.io/v1/hyperliquid/ohlcv?symbol=BTC&interval=1d&limit=30",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# every long liquidated on BTC in the 2026-10-29 20:00 UTC hour, page by page: pass nextCursor back as cursor
URL = "https://data.vike.io/v1/hyperliquid/liquidations?symbol=BTC&direction=long&start=2026-10-29T20:00:00Z&end=2026-10-29T21:00:00Z&limit=1000"
rows, cursor = [], ""
while True:
page = requests.get(
URL + (f"&cursor={cursor}" if cursor else ""),
headers={"X-API-Key": API_KEY},
).json()
rows += page["liquidations"]
cursor = page["nextCursor"]
if not cursor:
break
print(len(rows), "longs,", f"${sum(x['size_usd'] or 0 for x in rows):,.0f}")
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# shorts liquidated on BTC inside the same hour (a squeeze liquidates shorts instead)
r = requests.get(
"https://data.vike.io/v1/hyperliquid/liquidations?symbol=BTC&direction=short&start=2026-10-29T20:00:00Z&end=2026-10-29T21:00:00Z&limit=100",
headers={"X-API-Key": API_KEY},
)
One address, three venues: Hyperliquid, Polymarket and EVM activity in one report
/v1/onchain/wallets/{address}/check says in one call where an address is known: the chains it is active on, its labels, its Hyperliquid account and the Polymarket accounts it owns. Then each venue's own route gives the detail. Polymarket keeps a trader's trades under a proxy wallet, so ask Polymarket for the account the address owns: the address itself usually answers 400.
- Uses
/v1/hyperliquid/wallets/{…},/v1/onchain/wallets/{…},/v1/onchain/wallets/{…}/balances,/v1/onchain/wallets/{…}/check,/v1/polymarket/leaderboard,/v1/polymarket/wallets/{…}- Verified
- live API, 2026-11-04: 8 calls, all 200
2x shark, 3x smart, a $769k account, $123M traded in 30 days) and owns one Polymarket account, 0xb1a2…372a, with $3.6M of volume. Asked for the address itself, Polymarket answers 400: the trades sit under the proxy, which the check names.The code
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
ADDRESS = "0xf3dcaeb909d3d17318c0908a1ec0ca31321e1672"
# 1. everything held on the address in one call: chains, labels, its Hyperliquid account, the Polymarket accounts it owns
check = requests.get(
f"https://data.vike.io/v1/onchain/wallets/{ADDRESS}/check",
headers={"X-API-Key": API_KEY},
).json()
print("\n".join(check["summary"]))
# 2. the address on Hyperliquid: cohorts, 30-day metrics, lifetime flows
hl = requests.get(
f"https://data.vike.io/v1/hyperliquid/wallets/{ADDRESS}?window=30d",
headers={"X-API-Key": API_KEY},
).json()
# 3. on Polymarket a trader is its proxy wallet: the account this address owns
proxy = check["polymarket"]["owned"][0]["address"]
pm = requests.get(
f"https://data.vike.io/v1/polymarket/wallets/{proxy}?window=30d",
headers={"X-API-Key": API_KEY},
).json()
# 4. the address on the EVM chains: volume, flows and transfer counts in five windows
evm = requests.get(
f"https://data.vike.io/v1/onchain/wallets/{ADDRESS}",
headers={"X-API-Key": API_KEY},
).json()
print("Hyperliquid:", hl["cohorts"], f"30-day volume ${hl['metrics']['total_volume']:,.0f}")
print("Polymarket:", proxy, f"volume ${pm['volume_all_usd']:,.0f}, {pm['markets_count']} markets")
print("EVM:", evm["chain"], evm["all"]["tx_count"], "transfers since", evm["all"]["first_seen"])
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the other way round: who owns a Polymarket account (polymarket.account.owner)
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xb1a279adb096d316b1b168993e8ed976d3cd372a/check",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# start from Polymarket's top Crypto traders by realized P&L, then check each proxy_wallet
r = requests.get(
"https://data.vike.io/v1/polymarket/leaderboard?category=Crypto&limit=5",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the address on HyperEVM only (without chain, the route picks Ethereum or BSC first)
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xf3dcaeb909d3d17318c0908a1ec0ca31321e1672?chain=hyperevm",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# what it holds now on Ethereum, BSC, Base and HyperEVM, read from the chains at request time
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xf3dcaeb909d3d17318c0908a1ec0ca31321e1672/balances",
headers={"X-API-Key": API_KEY},
)
Polymarket BTC Up/Down odds vs Hyperliquid BTC price and whale positioning
Take the Up token of a daily Polymarket "Bitcoin Up or Down" market (its price is the market's probability of Up), pull its hourly candles beside Hyperliquid's BTC candles and cohort matrix, and join the three on the hour. Polymarket's from and to are epoch milliseconds, both inclusive (a date string is ignored); Hyperliquid's end is exclusive. The cohort matrix serves settled hours only, one to two hours behind the clock.
- Uses
/v1/hl-cohorts/symbols/{…}/cohort-metrics,/v1/hyperliquid/ohlcv,/v1/polymarket/markets,/v1/polymarket/ohlcv,/v1/polymarket/settlements/bulk,/v1/polymarket/settlements/{…}- Verified
- live API, 2026-11-04: 8 calls, all 200
4x whale kept its BTC short, bias -0.62 to -0.65 on $0.91B–0.93B, and shrimp leaned long (+0.34 to +0.45): the whales' positioning did not follow the odds.The code
import os
from datetime import datetime, timezone
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
CONDITION = "0x6f9a955c14d5a37eeb59d02ac17a72072a5140ad607df0954f56afd92ac0c567" # Bitcoin Up or Down on November 3?
# 1. the market's outcomes and token ids, in the same order (an array of 0 or 1 rows)
market = requests.get(
f"https://data.vike.io/v1/polymarket/settlements/{CONDITION}",
headers={"X-API-Key": API_KEY},
).json()[0]
up = market["token_ids"][market["outcomes"].index("Up")]
# 2. hourly candles of the Up token from 13:00 to 17:00 UTC: the close is the probability of Up
odds = requests.get(
f"https://data.vike.io/v1/polymarket/ohlcv?token_id={up}&interval=1h&from=1793710800000&to=1793725200000&limit=24",
headers={"X-API-Key": API_KEY},
).json()
# 3. BTC hourly candles from Hyperliquid fills over the same hours
btc = requests.get(
"https://data.vike.io/v1/hyperliquid/ohlcv?symbol=BTC&interval=1h&start=2026-11-03T13:00:00Z&end=2026-11-03T18:00:00Z&limit=24",
headers={"X-API-Key": API_KEY},
).json()["candles"]
# 4. every size cohort's BTC long/short bias, hour by hour
cohorts = requests.get(
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=size&start=2026-11-03T13:00:00Z&end=2026-11-03T17:00:00Z&hours=6",
headers={"X-API-Key": API_KEY},
).json()["metrics"]
price = {c["ts"]: c["close"] for c in btc}
whale = {r["ts"]: r["bias"] for r in cohorts if r["cohort"] == "4x whale"}
for c in odds:
hour = datetime.fromtimestamp(c["ts"] / 1000, timezone.utc)
print(hour.strftime("%H:%M"), "Up", c["close"], "BTC", price.get(c["ts"]), "4x whale bias", whale.get(hour.isoformat()))
print("resolved:", market["winning_outcome"])
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# daily Bitcoin Up or Down markets by slug (the list has condition_id and token_ids, not outcome names)
r = requests.get(
"https://data.vike.io/v1/polymarket/markets?query=bitcoin-up-or-down-on-november&limit=5",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# every settled Bitcoin Up or Down market since 2026-10-29 00:00 UTC, oldest resolution first
r = requests.get(
"https://data.vike.io/v1/polymarket/settlements/bulk?slug_prefix=bitcoin-up-or-down-on-&from_ms=1793232000000&limit=30",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# 5-minute candles of the Up token in its last trading hour
r = requests.get(
"https://data.vike.io/v1/polymarket/ohlcv?token_id=95158707236219321968836069579689552308763368946434445401112860333517064530135&interval=5m&from=1793721600000&to=1793725200000&limit=12",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the realized-PnL ladder over the same hours, each hour's label as it stood then
r = requests.get(
"https://data.vike.io/v1/hl-cohorts/symbols/BTC/cohort-metrics?axis=pnl&labelBasis=point_in_time&start=2026-11-03T13:00:00Z&end=2026-11-03T17:00:00Z&hours=6",
headers={"X-API-Key": API_KEY},
)
Who are the biggest Hyperliquid traders, and which known entities are they?
Rank Hyperliquid wallets on the leaderboard, then send the addresses to the batch label route: up to 100 addresses in one call, in input order, with entity, wallet type, risk flag and 30-day flows. A Hyperliquid account is an EVM address, so the same address works on both. An unlabelled trader comes back found: false with every field null, never 0, and that is the common case at the top of the board.
- Uses
/v1/hyperliquid/leaderboard,/v1/onchain/labels/batch,/v1/onchain/labels/{…}/provenance- Verified
- live API, 2026-11-04: 6 calls, all 200
binance, wallet type cex) and 11 are unnamed user wallets. None of the 100 has a HyperEVM label. 17 of the 100 showed an account value of 0: realized PnL counts closed trades, so a wallet can top the board after moving its money out.The code
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# 1. the 100 Hyperliquid wallets with the most realized PnL over 30 days
top = requests.get(
"https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&limit=100",
headers={"X-API-Key": API_KEY},
).json()["traders"]
# 2. entity and wallet type of all 100 on Ethereum, in one call
labels = requests.post(
f"https://data.vike.io/v1/onchain/labels/batch?chain=ethereum&addresses={','.join(t['wallet'] for t in top)}",
headers={"X-API-Key": API_KEY},
).json()
for t, label in zip(top, labels):
if label["found"]:
print(t["rank"], t["wallet"], label["entity"], label["wallet_type"], f"${t['total_realized_pnl']:,.0f}")
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the same 100 against the HyperEVM labels, where a Hyperliquid account also lives
top = requests.get(
"https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&limit=100",
headers={"X-API-Key": API_KEY},
).json()["traders"]
labels = requests.post(
f"https://data.vike.io/v1/onchain/labels/batch?chain=hyperevm&addresses={','.join(t['wallet'] for t in top)}",
headers={"X-API-Key": API_KEY},
).json()
print(sum(label["found"] for label in labels), "of", len(labels), "labelled on HyperEVM")
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# biggest by size instead: the 25 largest accounts with at least 3 trades closed in the window
r = requests.get(
"https://data.vike.io/v1/hyperliquid/leaderboard?window=30d&sort=account_value&limit=25",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# who says so: every source's claim about one labelled wallet
r = requests.get(
"https://data.vike.io/v1/onchain/labels/0x020ca66c30bec2c4fe3861a94e4db4a498a35872/provenance",
headers={"X-API-Key": API_KEY},
)
Give my AI assistant the whole vike API in one page
/v1/openapi.json is the live OpenAPI document of the Data API: every /v1 route, its parameters, their allowed values and the auth it takes, in one JSON file generated from the running service. Save it and attach it to the chat. It takes your key; the same document is published with no key at https://vike.io/data/openapi.json. The spec says what a route accepts, not the traps around it: those are on each /data page, whose markdown twin is the page URL plus .md. An agent that can call tools does better with the MCP server.
- Uses
/v1/openapi.json- Verified
- live API, 2026-11-04: 5 calls, all 200
The code
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the whole /v1 surface as one OpenAPI file, saved to disk
r = requests.get(
"https://data.vike.io/v1/openapi.json",
headers={"X-API-Key": API_KEY},
)
with open("openapi.json", "wb") as f:
f.write(r.content)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# every /v1 path, one per line: a short list that fits in any prompt
r = requests.get(
"https://data.vike.io/v1/openapi.json",
headers={"X-API-Key": API_KEY},
)
print("\n".join(sorted(r.json()["paths"])))
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# one product only: paths start with its namespace (onchain, hyperliquid, hl-cohorts, polymarket)
r = requests.get(
"https://data.vike.io/v1/openapi.json",
headers={"X-API-Key": API_KEY},
)
paths = {p: v for p, v in r.json()["paths"].items() if p.split("/")[2] == "polymarket"}
print(len(paths), "Polymarket routes")
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# one route in full: give the assistant only the route it is working on
r = requests.get(
"https://data.vike.io/v1/openapi.json",
headers={"X-API-Key": API_KEY},
)
paths = r.json()["paths"]
print(paths[next(p for p in paths if p.endswith("/first-funder"))])
import requests
# the published copy, no key needed: for an assistant that fetches URLs on its own
r = requests.get("https://vike.io/data/openapi.json")
print(r.json()["info"]["title"], len(r.json()["paths"]), "paths")
Hyperliquid builder users: what else do they trade on-chain?
Take the largest Hyperliquid builder by 30-day volume, list the wallets that route orders through it, and send each wallet to the on-chain summary: a Hyperliquid account is an EVM address. One call per user. chain: null with zeros means no priced transfer on Ethereum, BSC, Base or HyperEVM, not nothing anywhere; tokens_traded is a lifetime count, so read activity per window from tx_count.
- Uses
/v1/hyperliquid/builders,/v1/hyperliquid/builders/{…}/users,/v1/onchain/wallets/{…},/v1/onchain/wallets/{…}/balances,/v1/onchain/wallets/{…}/transactions- Verified
- live API, 2026-11-04: 17 calls, all 200
The code
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# 1. the largest builder by 30-day volume
builder = requests.get(
"https://data.vike.io/v1/hyperliquid/builders?window=30d&sort=volume&limit=1",
headers={"X-API-Key": API_KEY},
).json()["builders"][0]["builder"]
# 2. its top 10 users by 30-day volume
users = requests.get(
f"https://data.vike.io/v1/hyperliquid/builders/{builder}/users?window=30d&limit=10",
headers={"X-API-Key": API_KEY},
).json()["users"]
# 3. each user's transfer activity: Ethereum and BSC, then Base and HyperEVM if those know nothing
for u in users:
wallet = u["wallet"]
s = requests.get(
f"https://data.vike.io/v1/onchain/wallets/{wallet}",
headers={"X-API-Key": API_KEY},
).json()
print(wallet, f"builder volume ${u['volume_usd']:,.0f}", s["chain"], s["all"]["tx_count"], s["all"]["first_seen"])
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# what one of those users holds now on Ethereum, BSC, Base and HyperEVM
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xbf732ea04197942783e34730ed6e0f6099575d58/balances",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# which tokens it moved on Ethereum in the last 90 days, newest first
r = requests.get(
"https://data.vike.io/v1/onchain/wallets/0xbf732ea04197942783e34730ed6e0f6099575d58/transactions?chain=ethereum&days=90&limit=50",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the builder's most profitable users over 30 days (their own realized result through it)
r = requests.get(
"https://data.vike.io/v1/hyperliquid/builders/0xe966a12bf7b93838096e4519a684519ab22df618/users?window=30d&sort=pnl&limit=20",
headers={"X-API-Key": API_KEY},
)
import os
import requests
API_KEY = os.environ["VIKE_API_KEY"] # your key, read from the environment
# the next page of users: pass the first page's nextCursor back as cursor
URL = "https://data.vike.io/v1/hyperliquid/builders/0xe966a12bf7b93838096e4519a684519ab22df618/users?window=30d&limit=10"
first = requests.get(URL, headers={"X-API-Key": API_KEY}).json()
r = requests.get(
URL + f"&cursor={first['nextCursor']}",
headers={"X-API-Key": API_KEY},
)