Data API changelog
Every change a caller can see in the REST API, the MCP server, the WebSocket and the Parquet archive, newest first: 186 entries, the latest in 2026-11. The reference itself is on the API page.
This page records changes a caller can see: /v1 REST routes added and removed, MCP tools added and fixed, response fields that appeared or changed meaning, error and rate-limit behaviour, and the auth and metering rules on the bulk Parquet archive. Newest first.
It does not cover the Vike trading platform — that is the Trader changelog — nor the website's own /api/* and HTML routes, nor internal plumbing no key-holder can call.
The API is versioned by path prefix. /v1 is the only version that has ever been published, and, as the marked entries below record, routes have been removed and parameters have started returning 400 inside that prefix rather than behind a new one. Do not assume /v1 is frozen — scan the markers.
⚠ BREAKING marks an entry that required a caller to change something. An entry tagged ⚠ BREAKING removed an endpoint, made a parameter start returning 400, changed the shape of a response, or added a credential requirement where there was none. Everything else is additive, or a fix to an answer that was wrong.
Entries are written from the change that actually landed rather than from probing the deployed API, so a fix is dated when it shipped, not when someone noticed it.
Every entry starts with a tag in brackets, so you can scan for the part you use: the slug of a dataset page when the change is about one dataset (hyperliquid/cohort-metrics, polymarket/markets), otherwise api (REST routes, response shapes, the spec), mcp (the tool server and its auth), archive (the Parquet archive) or limits (rate limits and metering). An entry that touches several datasets takes the general tag.
2026-11
- [api] 2026-11-03 · ⚠ BREAKING · The API needs a confirmed e-mail address — an API key or OAuth token of an account whose e-mail address is not confirmed is refused with HTTP 403 and code
EMAIL_UNCONFIRMEDon/v1, the archive,/mcpand the event stream (an open stream is closed). Confirm the address (the link is in our e-mail, a new one is at vike.io/account) and the same credential works again within 45 seconds. Accounts signed up with Google are confirmed already. Limits and errors - [api] 2026-11-03 · A transfer alert can take a size in tokens:
min_amount—alerts_create,alerts_editandPOST /v1/alerts/rules(and its/edit) takemin_amount, a floor in whole tokens of the alert'stoken_symbol(it needs one):1000000withUSDTfires on a transfer of at least a million USDT, priced or not. Withmin_value_usdormax_value_usdas well, both must hold. Rules list it asmin_amount. Additive. Alerts - [api] 2026-11-03 · On-chain transfer events wait for the price —
chain.transfersstream events and transfer alerts now go out once our pricing has run over the transfer's block, about 1 to 6 minutes after the block (stream events came 0 to 5 minutes after it, practically all unpriced; alerts 10 minutes or more).value_usdandpricedare now filled for every token we have a price for, somin_usdon the stream andmin_value_usdon an alert see them. A token with no price still goes out, unpriced. If pricing stops for 15 minutes, both stop waiting and send transfers unpriced until it runs again. Event stream channels and filters - [api] 2026-11-02 · At most 200 active alerts per account — any mix of on-chain, Hyperliquid and Polymarket alerts; the 201st is refused when it is created or resumed, over REST, MCP and the website alike. Pausing is free. Alerts
- [api] 2026-11-02 · Four more event stream channels;
hl.positionscarries leverage, liquidation price and tags — onwss://stream.vike.io:hl.top_positions(a position entering, leaving or moving in the top 10 of a coin, at each position capture) andhl.closed_trades(each closed round trip, as the REST trades list has it) on/v1/stream/hl;hl.cohort_leverage(each cohort's hourly perp bias and exposure against its equity) on/v1/stream/hl-cohorts;pm.positions(each Polymarket trade as the change it made to the wallet's position:action,shares_before,shares,avg_price) on/v1/stream/polymarket.hl.positionsevents gainleverage,liquidation_pxandposition_ts(the position at our last capture) andlabels.tags(the wallet's trader tags), with the filtersmin_leverageandtag. Additive: an existing subscription sees the same events, with the new keys. Event stream channels and filters - [api] 2026-11-02 ·
hl.fillssends its first fills within about ten seconds — a subscribe tohl.fills(orhl.positions) when nobody was subscribed used to wait until our store held a fill made after the subscribe, about 80 seconds while our Hyperliquid node runs behind. The channel now starts from the newest fill already stored, so the first fills come with the next batch that reaches the store. Nothing older is sent, and each fill is as late as fills in this stream always are. Event stream channels and filters - [api] 2026-11-02 · New: the Alerts API, eight routes, and the alert feed in the spec — every alert MCP tool is now also a REST route under
/v1/alerts, on the same code, with the same input and at the same price: list, create, change and delete your rules (GETandPOST /v1/alerts/rules,POST /v1/alerts/rules/{alert_id}/editand/delete), list your channels, register a webhook, rotate its secret and send it the test event again (GET /v1/alerts/channels,POST /v1/alerts/channels/webhooks,/{channel_id}/rotate-secret,/{channel_id}/test). A JSON body is the tool's input.GET /v1/alerts/eventsandPOST /v1/alerts/deliveries/{delivery_id}/resendjoin them in the OpenAPI document. A transfer rule on a token its chain does not have (BTConeth) is now refused, over REST, MCP and the website alike, with the close matches it does have (WBTC): it could never fire. Alerts API - [api] 2026-11-02 ·
hl_walletalerts: one event per position change, and e-mail — a followed wallet's fills that one check of the alert engine reads (about every 10 seconds) are merged into ONEfillevent per coin, action and side, with the new keyfills(how many);size_usd,size_token,closed_pnlandfeebecome their totals andpricetheir size-weighted average, and the rule'smin_value_usdapplies to that total. Every key an event had keeps its name and type, so a reader ofGET /v1/alerts/eventsor of a webhook needs no change; there are fewer events. Anhl_walletrule can now also e-mail the account address (channels: ["email"]inalerts_create/alerts_edit): one mail per check at most. E-mail stays refused for the other Hyperliquid types. Alert feed - [api] 2026-11-02 ·
hl.liq_risksends the positions already in the zone when it starts — the channel's first position capture after it starts, or starts again after nobody was subscribed, used to record the zone without sending anything, so the first event came a capture later (about 24 minutes after a subscribe). That capture now sends every position already in the zone (about 300 on 2026-11-02) with the new fieldprev: null; a position that enters later carriesprev: "out". Event stream channels and filters - [api] 2026-11-02 · New:
GET /v1/search, the vike.io search box as one route — a name, symbol, address, ENS name or pasted link in; tokens, Hyperliquid markets, traders, vaults and builders, labelled wallets and entities on four chains, Polymarket wallets and markets, anddid_you_meanout, at mostlimit(1 to 20, default 5) rows per section. A token's price and 24-hour change are Hyperliquid's, ornull; unlike the website's box it offers no centralised exchange's listing or price. It is shared by the four namespaces rather than part of one, so the spec's operation count is the four namespaces' plus one. A section whose read fails is an empty list, not an error. The MCP toolsearchruns the same search. Search - [mcp] 2026-11-02 · Every published Hyperliquid and Polymarket route has a tool; new
searchand stream tools — new toolshl_orders(/orders,/wallets/{address}/orders,/symbols/{symbol}/order-clusters),hl_twaps,hl_ledger,hl_leverage_changes,hl_wallet_trades,hl_stats,hl_hype_holdersandhl_archive, each running its route's query function with the route's defaults and caps;hl_marketgains viewhourly(/symbols/hourly) andhl_ohlcvviewslatestandexport;polymarket_marketsgains viewssearchandmarket(/markets,/markets/{condition_id}) beside its defaulttrendinglist.searchis the vike.io search box as a tool, andstream_info,stream_check_filter,stream_eventsandstream_connectionsdescribe the event streams, check a subscription with the server's own validator, read a channel's stored events and list your own connections. Tool caps now equal the routes':polymarket_market_trades10,000 rows a page (was 200),polymarket_tape50,000 (was 1,000),polymarket_settlements_bulk5,000 (was 500),polymarket_archive1,000 (was 200), with the same small default pages;hl_perp_top_tradersdefaults to 20 traders (was 10) andhl_position_matchto 50 matches (was 10), the routes' defaults. Search and streams - [onchain/token-transfers] 2026-11-02 ·
hide_contracts—GET /v1/onchain/tokens/{token_address}/transfersand thetoken_transferstool takehide_contracts=trueto leave out the contracts we know of, as the website's "Hide pools & routers" does: wallets labelled as a pool, router, vault, bridge or staking contract, and addresses with contract code that bought and sold within 1% of each other. Contract code is checked only for the wallets our pages rank, so another contract can remain. Defaultfalse: the answer without it is unchanged. Token transfers - [api] 2026-11-02 · Six new event stream channels and new fields and filters on four — on
wss://stream.vike.io:hl.twaps,hl.ledger,hl.leverageandhl.funding(Hyperliquid),hl.cohort_bias(HL Cohorts) andpm.new_markets(Polymarket).hl.fillsevents carryfee,fee_tokenandorder_id, andbuilderandbuilder_feeon a builder-routed fill;hl.cohort_flowcarriesclosed_pnl_usd;chain.transfersmarks a known contract side withlabels.<side>.contractand takes acontractfilter;pm.tradestakes arolefilter. Additive: an existing subscription sees the same events. Event stream channels and filters - [hyperliquid/candles] 2026-11-02 · ⚠ BREAKING · The candle stream is now the
hl.candleschannel ofwss://stream.vike.io/v1/stream/hl;wss://data.vike.io/v1/streamanswers 410 — Closed Hyperliquid bars are a channel of the Hyperliquid event stream, with the same key: subscribe with"channel": "hl.candles"and afilterofcoin,interval(1mto1d),market(perporspot) anddex. Each bar is an event with a cursor, so a client that reconnects gets the bars it missed (up to 3 days back), and agapframe marks a window in which the channel did not run. The old addresses,wss://data.vike.io/v1/streamandwss://vike.io/v1/stream, answer HTTP410STREAM_MOVED; thebarframe, itsseqand the 20-subscription limit are gone (a connection holds 100 subscriptions, each filter takes lists). Candle stream (moved to hl.candles) · Event stream channels and filters - [onchain/token-transfers] 2026-11-01 · Buyers and sellers are NET buyers and sellers, ranked by net USD —
GET /v1/onchain/tokens/{token_address}/transfersand thetoken_transferstool rankedtab=boughtby everything a wallet received andtab=soldby everything it sent, so both tabs led with the same routers and pools (bought about equal to sold) and a net seller could top the buyers.tab=boughtnow lists only wallets withnet_tokens > 0andnet_usd < 0, largest net USD bought first;tab=soldis the mirror. Fields, their units and the 10-row size are unchanged; a token with fewer than 10 net buyers in the period returns fewer rows. Token transfers - [polymarket/leaderboard] 2026-11-01 · A window without a sort ranks on that window's P&L —
GET /v1/polymarket/leaderboardand thepolymarket_leaderboardtool sorted by lifetimerealized_pnl_usdwhensortwas left out, even withwindow=30d, so "top traders this month" could lead with a wallet that lost money that month. With nosort,window=24h,7dor30dnow ranks onrealized_pnl_window_usd;window=all(the default) and every explicitsortare unchanged. Wallet leaderboard - [archive] 2026-11-01 · Hyperliquid file links last 7 days, come from Cloudflare R2, and have no quota —
GET /v1/hyperliquid/archive/urlanswers with a presigned Cloudflare R2 link (expires_in604800, was 300) that works for any number of requests until it expires, byte ranges included. The 20 GB-per-24-hours allowance and its429are gone. Theurlis no longer underhttps://data.vike.io/dl/: an expired or altered link is R2's403with an XML body. The response fields are unchanged./archive/url - [onchain/wallet-labels] 2026-11-01 · A new label source:
provider_e—/labels/{address}/provenanceand thewallet_label_provenancetool list one more source,source: "provider_e": addresses that are Polymarket wallets (pm_wallet), control them (pm_owner) or funded them (pm_funder), with the wallets' count, volume, realized PnL and the largest one's public name, and the addresses that paid many of them (bridges, exchanges, reward payers). Each entry says itsbasis(onchain_fact, or a guess from behaviour) and itsevidence. It never feedsconsensus.foundis nowtruewhen any source knows the address, so an address onlyprovider_eknows answersfound: truewith an all-nullconsensuswhere it answeredfound: false./labels/batchandwallet_batch_labelsadd an optionalprovider_elist to a row whose address the source knows, on everychain;entity,wallet_typeandfoundthere are unchanged. Theprovider_esource - [hyperliquid/liquidations] 2026-11-01 · Liquidations are exact, from the node's fills — A liquidation is now the liquidated account's own fill, as the venue marked it:
liq_tsis the fill's millisecond time, the size is what it closed andmark_priceis the mark the venue liquidated at. Since 2026-08-03 every row is such a fill; older rows stay inferred from position snapshots. Thehl_liquidationalert and thehl.liquidationsstream carryinferred: falseand arrive within a minute or two instead of 10 to 18 minutes late. No field was added or removed.
2026-10
- [api] 2026-10-31 · Event streams run on demand; gap frames;
hl.fillsdefaultmin_usd1000; close code 4412 — Every channel of the event streams is produced and stored only while someone is subscribed to it, and for 15 minutes after the last subscriber leaves; its first events arrive with its next pass, and a window it was idle is never filled in afterwards. A client that resumes across such a window gets a{"type":"gap","channel","cursor","from","to", "reason":"channel_idle"}frame for it (keep itscursor; it does not say that nothing happened).hl.fillsno longer has a floor of its own: a subscribe that sends nomin_usdgetsmin_usd: 1000,min_usd: 0is every fill. A connection that answers none of three pings is closed with4412ping_timeout(it was1011) and a resumecursor; answer{"type":"ping"}with{"action":"pong"}. Event stream channels and filters · Event streams close codes, errors and resuming - [api] 2026-10-31 · Four event streams on
stream.vike.io: three new Hyperliquid channels, HL Cohorts, on-chain transfers and Polymarket —wss://stream.vike.io/v1/stream/hlnow also carrieshl.positions,hl.liq_riskandhl.order_wallsbesidehl.fillsandhl.liquidations. New addresses:/hl-cohorts(hl.cohort_flow,hl.indices),/onchain(chain.transfersfor eth, bsc, base and hyperevm) and/polymarket(pm.trades,pm.resolutions,pm.price_moves). One key works on every address, and the one-connection-per-key and three-per-account rules hold on each address separately. A new close code,4411memory_backstop, is sent to the connection with the largest backlog when the stream server nears its memory limit: reconnect at once and resume from the frame'scursor. On-chain transfers are streamed before pricing, sovalue_usdisnullandpricedisfalsefor practically all of them and amin_usdfilter matches only the few that were priced; filter onwallet,token,chainormin_amountinstead. Polymarket resolutions are all streamed, each withtraded. A subscribe without a cursor gets only new events; with a cursor it gets what it missed, up to 3 days. Event stream channels and filters · Event streams close codes, errors and resuming - [polymarket/markets] 2026-10-31 · New:
GET /v1/polymarket/markets/{condition_id}/tradesand the MCP toolpolymarket_market_trades— one market's trades with the wallet behind each, newest first — every trade from 2026-01-01 to a few minutes ago, up to 10,000 rows a page on REST and 200 in the tool, paged withnext_cursorand bounded byfrom_ms/to_ms. A row is one order's fill, so a match is several rows (roleismakerortaker): do not add both roles' volume. Until now the only per-market tape was/events, which has no wallets. Market trades ·polymarket_market_trades - [api] 2026-10-31 · The event stream moved to
wss://stream.vike.io/v1/stream/hl; the old address answers 410 — Connect to the new address with the same key and the same frames. The oldwss://data.vike.io/v1/stream/hlanswers HTTP410with{"error":{"code":"STREAM_MOVED","message":"the stream moved to wss://stream.vike.io/v1/stream/hl"}}. The candle stream stays atwss://data.vike.io/v1/stream. A stopped or restarting event stream now answers with Cloudflare's HTML521or522; the JSON503STREAM_UNAVAILABLEis gone. A client that offerspermessage-deflategets compressed frames on both streams, and the close of a4408,4409or4410now carries the reasonslow_consumer,server_catching_uporreplaced. Event stream close codes, errors and resuming - [api] 2026-10-31 · Event stream (
wss://data.vike.io/v1/stream/hl): close codes, errors and resuming documented; its connections are not counted — A new page gives every close code and error frame of the event stream and what the client does about each:4408slow_consumer(the client accepted no frame for 30 seconds),4409server_catching_up(the client was reading and the stream got further ahead than its queue holds),4410replaced, the503capacityanswer at the handshake (close code4503),1011,1012and1009, and the error framesbad_subscription,unknown_channel,rate_limited(100 subscriptions per connection; one subscription's filter takes up to 1,000 wallets and 200 coins),cursor_expired,cursor_ahead,replay_too_largeandcatchup_unavailable. After any close except4410, reconnect at once and subscribe with the cursor of the last event you handled; a 4408, 4409 or 4410 frame carries one. A connection, a subscribe and a reconnect on this stream do not count against the hourly ceiling, and it never answers429or closes with4429. (That address has since moved: see the entry above.) Event stream close codes, errors and resuming - [api] 2026-10-31 · The candle stream (
/v1/stream) is outside the hourly request limit — a connect, asubscribeand a reconnect no longer count against the hourly limit, no key is refused for its hourly use, and the stream no longer closes with4429or answershourly request limit reached. The usage rows are still written, at 0 credits. REST and MCP calls are unchanged. Live stream - [api] 2026-10-31 · An account holds up to 3 API keys, down from 5; one stream connection per key — An account that held more keeps its 3 most recently used keys; the others are disabled. On the event stream a key holds one connection at a time and an account at most 3: a newer connection is always accepted and closes the older one with
4410. After a4410do not reconnect automatically; give each program its own key, with at most 3 programs per account. Authentication · Event stream close codes, errors and resuming - [mcp] 2026-10-31 · A webhook's signing secret can be shown again — a generated secret is no longer shown only once. It is returned when the webhook is registered or its secret rotated, and Account → Alerts → Channels has a Show secret button for it at any time, so losing the secret no longer requires a rotation.
alerts_register_webhook·alerts_rotate_webhook_secret - [mcp] 2026-10-31 · ⚠ BREAKING · Webhooks: a secret is always set,
https://only for a new URL, a test send, secret rotation, a delivery id and send again —alerts_register_webhooknow refuses anhttp://URL (a webhook registered overhttp://before keeps working), generates a signing secret when you pass none and returns it in that answer assecret, and POSTs a signedtestevent to the URL at once, its result intest(a failing test does not refuse the channel). New:alerts_rotate_webhook_secret(2 credits) issues a new secret, and for 24 hours the old one keeps signing too, soX-Vike-Signaturethen carries twosig=values: accept a delivery if anysig=matches (a verifier that keeps one value rejects deliveries during those 24 hours). New:alerts_test_webhook(1 credit) sends the test event again. Every POST addsX-Vike-Delivery-Id, the same on every try of a delivery (not signed). Dedupe on the rule and the event from the signed body,alert_id+event.event_id(event_idalone drops the second of two rules matching one event; the header alone can be changed in a replay). A try now has 20 seconds in all (address lookup, connection, TLS, request and your status line), one delivery at a time is open per webhook, a failing webhook is paused at most 5 minutes, and a429withRetry-Afteris honoured. The three webhook tools are on the MCP server only, no longer in the vike.io Ask AI chat.alerts_register_webhook·alerts_rotate_webhook_secret·alerts_test_webhook - [mcp] 2026-10-31 · New: send a delivery again; the feed keeps 15 days and shows each delivery's tries — events and their deliveries are kept for 15 days (they were kept 3). Each item of an event's
deliverylist gainsid,attempts,last_attempt_at,next_attempt_atandlast_error(a code:http 500,timeout,network,tls,blocked,expired,error; an expired delivery keeps its last failure's code). New:alerts_resend_delivery(1 credit) andPOST /v1/alerts/deliveries/{id}/resendsend one of your deliveries again, whatever its status, up to 15 days after its event (410past that,404once pruned), with a fresh 72 hours of retries. On the website every webhook delivery is listed, with a Send again button, under Account → Alerts → Webhook log.alerts_resend_delivery· Send a delivery again - [hyperliquid/vaults] 2026-10-30 · Vault families measured honestly, returns over the measurable days, search and risk columns — HLP's PnL and return were wrong in two ways. Its vaults were recorded from different days and their figures were added across different windows, so every window showed the same numbers with
coverage1.0; and HLP's share price was computed from the parent account alone, so a depositor's withdrawal read as a loss (the -7.6% return): it is now computed on the whole family. A vault family is now measured from the first day inside the window on which all its open vaults are recorded (start,partial), every vault over that same span, and hasnullPnL, return and APR if one of them has no record that day. A parent vault's/seriesis its family's. A family's flows are its parent's deposits and withdrawals only (a sub-vault's own rows are HLP moving money between its vaults), its PnL nets those moves out, its TVL is always the parent plus every sub-vault, and a parent's depositors are valued on that family total.return_pctnow chains the days with a measurable share-price step and skips the rest, so one unreadable day no longer nulls every window containing it;coveragesays how much was measured and below 95% the return is stillnull./vaultsgainsq(name or address search),leverage,leader_share_pctandtop5_share_pctand the sortsleverageandtop5_share;/vaults/{vault}/depositorsgainspnl_usd,all_time_pnl_usd,entered_atandlockup_untiland the sortspnl,all_time_pnlandentered. The MCP toolshl_vaultsandhl_vaulttake the same parameters. On rebuilt days before 2026-10-27, a share-price jump of more than 2x and an equally large reversal the next day are skipped; any other such jump makes the window's returnnull. (#1565)/vaults·/vaults/{vault}/depositors - [polymarket/markets] 2026-10-28 ·
GET /v1/polymarket/settlements/bulkpages are faster and are rebuilt every 5 minutes — a page of up to 5,000 rows now typically takes 1 to 3 seconds, where it took about 6 seconds on an idle server and 100 to 174 seconds when the server was overloaded. A market that has just resolved on-chain can now take up to about 5 minutes to appear in a page, where it used to appear within about a minute./settlements/{condition_id}is unchanged and always current. A resolved market we hold no description for still comes back withmarket_known: falseand empty strings, and gets its fields at the first rebuild after we add it. Rows, fields, cursors and limits are unchanged, and the MCP toolpolymarket_settlements_bulkreads the same pages. (#1535)/settlements/bulk - [polymarket/wallet-profile] 2026-10-28 · ⚠ BREAKING ·
GET /v1/polymarket/wallets/{address}no longer hascorrelated— the list of wallets that trade the same markets was by far the slowest part of the profile, and under load it could outlast the 60-second gateway limit, so the whole call failed. The rows are nowGET /v1/polymarket/wallets/{address}/correlated, a bare array with the same fields (1 credit). On the profile the key is absent, not an empty list, and every successful response carries anX-Vike-Hintheader naming the new route. A client that readcorrelatedfrom the profile has to call the new route. The MCP toolpolymarket_walletstill returns the list inline, and the vike.io wallet page is unchanged. (#1537)/wallets/{address}·/wallets/{address}/correlated - [mcp] 2026-10-28 · New: five Hyperliquid alert types in
alerts_createandalerts_edit—alert_typeistransfer(the default and what every earlier call made) orhl_wallet(every fill of one wallet: opens, closes, flips and increases, withreduceopt-in),hl_cohort_fill(every fill of $10,000 or more by wallets in the PnL and size cohorts you name),hl_liquidation(every liquidation, filtered by wallet, coin, size and cohort),hl_cohort_bias(a cohort index of a coin crossing your threshold, with a hysteresis band) andhl_liq_proximity(a wallet's position getting close to its liquidation price). New parameters:alert_type,wallet,actions,pnl_cohorts,size_cohorts,index,threshold,bandanddirection. The first three notify on every event with no cooldown; the last two notify once per crossing. A Hyperliquid alert is delivered by webhook or read from the feed, not by email.hl_cohort_fillneedsmin_value_usdof at least 10,000 and at least one cohort, and one account watches up to 200 wallets. Liquidations are inferred from position captures and arrive up to about 20 minutes late.alerts_listrows gainpolicy(per_event,cooldownorhysteresis) andhl. Additive: a call that names none of the new parameters still makes a transfer alert. Alerts - [mcp] 2026-10-28 · New:
alerts_eventsreads the events your alerts produced — the events of your rules, oldest first, a page at a time: passnext_cursorback ascursor, withlimit(1 to 500, default 100) and an optionalrule_id. Each carries the event as the webhook sends it and the status of each channel it went to. Events are kept for 3 days and appear as soon as they are recorded. 1 credit.alerts_events - [api] 2026-10-28 · New:
GET /v1/alerts/events— the same feed over REST, with the samecursor,limitandrule_id, 1 credit a call. It reads your own account's events, so it is in no OpenAPI spec and in none of the four products; Alert feed and webhooks is its reference, with the webhook body and the shape of every event kind. - [mcp] 2026-10-28 · Transfer alerts:
baseandhyperevm, one notification per transfer of a watched wallet, andmax_value_usdapplied —chaintakeseth,bsc,baseorhyperevm. An alert with anaddressnow notifies on every matching transfer, with no cooldown and no daily cap, where it used to send one percooldown_minutesand 10 a day; a token-wide alert (noaddress) keeps the cooldown and the 10 a day.max_value_usdis now an upper bound the alert applies; it used to be stored and ignored. Transfers are reported about ten minutes or more after their block, and a transfer without a USD value never matches a USD condition. - [mcp] 2026-10-28 · ⚠ BREAKING ·
channelstakes onlyemailandwebhook— Discord alerts are temporarily off, sochannels: ["discord"](and any other channel type) is now an error instead of being accepted. A Discord connection you already have is kept andalerts_list_channelsno longer lists it; an alert whose only channel was Discord records its events in the feed and notifies nowhere until you give it an email or webhook channel. Email is for transfer alerts only. - [mcp] 2026-10-28 · Webhook deliveries: one envelope, event ids, retries — every webhook body is now
{schema: "vike.alert.v1", alert_id, alert_label, alert_type, triggered_at, event}, and a transfer still carries the earlier flat keys (chain,token,value_usd,from_address,to_address,tx_hash). Requests addX-Vike-Event-IdandX-Vike-Attempt; the signature is unchanged. A failed delivery is retried for up to 72 hours (it was tried once), so delivery is at least once and a receiver should dedupe onevent_id.value_usdisnull, not0, for a transfer with no USD value.alerts_register_webhook - [hyperliquid/vaults] 2026-10-27 · New:
/v1/hyperliquid/vaults/*and the MCP toolshl_vaultsandhl_vault— every vault ranked by TVL, APR, PnL, return, net flow, volume or age over7d,30d,90d,365dorall(HLP and its sub-vaults are one row), platform totals, the deposit and withdrawal feed across all vaults, and per vault a profile, the current depositors, its own flows and an hourly or daily equity and share-price series. Vault history is recorded from 2026-10-27: a window longer than that sayspartial, andpnl_usd,return_pctandapr_pctarenulluntil enough days are recorded. A vault's fills, trades and positions are the/wallets/{address}/…routes with its address. (#1515)/vaults - [hyperliquid/traders-and-leaderboard] 2026-10-27 ·
/tradersserves up to 100 rows —sizewas declared up to 100, but a larger request was answered with 20 rows and no error. It now returns the number you ask for, up to 100; the default (20) is unchanged. (#1502)/traders - [api] 2026-10-27 ·
GET /v1/hyperliquid/positions/matchserves up to 500 matches —limitwas declared up to 500, but a larger request was answered with 50 rows and no error. It now returns the number you ask for, up to 500; the default (50) is unchanged. (#1502)/positions/match - [api] 2026-10-27 · Order routes published:
/orders,/wallets/{address}/orders,/symbols/{symbol}/order-clusters— threeGET /v1/hyperliquidroutes over the resting orders of Hyperliquid perps./orderslists the orders resting at one instant (at, default the newest snapshot) for asymbol, awalletor both, withsnapshotTsand asource(l4_5morstate_12m) naming the feed that answered, and pages withnextCursor;/wallets/{address}/ordersfollows one wallet's orders through a window of up to 30 days and gives each astatus;/symbols/{symbol}/order-clustersbuckets one symbol's standing orders by price. The 5-minute snapshots start at 2026-10-23 21:45 UTC; anatbefore that is rebuilt from the 12-minute checkpoints, and one inside an outage of either feed from the sightings on both sides of the gap; both can miss short-lived orders./ordersand the wallet route answer in camelCase (snapshotTs,placedAt), the clusters route in snake_case (snapshot_ts,reference_price), as the pages show./orders·/wallets/{address}/orders·/order-clusters - [hyperliquid/candles] 2026-10-27 ·
/v1/streamalso answers ondata.vike.io— connect towss://data.vike.io/v1/stream, the host of the REST base URL, with the same credential (an API key in theX-API-KEYheader or?token=, or an OAuth bearer), the same frames and the same hourly budget. The older address onvike.iostill answers. The page now also states the metering (a connect and each new subscription count against the hourly limit; nothing is billed), that a closed bar arrives 30 to 45 seconds after it closes, and that a gap is found by comparingts, notseq. Live stream - [hyperliquid/candles] 2026-10-27 · Fills do not expire: the 12-month retention claim is removed — The raw fills have had no expiry since 2026-08-19, so tick bars (
interval=Nt), which walk it, are not cut at 12 months; time bars and tick bars both start with the first recorded fill, at 2025-12-31 23:59 UTC. Funding payments and ledger events are still kept for one year./ohlcv - [hyperliquid/cohort-metrics] 2026-10-27 · New example: cohort net flow, hour by hour — a script and page that turn one
cohort-metricscall withhours=25into each cohort's hourly flow, the change in its long size minus the change in its short size, in tokens of the coin, with the same math as the Net Flow charts on the vike.io asset pages, and it says which hours to take out first. No route or field changed. Net flow by cohort - [api] 2026-10-27 · Event feeds: TWAP orders, a cross-wallet ledger and leverage changes — four new Hyperliquid routes:
/twapsand/wallets/{address}/twapslist the status changes of TWAP orders (a status change, not a fill: no row per slice),/ledgerlists deposits, withdrawals, transfers and vault events across all wallets with amin_usdfloor, and/leverage-changeslists changes of leverage or margin mode derived from consecutive position snapshots. All four page newest first and follow forward withorder=ascand a verbatim cursor./twaps,/ledgerand/leverage-changescover the last 24 hours when nostartis given, and a window over 31 days is a400, unless awalletis named (on/twaps, atwap_iddoes the same);/wallets/{address}/twapsalways names one, so it has neither rule. Ledger events now arrive about a minute behind the venue instead of about an hour, which also applies to/wallets/{address}/ledger. Following a feed - [mcp] 2026-10-25 · The MCP server's address is
https://data.vike.io/mcp— the same server, the same tools and the same API key, on the same host as/v1. OAuth sign-in stays onvike.io: the server's protected-resource metadata nameshttps://vike.ioas its authorization server, so a client is sent there to sign in.https://vike.io/mcpstill answers for existing configs and will be retired; switch them todata.vike.io/mcp. Client setup - [api] 2026-10-25 · ⚠ BREAKING ·
GET /v1/hyperliquid/stats/volume:volumecounts each trade once —volumesummed both fills of every trade and was exactly twice the traded notional; it now equals the figure on the hourly candle, so every value is half of what it was. Withoutsymbolthe total covers perp markets only, builder-dex perps included; spot and#outcome markets are left out (name one assymboland it is returned).n_fillsis unchanged and still counts fill records, two per trade. A client that stored the old series has to halve it or re-read it./stats/volume - [hyperliquid/cohort-metrics] 2026-10-25 · ⚠ BREAKING ·
endincludes the bucket it falls in — oncohort-metricsand/symbols/{symbol}/metricsa bucket now counts when its hour starts at or beforeend. Anendexactly on the hour used to drop that hour on the stored and hourly sources, and anendmid-hour kept only wallets whose last snapshot fell before it; both now return the whole bucket, on every axis. A window that ends at midnight gains the midnight bucket (a week from 00:00 to 00:00 is 169 buckets).HH:59:59still means "through hour HH".cohort-metrics - [hyperliquid/cohort-metrics] 2026-10-25 · ⚠ BREAKING ·
openedWithinother thanallis a400where it was ignored — withaxis=pnlandlabelBasis=point_in_time, withgrading=unrealizedorrealized-pit, and withaxis=pnl_unrealized, the matrix is a stored aggregate with position age summed away, soopenedWithin=24hsilently returned the all-ages answer. It is now refused with a message naming the combination; an unknown value is a400in every combination. Acursorwithoutstartnow pageshoursbuckets per page (page 2 used to hold one hour), and a page that reaches before 2026-08-07 is routed by its own hours. ThelabelBasisandenddescriptions state the coverage rule (every field from 2026-08-07). - [hyperliquid/position-snapshots] 2026-10-25 · ⚠ BREAKING ·
label_computed.lookaheadistruefor the point-in-time label onGET /v1/hyperliquid/positions— the declaration saidfalse; the hour's label counts the fills up to the end of that hour, so a row stamped inside the hour sees up to 59 minutes of later fills. The label values are unchanged; for a causal series read the previous hour's label. A client that branches onlookaheadnow takes the caution path. - [hyperliquid/position-snapshots] 2026-10-25 ·
label_causalonGET /v1/hyperliquid/positionshistory rows — a causal copy of the point-in-time label (pnl_cohort,pnl_abs_cohort,pnl_cohort_as_of,pnl_cohort_basis) computed at the hour BEFORE the row's own, the same label the archive carries, so a backtest has a series with no lookahead. It isnullwhere that hour has no label for the wallet, and absent on current rows. The row's own label andlabel_computed.lookahead: trueare unchanged;label_computednames the field (causal_field) and declares itcausal_lookahead: false. It replaces the advice above to read the previous hour's label./positions - [mcp] 2026-10-25 · OAuth sign-in accepts ChatGPT, Cursor web, VS Code and Perplexity — the documented callbacks of ChatGPT (
chatgpt.com/connector_platform_oauth_redirectandchatgpt.com/connector/oauth/{id}), Cursor web, VS Code (vscode.dev/redirect) and Perplexity are accepted at/oauth/registerand/oauth/authorize, matched exactly. An API key still works in every client. - [hyperliquid/candles] 2026-10-25 · ⚠ BREAKING ·
/ohlcvdefault window holdslimitwhole bars;Ntbars carry millisecondts— withoutstart, the window now starts on a bar boundary and ends with the bar that containsend, solimitbars come back whole, the forming bar included (it used to open mid-bar and cut the newest bar off).end=X&limit=1is the bar containing X. Tick bars (interval=Nt) carry a millisecondts(truncated to the second before) and come back in trade order. An explicitstartis untouched./ohlcv - [hyperliquid/candles] 2026-10-25 ·
kindon/ohlcvand/ohlcv/latest—outcomefor#Nprediction-outcome contracts, otherwiseperporspot.marketanddexkeep their spelling because clients pass them back as filters./ohlcv/latest - [hyperliquid/liquidations] 2026-10-25 ·
/liquidations/risktakesmin_value_usd;/liquidationstext corrected — the new floor (default 0, no change) keeps only coins with at least that much open notional, so thin markets stop leading the ranking. The/liquidationsdescription now says what the rows are: events inferred from position snapshots taken about every five minutes, plus fills the venue marked as liquidations, not realized fills. Thehl_liquidationsMCP tool takes the floor in itsriskview./liquidations/risk - [hyperliquid/traders-and-leaderboard] 2026-10-25 ·
avg_leverageis filled; dust accounts leave the ratio rankings —avg_leverageis now the notional-weighted leverage of the wallet's open positions at its last refresh (0 = none open); it was 0 for every wallet. Rows fill in as wallets are recomputed, andsort=avg_leverageranks only wallets that have a value (itstotalCountshrinks to them).calmar_ratioandrecovery_factorarenullfor accounts under $1 of equity andsort=calmar,recovery_factorandroiskip them;profit_factoris served capped at 999 (999 means no losing trade, or a negligible one). Thedegenstyle tag can now fire./leaderboard - [api] 2026-10-25 ·
GET /v1/hyperliquid/positions/match:kPEPE,xyz:TSLAandleverage=0—symbolis matched to the market's own spelling, so mixed-case tickers and builder-dex symbols match;leverage=0is accepted and finds cross-margin positions with no leverage recorded.mark_priceis documented as the tie-break it is./positions/match - [api] 2026-10-25 ·
GET /v1/hyperliquid/hype/holders:account_valueisnullwithout a perp account — a holder with no perp account on record used to read0.0, the same as an account that really holds nothing./hype/holders - [hyperliquid/builders] 2026-10-25 · builder fee fields: which one to divide —
fee_usdandvolume_usdcover every builder fill on record;trader_fee_usdcovers only the newer dollar-paid fills, sofee_usd / trader_fee_usdis not a take rate. Usefee_usd_node / trader_fee_usd. Text only; no value changed./builders - [api] 2026-10-25 · Hyperliquid ledger and funding rows — a depositor's vault deposit and withdraw rows in
/wallets/{address}/ledgercarry the vault ascounterparty(new events first; earlier months follow when repaired).dex_nameon/wallets/{address}/fundingnames the builder dex from the symbol prefix (xyz:GOLDisXYZ); it saidHLfor every row. - [onchain/wallet-labels] 2026-10-25 ·
POST /v1/labels/batch: the 30-day fields are live —net_30d_usd,volume_30d_usd,tx_30dandtokens_30d_countare computed over the last 30 calendar days (the window of/wallets/{address}30d) on every chain; they came from an offline snapshot that had stopped updating and werenullonbsc,baseandhyperevm. They arenullonly for an address with no label (found: false); a labelled wallet with no transfer in the window reads 0. A wallet flaggedexploitis typedflagged, notcex, here and on trace nodes./labels/batch - [onchain/wallet-forensics] 2026-10-25 · ⚠ BREAKING ·
/wallets/{address}/trace: nodes carry label keys; a misspeltwindowis a400— every node haslabel,wallet_typeandrisk_flag(nullwhen unlabelled). Awindowoutside24h,7d,30d,90dandallused to read 30 days and echo the typo back; it is now a400. An emptywindowis still 30 days./trace - [onchain/wallet-balances] 2026-10-25 ·
chains_scannedleaves out a failed chain — a chain whose read failed is listed inchain_errorsonly./balances - [onchain/wallet-summary-and-pnl] 2026-10-25 ·
GET /v1/wallets/{address}:tokens_tradedper window — it repeated the all-time count in every window; it now counts the distinct tokens moved inside each of 24h, 7d, 30d and 90d./wallets/{address} - [onchain/wallet-discovery] 2026-10-25 ·
GET /v1/wallets/discover:realized_pnl_basis— the response addsrealized_pnl_basis: "lifetime":realized_pnlandtokens_profitableare lifetime figures in every window, sosort=pnlranks lifetime PnL whateverwindowis./wallets/discover - [api] 2026-10-25 · ⚠ BREAKING ·
GET /v1/tokens/search: an unknownchainis a400— it returned an empty list. The aliasesethandbnband an emptychain(Ethereum) are still accepted./tokens/search - [polymarket/smart-money] 2026-10-25 ·
smart_money(mode=flows) rows gainoutcomes— the cohort'sbuy_inflow,sell_outflowandnet_inflowper outcome. A row's own figures add both outcomes, so buying Up and buying Down both read as inflow; the difference between the outcomes'net_inflowis the direction. Existing fields are unchanged./smart_money - [polymarket/wallet-profile] 2026-10-25 ·
GET /v1/polymarket/wallets/{address}—open_positions[]rows carrytoken_id;category_breakdown[]rows carryhit_rate_volume_weighted(the headline's definition per category;hit_rateon the row stays a plain count). The description states which resolution records the headline counts./wallets/{address} - [polymarket/leaderboard] 2026-10-25 ·
sort=hit_rateties break on resolved markets, then volume — the many wallets at exactly 1.0 used to be ordered by address./leaderboard - [polymarket/order-book-events] 2026-10-25 ·
GET /v1/polymarket/events: no print skipped at a page edge — when a page ends between two prints that share a millisecond,next_cursorcarries a~nsuffix; pass it back unchanged. Cursors without the suffix behave as before./events - [polymarket/markets] 2026-10-25 ·
GET /v1/polymarket/ohlcvand/markets— withtoand nofrom,/ohlcvlimitkeeps the bars nearestto(to=X&limit=1is the last bar at or before X), still oldest first; a call withfrom, or with no bound, is unchanged./marketstakesoffset(0 to 10000; above is a400), withcondition_idas the tie-break so pages do not repeat or skip a market./markets - [mcp] 2026-10-25 · New tool
polymarket_settlements_bulk; ChatGPT setup page — lists on-chain resolutions by time and slug prefix, up to 500 a page, 1 credit a call (the list form ofpolymarket_settlement). Thewallet_batch_labelsandpolymarket_ohlcvdescriptions follow the changes above, andhl_position_matchacceptsleverage0. A ChatGPT setup guide documents the endpoint and says OAuth sign-in from ChatGPT is not accepted yet, so an API key is the credential. MCP tools - [api] 2026-10-24 · These docs are organised around four products — On-chain, Hyperliquid, HL Cohorts and Polymarket, in that order on the start pages, the endpoint index, the guides and the concepts, each product linking its datasets, endpoints and guides. Getting started covers the first file of both archives; Freshness covers all four products and what an answer leaves out; the paging guide walks Polymarket's
next_cursorenvelope. No route, field or limit changed. Data API - [hyperliquid/candles] 2026-10-24 ·
GET /v1/hyperliquid/ohlcv/latest— the newest 1-minute candle of every symbol that traded in the last hour, in one request, instead of one/ohlcv?limit=1call per symbol. Optionaldex(omitted: every DEX, each row names its own) andmarket(perp|spot);intervalis1monly. A 429 on/v1/hyperliquid/ohlcvnow names it inhint./ohlcv/latest - [api] 2026-10-24 · JSON bodies for the 401 and the 414; request lines up to 16 KB — a missing or invalid key on
/v1or on the archive now gets401with theUNAUTHORIZEDenvelope instead of an HTML page, and a request line over 16 KB gets414with codeURI_TOO_LONGinstead of an HTML page. The limit itself went from 8 KB to 16 KB, so a/v1/polymarket/eventspage with the documented 100token_idsplus acursor(about 8.3 KB) no longer returns414. Status codes are unchanged. Errors - [api] 2026-10-24 · Polymarket and On-chain error texts and descriptions no longer name internals — the
400texts of the Polymarket routes now start with the route's own name (events requires from_ms,ohlcv requires token_id,archive/url requires date,settlements/bulk requires to_ms > from_ms) instead of a code function name; thecoveragenotes of/wallets/{address}/first-funderand/wallets/{address}/exchange-usage, the/wallets/discoverrefresh text and a few route descriptions say the same thing in plain words. Status codes, field names and numbers are unchanged. A client that matches a full400text exactly (not therequires …tail) has to adopt the new text. Errors - [api] 2026-10-24 ·
sourcestrings no longer name internal tables — thesourceandn_wallets_sourceof/v1/hl-cohorts/heatmap, thesource,detailandcaveattext of everylabel_computedblock, and thesourceof/v1/hyperliquid/ohlcv,/ohlcv/exportand/symbols/hourlynow describe the data in plain words (latest position snapshot,precomputed totals,hourly point-in-time label set,1h fills rollup) instead of naming the stores behind them. Field names, numbers and meaning are unchanged. TheLinksuccessor of a request in a retired spelling now names the published/v1/hl-cohorts/symbols/{symbol}/…path. Errors - [api] 2026-10-24 · HL Cohorts is its own namespace,
/v1/hl-cohorts— the ten cohort-positioning routes are published under/v1/hl-cohorts:/cohorts,/segments,/segments/{cohort}/summary,/segments/{cohort}/history,/heatmap, and under/symbols/{symbol}/the routesmetrics,indices,large-fills,cohort-metricsandsize-breakdown. Each runs the same code as before, so the body, credits and limits are those of its old path. The OpenAPI document and these pages list them under the new prefix only. A client generated from the OpenAPI document is the exception: it loses the seven operations that were published under/v1/hyperliquid(their paths moved to/v1/hl-cohorts) and gets renamedoperationIds for them, so regenerate it before relying on those routes. Three of the ten,/segments/{cohort}/history,/symbols/{symbol}/indicesand/symbols/{symbol}/large-fills, answered before but were hidden from the spec; they are published and documented now. HL Cohorts - [api] 2026-10-24 ·
include=leverageonGET /v1/hl-cohorts/segments/{cohort}/history— adds three ratios to every hourly row:perp_bias= (long − short) / equity,equity_exposure= (long + short) / equity andequity_covered_share, the main-dex notional of the counted wallets over that of the whole cohort. They are unbounded ratios (above 1 is more than 1x of equity) over the native perp account only. All three arenull, never 0, for an hour with no stored row, for any hour before 2026-08-11 (leverage.data_fromin the response) and for hours rebuilt from fills;perp_biasandequity_exposureare alsonullwhen no counted wallet has a positive equity. Any otherincludevalue is a400. Withoutincludethe response is unchanged./segments/{cohort}/history - [api] 2026-10-23 · Settlements name the market and the winning outcome —
/v1/polymarket/settlements/{condition_id}now fillsslug,token_idsandwinning_token_idfrom the full market list, where they used to be empty for most markets, and agrees field for field with/settlements/bulk. Both routes addmarket_known(false when we have no description of the market),outcomes,winning_outcomeandquestionto every row; existing fields are unchanged./settlements/{condition_id} - [api] 2026-10-23 ·
/markets/{condition_id}answers for markets outside the recorded set — a market we do not record order books for is answered from Polymarket's full catalog (about 4 million more resolved markets) instead of[]. Every row carriessource(recordedorcatalog); on a catalog rowtick_sizeandneg_riskarenull. Only an id neither list knows returns[]./markets/{condition_id} - [api] 2026-10-23 · Errors say what to do instead — a
429on a per-item route names the bulk call that replaces the loop (hintinside the error envelope); an unknown Polymarket parameter or an invalid enum value ends with the likely intended value (did you mean 'query' for 'q'?,Nearest: 5m or 1h); a422keeps FastAPI'sdetailand adds a one-lineerror. New response headers, bodies unchanged:DeprecationandLinkon a retired parameter or path spelling,X-Vike-Noteon an empty answer whose window is before 2026-07-25,X-Vike-Hinton a hot single-item loop. Errors - [api] 2026-10-23 ·
GET /v1/polymarket/settlements/bulk: many settlements per request — the same row as/settlements/{condition_id}, oldest resolution first, up to 5,000 per page (default 5,000) with anext_cursor, filtered by resolution time (from_msinclusive,to_msexclusive) andslug_prefix(for examplebtc-updown-5m-). Walking every settled 5-minute BTC market no longer takes one request per market. Nothing that worked before changed;/v1/polymarket/settlementswithout a condition id is still a404./settlements/bulk - [archive] 2026-10-23 · A missing Polymarket archive file now says what exists — the
400from/v1/polymarket/archive/urlkeeps its text and adds the assets with files for that stream, the tenors with files for that asset, or the published date range for that selection./archive/url - [api] 2026-10-23 · A
404on a guessed path says what to call — a404on a path that does not exist but is often guessed (wallets/{address}/positions,/candles, top-level/cohort-metrics, bare/settlements) now carries ahintfield naming the call that answers it;detailis unchanged. Errors lists them. - [api] 2026-10-23 · The
eventswindow error points at the daily files — the400for a window over 24 hours keeps its text and ends withGET /v1/polymarket/archive/datasets?stream=book_events. - [limits] 2026-10-23 · Hyperliquid file links: 20 GB per user per rolling 24 hours —
GET /v1/hyperliquid/archive/urlanswers429when the links a user was handed in the last 24 hours, all of the user's keys together, would pass 20 GB. What is counted is the size of each link issued, not the bytes read, and the window rolls; the message says how much was issued. Nothing else about the route changed./archive/url(#1406) - [api] 2026-10-22 · The OpenAPI document is readable without a key —
https://vike.io/data/openapi.jsonserves the/v1spec with no credential and spends nothing: the same document/v1/openapi.jsonserves behind the key gate, plus a top-levelx-vike-limitsblock. Every/v1response names it in aLinkheader withrel="service-desc", besiderel="service-doc"for these docs, the401the edge answers for a missing key included. Route descriptions in the spec no longer carry developer notes. Additive. Schema and spec (#1390, #1392) - [archive] 2026-10-22 · Hyperliquid
positionsfiles have 19 columns, and the archive has free samples —account_valueandpnl_cohortcome afterliq_progressin everypositionsfile, the daily ones andlatest/positions.parquet, which takes them from 17 columns to 19.account_valueis the wallet's native perp account value in USD at the start of the row's clock hour (the last snapshot of the previous hour; null when unknown).pnl_cohortis the wallet's realized-PnL cohort at the start of that hour, graded on the fills before it, so one hour earlier than the label/v1/hyperliquid/positionsgives the same row in historical mode;unknownwhen the wallet is ungraded. Every published day was re-issued with the two columns: a file downloaded before this date has 17, and those 17 keep their names, types and order. Separately,GET /v1/hyperliquid/archive/datasetsreturnssamples_base,https://data.vike.io/archive/hl-samples/, which holds a BTC fills sample, a BTC positions sample and amanifest.json, all readable without a key./archive/datasets(#1386) - [archive] 2026-10-21 · Hyperliquid fills and position snapshots as Parquet files, by temporary link — one Parquet file per UTC day for
fills(every fill) andpositions(every 5-minute snapshot of every open position), from 2026-05-01 (positions from 2026-05-08, a partial first day).GET /v1/hyperliquid/archive/datasetsis the index: the days, rows and bytes per file, thesnapshotscount of each positions day and the column schema.GET /v1/hyperliquid/archive/url?dataset=fills&date=YYYY-MM-DD(ordataset=positions) answers with a link to exactly one file. The link needs no key, is accepted for 300 seconds from the start of a request (a running download is not cut) and answers403once expired or altered. No file has a permanent URL, the folder cannot be listed and a direct/archive/venue=hyperliquid/path is a404. Nothing that worked before changed: these routes were not published until now. Download the Hyperliquid file archive shows how to fetch a file and read it. (#1354, #1356, #1361) - [archive] 2026-10-21 · Position snapshot gaps filled; rebuilt hours are listed in the index — the gaps in the
positionsfiles between 2026-05-17 and 2026-10-19 (missing 5-minute snapshots and snapshots with whole wallets missing) were rebuilt from the fills, and the affected day files were replaced: row and snapshot counts of those days are higher than before (snapshotsin the index).reconstructed_hourson a day'spositionsentry lists the rebuilt hours, andreconstructed_lower_match_hoursthe ones whose replay matched the next real snapshot at 83 to 97 %. Rebuilt rows carrymargin_used = 0,liquidation_price = 0andstate_ts = 1970-01-01. Nothing that worked before changed: the new keys are only added to the index. (#1371) - [archive] 2026-10-21 ·
date=latest: the current open positions of every asset as one file —GET /v1/hyperliquid/archive/url?dataset=positions&date=latestlinkslatest/positions.parquet, replaced in place about every 5 minutes (about 30 MB, with the 17 columns of the dailypositionsfile). Download it whole instead of paging/v1/hyperliquid/positions: a ranged read can straddle two versions of the file.latest.positionsin/archive/datasetscarries itssnapshot_tsandgenerated_at. (#1359) - [limits] 2026-10-21 · Hyperliquid file links: the link request is metered, the download is not —
GET /v1/hyperliquid/archive/urlis an ordinary/v1call: one credit, one request of the hourly budget, and counted by the per-minute cap. Downloading with the link is recorded asarchive_download, spends neither and needs no key. A403now exists for an expired or altered link; Errors lists it. (#1361) - [api] 2026-10-21 ·
endwithoutstartreturns the newest buckets at or beforeend, onGET /v1/hl-cohorts/symbols/{symbol}/cohort-metricsand/symbols/{symbol}/metrics— with nostart, anendmore thanhoursbehind the newest snapshot (limiton/metrics) returned an empty series: the default window hung off the newest snapshot, so it asked for the span from the newest snapshot minushoursup toend, which holds nothing. It affected thesize,tierandpnl_absaxes,pnlwithlabelBasis=current, and/metrics. The window is now thehoursnewest hourly buckets at or beforeend, the same rows asstart = end - hours. Anendat or after the newest data, a future one included, is the same as noend; anendolder than all data still returns an empty series. (#1360) - [limits] 2026-10-20 · ⚠ BREAKING · 200 requests per minute per key on
/v1— a sustained rate with a burst of up to 100, counted once per key across every server. Over it,/v1returns429withRetry-After: 1and a message naming the per-minute cap; the hourly budget (20,000) is unchanged, and MCP and the archive are not subject to the new cap. Every/v1response now also carriesX-RateLimit-LimitandX-RateLimit-Remaining(the hourly budget; noX-RateLimit-Reset, since the window slides). The account page's MCP Calls tab shows each key's last hour against the limit and the last seven days by endpoint. (#1336, #1337, #1338) - [api] 2026-10-20 ·
GET /v1/onchain/wallets/{address}/traceand the MCP toolwallet_tracetakedirection—outfollows the money where it went (each wallet's recipients),inwhere it came from (its senders),both(the default, and the only behaviour until now) either way, ranked by the two summed. Any other value is a400. The response echoesdirection. Base and HyperEVM discovery (/wallets/discover,wallet_discover) is documented as it behaves:window=allalways,24h–90dwhile those chains' windows tables are under two days old (refreshed by hand), otherwise a400. - [api] 2026-10-20 · wallet balances price the native coin, answer in under a second, and a tiny
min_usdkeeps sub-cent holdings — onGET /v1/onchain/wallets/{address}/balancesand the MCP toolwallet_token_balances, the ETH / BNB / HYPE row carriedusd_value: nulland was left out oftotal_usd; it is now priced and counted (vitalik.eth's total rose by about $21,900). With anymin_usdabove 0 (the MCP tool's default is 1) only tokens we price are read from the chain, which took vitalik.eth from 17.7 s to 0.5 s; the answer is the same.min_usdis compared with the unrounded value, somin_usd=0.000000000001now returns holdings worth under half a cent, whoseusd_valuekeeps three significant digits instead of reading0.0.min_usd=0still lists every token, priced or not. - [hyperliquid/traders-and-leaderboard] 2026-10-19 · ⚠ BREAKING · a Hyperliquid wallet's window is what it REALIZED in it, rows no longer freeze, and the drawdown fields can be
null—window(1d,7d,30d,all= 365 days) onGET /v1/hyperliquid/leaderboard,/leaderboard/flow-adjustedand/traders, in themetricsblock ofGET /v1/hyperliquid/wallets/{address}, and in the MCP toolshl_leaderboard,hl_perp_top_tradersandhl_wallet, now covers the trades closed in the current UTC day and the N days before it. It covered the trades opened there that had since closed, so a loss on a position opened before the window never showed in it: the 30-day leader of 2026-10-19 read +8.5M, and about −27.6M was realized in those 30 days. Realized PnL, the trade, win and loss counts,win_rate, volume,profit_factor,expectancyand the tags and cohorts derived from them follow the new window;max_win_streakandmax_loss_streakstill count trades opened in it. A row also froze at its last computation until the wallet traded again, so it kept a trade after its day had left the window (the same leader's row still held one that left ten days earlier); it is now rewritten once a day for every wallet with a trade that left a window. The same release corrects the drawdown fields:max_drawdown_pctwas exactly100.0for most wallets (a zero equity reading was taken for a total loss) and above100for some, and the 1d, 7d and 30d rows carried the lifetime value. It is now taken from the wallet's cleaned equity over the row's own window, with bridge deposits and withdrawals taken out, andmax_drawdown_pct,current_drawdown_pct,calmar_ratioandrecovery_factorarenull, not0, where the window has too few equity days to say; a client that parses them as numbers has to acceptnull, which is why this entry is marked breaking. Sorting on them putsnulllast. The rows were rebuilt in one pass that finished 2026-10-19 20:08 UTC, and the captured example responses on the endpoint pages were refreshed after it; every row now follows the new definition. About 7% of the wallets with more than $100 of equity still read100.0for the lifetime drawdown (was 71%) and a quarter of the 500 largest accounts read above 98: money moved between the perp and spot sides is not a bridge flow and still reads as equity leaving, so treat a large drawdown on a large account as an upper bound. - [hyperliquid/traders-and-leaderboard] 2026-10-19 ·
GET /v1/hyperliquid/leaderboardand/leaderboard/flow-adjustedfloor at 3 closed trades by default —/leaderboarddefaulted tomin_trades=0and the flow board listed any wallet with a trade, so a wallet with one or two lucky trades could head a PnL board. Both now default tomin_trades=3closed trades in the window, the floor/tradershas always applied, andtotalCountcounts the floored set.min_trades=0is no floor (the flow board then keeps any wallet with at least one trade, as it did), so a caller that wants every wallet sends it./leaderboard/flow-adjustedtakesmin_trades, which it did not. The same change reaches the MCPhl_leaderboardtool, whosemin_tradesdefault is3for both views. - [api] 2026-10-19 · the wallet leaderboard hides round-trip hubs;
include_hubs=trueshows them —GET /v1/onchain/wallets/discoverand MCPwallet_discoverno longer rank a wallet with $10B or more of volume in the chosenwindowwhose net flow and realized PnL are each within 0.1% of that volume: flash-loan, MEV and router pass-through wallets (the Ethereum all-time #1 was a flash-loan bot with $25.7T of correctly priced volume that enters and leaves within the same transaction). The new optional booleaninclude_hubs, defaultfalse, ranks them again.totalstill counts them. - [api] 2026-10-19 · ⚠ BREAKING · an unknown Hyperliquid wallet is a
400, not a200of zeros —GET /v1/hyperliquid/wallets/{address}and/wallets/{address}/trades/summaryanswered an address we hold nothing for with200: every figure0, no metrics, andlifetime.last_fill_tsat1970-01-01. They now answer400naming the address, unbilled, as/v1/polymarket/wallets/{address}does for a wallet with no trades. The summary refuses a wallet with no equity snapshot, open position, trade, fill or ledger event; the trades summary refuses one that never traded (a wallet that has traded and was quiet in the chosenwindowstill gets its zeros). A wallet with only ledger events is answered, withlast_fill_tsnullwhere it read 1970. A caller that looped over addresses and read zeros has to handle the400. The list routes/trades,/fills,/funding,/ledgerand/buildersare unchanged: an unknown address is an empty page. The same change reaches the MCPhl_wallettool, which answers it as an error. - [api] 2026-10-19 ·
GET /v1/onchain/tokens/searchand MCPtoken_searchreturntoken_address0x-prefixed — the field came back as bare hex on every chain, while every other token and wallet address in/v1/onchainand the MCP tools is0x-prefixed lower case. It is the same address with the prefix added./tokens/{token_address}/holdersand/tokens/{token_address}/transfersaccept either spelling, so a caller that passes the value on is unaffected; a caller that prepends0xitself, as the earlier docs suggested, has to test for the prefix first. - [mcp] 2026-10-19 · MCP
perp_fundingno longer lists a halted venue — withsymbolit returned every row of the current-funding table, including Coinbase International's last rows (its perpetuals halted 2026-10-01; the rows stay for 90 days) withvol_24h_usd0, beside live venues. It now lists only venues we still poll for funding whose newest row is under an hour old. Withoutsymbol, the arbitrage ranking reads the same polled venues. A live venue we hold funding but no tickers for (weex, for one) is still listed, withvol_24h_usd0. The response shape is unchanged; there are fewer rows. - [hyperliquid/position-snapshots] 2026-10-19 ·
GET /v1/hyperliquid/positionsand MCPhl_marketpositionssay they are ordered by key, not by size — no behaviour change. Current rows come ordered bywallet,symbol,directionand historical rows bysymbol,snapshot_ts,wallet, because the cursor pages on the primary key, solimit=10is the first ten wallets in address order, not the ten biggest positions. The route, the tool and both docs pages now say so and point tosize-breakdown/size_breakdown,positions/symbols/open_interestandcohort-metrics/hl_cohort_metricsfor the biggest positions. A size sort is not offered. - [mcp] 2026-10-19 · two wallet-provenance tools:
wallet_first_funderandwallet_exchange_usage—wallet_first_funder(2 credits) returns the earliest inbound transfers of a wallet as two separate answers,first_native_in(the first plain send of the chain's coin, at leastmin_nativewhole coins, default0.0001) andfirst_token_in(the first token transfer priced atmin_usddollars or more, default1), each with the sender, its label, time, transaction hash and amounts; it is the first inbound we hold, not proof of who funded the wallet, andcoveragesays where each chain's history starts.wallet_exchange_usage(3 credits) returns, over a window (default365d), the USD a wallet sent to and received from each labelled centralised exchange, with transfer counts, first and last contact and label confidence, pluspattern: "sweeps_to_single_cex"when at least 90% of its outgoing USD went to one exchange over at least three transfers: an observed pattern, not a statement that the address is a deposit address, and the exchange figures are a lower bound. Both serveethereum,bsc,baseandhyperevm, each read from that chain's own tables; a wallet we know nothing about isfound: falserather than zeros. - [api] 2026-10-19 ·
GET /v1/onchain/wallets/{address}/first-funderand/exchange-usage— the REST routes for the two tools above, billed at the usual 1 credit per call like every other/v1route.first-fundertakeschain,min_native(whole coins;0means no floor) andmin_usd;exchange-usagetakeschainandwindow(30d,90d,180d,365dorall). A read that does not finish within 20 seconds is a400whose message names the fix (a narrowerwindowonexchange-usage; a retry, ormin_native=0andmin_usd=0, onfirst-funder) rather than a 30-second wait. - [api] 2026-10-19 ·
GET /v1/polymarket/leaderboardand the MCP toolpolymarket_leaderboardadded — the Polymarket wallet leaderboard: wallets ranked by realized P&L, hit rate, volume or trade count, for all time or over a24h,7dor30dwindow, optionally inside onecategory, as an array of rows. The route runs the tool, both read the hourly leaderboard table built from the on-chain trade tape, and each call costs 1 credit.min_resolveddefaults to 20 (0lists every wallet), paging is byoffset(0 to 1000,limitat most 50, ties broken on the wallet), and a badwindow,sort,categoryor number is a400that names it. Rows carryhit_rate, a volume-weighted fraction that isnullwhere undefined, andhit_rate_ci, its plus-or-minus half-width; thebotandwhaletags let a caller drop the automated wallets that top some categories.first_seenis the first trade in a tape that starts on 2026-01-01, and24h,7dand30dcan be revised while resolution times are corrected. The polymarket namespace is now 12 routes. Additive; nothing changed on the existing routes. - [mcp] 2026-10-19 ·
alerts_createandalerts_edittake a wallet address —address(one 20-byte EVM address,0x+ 40 hex) andaddress_role(from,toorany, defaultany) make an alert fire on a transfer that wallet sent, received or either. Until now an alert could only watch a token above a USD threshold and carried no address.ethandbsconly, one address and one chain per alert; ENS names, entity names and non-EVM addresses are refused with a message instead of being stored.min_value_usdis optional: without it every transfer touching the address matches, dust and unpriced tokens included, and the alert still sends at most one notification percooldown_minutesand 10 a day.alerts_editis partial like its other fields:address=""removes the condition,address_rolealone moves the existing address, and setting an address replaces any earlier one.alerts_listrows gainaddress_conditions, a list of{role, address}(empty when none).max_value_usdis documented as what it always was: stored, never applied by the alert checker, which has no upper USD bound. - [api] 2026-10-19 ·
GET /v1/onchain/wallets/{address}keeps answering for ethereum and bsc first, and takeschain— the route shipped earlier today answering for the most recently active of the four chains, so a wallet with one dust transfer onbase(the live case: the vitalik.eth address) answered with that dust instead of its ethereum figures. It is back to the more recently active ofethereumandbsc, andbaseorhyperevmis answered only for a wallet with no priced ethereum/bsc volume. The new optionalchainquery parameter (ethereum,bsc,base,hyperevm) asks for one chain; an unknown name is a400. The response's top-levelchainfield is unchanged. The same change reaches the MCPwallet_summarytool. - [mcp] 2026-10-19 · the
polymarket_market_detaildescription matches its answer — it promised current quotes and a smart-money cohort block, and returns neither. The answer is the market's fields,outcomeswith theirclob_token_ids, volume and liquidity, a price series per outcome, the top 30 holders per side, the last 100 trades with wallets, tape stats andresolution. Quotes arepolymarket_orderbook, the cohort ispolymarket_smart_money. Only the description changed. - [api] 2026-10-19 · the wallet routes and tools serve
baseandhyperevm—chain=baseandchain=hyperevmnow answer on/wallets/{address}/transactions,/wallets/{address}/counterparties,/wallets/{address}/pnl,/wallets/compare,/wallets/{address}/traceandPOST /labels/batch, each reading that chain's own tables. Before,basewas listed in the parameter list of some of these but came back as a503or empty, andhyperevmwas refused with a400. The400for a name outside the four now readschain 'x' not supported (use ethereum, bsc, base or hyperevm), where it readchain 'x' not supported (use ethereum, bsc, or base). On/labels/batchthe labels and the 30-day flows come from each chain's own tables:bschas no 30-day flow data, so its four 30-day fields arenull, andhyperevmhas labels for only a few hundred wallets.GET /wallets/{address}now carries a top-levelchainfield naming the chain that answered (see the entry above for which chain that is)./wallets/{address}/ens(Ethereum mainnet names),/labels/{address}/provenance(Ethereum) and the MCPalerts_*tools (ethandbsc) are unchanged. The same change reaches the MCPwallet_summary,wallet_transactions,wallet_counterparties,wallet_pnl_history,wallet_compare,wallet_traceandwallet_batch_labelstools. - [api] 2026-10-19 · the token routes and tools serve
baseandhyperevm—chain=baseandchain=hyperevmnow answer on/tokens/search,/tokens/screenerand/tokens/{token_address}/holders, andhyperevmis named in thechainlist of/tokens/{token_address}/transfers, which already served it at runtime. Before,basewas listed on some of these but came back as a503or empty, andhyperevmwas refused with a400. Thehyperevmtoken registry holds about 50 tokens.smart_money_only=trueandsort=smart_inflowon/tokens/screenerstayethereumonly: any other chain is a400, as it already was onbscandbase./tokens/{token_address}/holdersscans the whole chain for the token, so the busiest tokens onbasetake tens of seconds (WETH onbasemeasured about 50 seconds, ahyperevmtoken about 2). The same change reaches the MCPtoken_search,token_screener,token_holdersandtoken_transferstools. - [api] 2026-10-19 ·
GET /v1/onchain/wallets/{address}/balancesscansbaseandhyperevmby default — withoutchainsthe route now scansethereum,bsc,baseandhyperevm; it scanned the first two, andbasehad come back inchain_errorssince 2026-09-04.chains_scannedandtotal_usdcover all four, so a caller that wants the old scope sendschains=ethereum,bsc. Onbaseandhyperevm,symbol,name,balanceandusd_valueexist only for tokens we map and price (about 170 onbase, about 50 onhyperevm); any other token the wallet holds is listed only withmin_usd=0(the default floor of $1 keeps priced tokens only), with its contractaddressandbalance_rawand those four fieldsnull. Native balances (ETH, BNB, HYPE) are listed without a USD value.hyperevmmeans the HyperEVM chain only: assets in HyperCore (spot or perp accounts) are not included. The same change reaches the MCPwallet_token_balancestool. - [api] 2026-10-19 ·
GET /v1/onchain/wallets/discoverservesbaseandhyperevm, forwindow=allonly — thechainlist wasethereumandbsc.baseandhyperevmnow answer, but only forwindow=all, because their rolling-window tables are not maintained:24h,7d,30dand90dthere are a400, and an omittedwindowresolves toallon those two chains. Onethereumandbscevery window is served and the default stays30d. The same change reaches the MCPwallet_discovertool. - [mcp] 2026-10-19 · 2 new MCP tools:
perp_open_interestandperp_long_short— open interest and long/short positioning for one perpetual-futures symbol, read from the venues Vike polls (open interest: Aster, Binance, Bitget, Bybit, Hyperliquid, KuCoin, OKX; long/short: Binance, Bybit, Gate, OKX), 1 credit each likeperp_funding. There is no REST route for either.oi_usdis USD notional. A venue silent for over an hour is listed understale_venues, never summed in, and a symbol with no data returns empty lists and a note, not zeros. Every long/short row carriesbasis, because the venues count different things: Binance top traders by positions, OKX and Gate top traders by accounts, Bybit all accounts. Coinbase International halted its perpetuals on 2026-10-01 and is not among the venues. See Perps tools. - [mcp] 2026-10-19 · 5 new MCP tools over the Polymarket L2 feed:
polymarket_tape,polymarket_orderbook,polymarket_market_stats,polymarket_settlementandpolymarket_archive— each runs the same query as its/v1/polymarketroute (/events,/orderbook,/market_stats,/settlements/{condition_id}, and/archive/datasetsplus/archive/urlas the two views ofpolymarket_archive) and costs 1 credit, what the route costs. They take the outcome token id, exceptpolymarket_settlement, which takes the condition id; a condition id passed as a token id is refused by name instead of answering an empty or all-zero result.polymarket_tapepages at most 1,000 events (REST: 50,000).polymarket_archivelists and resolves files and never downloads them, and names the date boundsdate_fromanddate_towhere REST saysfromandto. See Polymarket tools. - [mcp] 2026-10-19 · eight new MCP tools put the
/v1/hyperliquidroutes behindtools/list—hl_cohort_metrics,hl_segments,hl_wallet,hl_wallet_activity,hl_leaderboard,hl_liquidations,hl_marketandhl_builders. Until now onlyhl_perp_top_traders,hl_position_matchandhl_ohlcvof the Hyperliquid routes had a tool, so an agent could not read cohort positioning, one wallet's history, the risk-metric leaderboard, liquidations or builder codes. A tool with several routes takes aview(hl_wallet_activityreadsfills,funding,ledgerorbuilders); each view runs the query function of the route it mirrors, takes that route's parameters with its defaults and caps, and costs 1 credit, what the route costs.symbolis the instrument parameter andcoinis accepted as its old name. A call is refused with an error that names the fix, instead of answering something else, for an unknown view, a missing required input, a parameter the view does not take, or a number over the route's cap.tools/listnow returns 39 tools. Additive; no existing tool changed. Units that differ between similar fields (win_rateis a fraction onhl_leaderboardand a percent onhl_perp_top_traders;percent_riskandpct_wallets_in_profitare fractions) are listed on the Hyperliquid tools page. - [hyperliquid/traders-and-leaderboard] 2026-10-19 ·
GET /v1/hyperliquid/tradersreturnsroi_pctandmax_drawdown_pctin percent — both came back 100 times too large (multiplied by 100 twice): the top trader of the documented example readroi_pct1752.226 andmax_drawdown_pct10000.0, and now reads 17.522 and 100.0.roi_pctis the window's realized PnL divided by the wallet's current account value, in percent (12.5is 12.5%);max_drawdown_pctis account-level and all-time, not per window.win_rate_pctand the other fields were already right. Field names and types are unchanged. A caller that divided by 100 itself has to stop. The same fix reaches the MCPhl_perp_top_traderstool. - [onchain/wallet-labels] 2026-10-19 ·
POST /v1/onchain/labels/batchhonourschain, and a missing 30-day flow isnull, not0— the route acceptedchainand ignored it: every address was read from the Ethereum label table.ethereum(the default),bscandbasenow each read their own chain's label table and 30-day flow table. The four 30-day fields (net_30d_usd,volume_30d_usd,tx_30d,tokens_30d_count) arenullwhere we hold no flow data for the wallet — everybscwallet today — and for an address we have no label for (found: false). They were0, indistinguishable from a wallet that moved nothing, so a caller that summed or averaged them over a batch now getsnulland has to skip it. Ethereum wallets that have a flow row keep their figures; abaseaddress now gets its own chain's figures instead of the Ethereum wallet's. The same fix reaches the MCPwallet_batch_labelstool. - [api] 2026-10-19 · labels on
bscandbaseresults come from that chain, on/wallets/{address}/counterparties,/wallets/compare,/wallets/{address}/traceand/tokens/{token_address}/holders— all four joined the Ethereum label table onto the result whateverchainsaid, so abscorbaseaddress was labelled with whatever Ethereum says about the same 20 bytes. They now join the requested chain's own label table. Ethereum results are unchanged. The same fix reaches the MCPwallet_counterparties,wallet_compare,wallet_traceandtoken_holderstools. - [onchain/token-screener] 2026-10-19 · ⚠ BREAKING ·
GET /v1/onchain/tokens/screenerrefuses the smart-money filter off Ethereum —smart_money_only=trueandsort=smart_inflowexist forchain=ethereumonly. Onbscandbasethey now return a400. Before, the Ethereum cohort (wallets with over $100k of realized PnL on Ethereum) was applied to the other chain's activity and the result was presented as that chain's smart money; no such cohort exists there. A caller that sends either on those chains has to drop it or usechain=ethereum. The same fix reaches the MCPtoken_screenertool. - [mcp] 2026-10-19 · MCP
wallet_token_balancesno longer advertises chains it does not serve — the input-schema description ofchainssaid "default: eth, bsc, base, arbitrum, polygon, optimism". The tool readsethereumandbsconly, from our own nodes, and scans both by default; any other chain lands inchain_errors, as it does onGET /v1/onchain/wallets/{address}/balances(see the 2026-09-04 entry below). Only the description changed. - [api] 2026-10-19 · ⚠ BREAKING on 2026-11-19 ·
/v1/hyperliquidnames the instrumentsymboleverywhere — the parameter, the paths and the response fields. Requests:symbol=on every route that tookcoin=(coin=still works; both with different values is a400), and the paths/symbols/{symbol}/metrics,/cohort-metrics,/size-breakdown,/liquidation-heatmap,/positions/symbolsand/symbols/hourly./ohlcvand/ohlcv/exportnow acceptcoin=as well, where it was a422. Responses:assetandcoinbecomesymbol,by_coinandby_assetbecomeby_symbol,coin_count→symbol_count,n_coins→n_symbols,share_of_coin→share_of_symbol, and theassetscounts and lists →symbols;/ohlcv'ssymbolis now the resolved id (@107for a spot pair) and its separateassetis gone. Until 2026-11-19 every response also carries the old name beside the new one, with the same value; on that date the old names are removed and the/symbols/hourlycolumnsentryassetbecomessymbol. Switch parsers to the new names before then. Before this change?symbol=on thecoinroutes was silently ignored — an unfiltered200. - [mcp] 2026-10-19 ·
hl_position_matchtakessymbol; its matches carrysymbol— the input wascoin(still accepted), and each match's and the echoed query'scoinis nowsymbol.hl_ohlcvacceptscointoo and its result drops the separateasset(itssymbolis the resolved id). MCP results carry only the new names. - [api] 2026-10-19 ·
GET /v1/hyperliquid/wallets/{address}/fillsand/builders/{builder}/fillspage past a fill whosetrade_idis above 2^63 — such a page'snextCursorwas refused on the next request as malformed (400), so paging stopped there. About 5.1 M fills since 2026-04-02 carry one. - [api] 2026-10-19 ·
GET /v1/onchain/labels/{address}/provenancereturns the raw sources it names — the route never matched most of the raw third-party label sources, so every response carried at most one provider source and the heuristic:source_count: 1for the Binance 14 hot wallet, which four sources name, and0forvitalik.eth. The shape is unchanged;sourcesis longer. The same fix reaches the MCPwallet_label_provenancetool. - [api] 2026-10-19 ·
GET /v1/onchain/wallets/{address}/tracereturns one edge per pair of wallets — two expanded wallets that each ranked the other came back as two mirrored edges, sostats.edge_countover-counted (12 for 9 relationships in the documented example) and a node'stotal_volume_usddepended on the mirrors. Each node'stotal_volume_usdis now the sum of its edges in the graph. The same fix reaches the MCPwallet_tracetool. - [api] 2026-10-19 ·
GET /v1/hyperliquid/wallets/{address}/trades/summarycounts each trade once — every stored version of a still-open trade was counted, inflatingtrade_count,open_trade_count,net_pnland the gain and loss statistics: the top 30-day wallet read 619 trades and $27.1M where 445 and $8.44M existed. Field names and shape are unchanged. - [mcp] 2026-10-17 · An MCP call with a missing or bad credential is HTTP 401 — it was HTTP 200 with a JSON-RPC error in the body. It is now
401withWWW-Authenticate: Bearer resource_metadata="https://vike.io/.well-known/oauth-protected-resource", where an OAuth client starts discovery (the MCP authorization spec). The body is the same JSON-RPC error object, code-32000. Parse errors, unknown methods or tools and failed tool calls still arrive at200; the rate limit stays429. A client that treated a200carrying-32000as "bad key" has to read the status instead. Errors (#1180) - [api] 2026-10-16 ·
GET /v1/polymarket/wallets/{address}andGET /v1/polymarket/smart_moneyadded — the two Polymarket trader tools that existed only over MCP (polymarket_wallet,polymarket_smart_money) now have REST routes that run the same code, so the two surfaces return the same payload. They read the on-chain trade tape, not the recorded book. The polymarket namespace is now 11 routes (68 across the API). Additive; nothing changed on the nine existing routes. - [mcp] 2026-10-16 · ⚠ BREAKING · MCP
options_flow,web_searchandweb_fetchare removed —tools/listnow returns 31 tools.options_flow(Deribit call/put flow) had 1 call in the previous 90 days; the two web tools are a proxy to a third-party search service rather than Vike data, andweb_fetchfetched arbitrary URLs from our servers. Atools/callfor any of the three now returns the unknown-tool error. Nothing replaces them. - [api] 2026-10-16 · ⚠ BREAKING ·
fund_holdingsandGET /v1/onchain/funds/holdingsare removed — the labelled fund / market-maker / treasury / CEX leaderboard is no longer offered on any surface. The MCP tool is gone fromtools/list(34 tools remain), the route answers404, and the/datadataset page and its panel are gone with it. Callers of the REST route or the tool have to drop the call; nothing replaces it. - [onchain/token-transfers] 2026-10-13 ·
GET /v1/onchain/tokens/{token_address}/transfersreturns whole tokens and plain USD —bought,sold,net_tokens,usd_spent,usd_receivedandnet_usdcame back 1,000,000 times too large; only the*_fmtstrings beside them were right. They are now divided once, on this route and on the MCPtoken_transferstool. Field names, order and types are unchanged. A caller that divided by 1e6 itself has to stop. - [api] 2026-10-12 ·
GET /v1/onchain/wallets/{address}/counterpartiesreturns plain USD —total_volume_usd,sent_usdandreceived_usdcame back in micro-USD, 1,000,000 times too large, so this route disagreed with/traceand/wallets/compareabout the same wallet. They are now divided once, on this route and on the MCPwallet_counterpartiestool. Field names, order and types are unchanged. A caller that divided by 1e6 itself has to stop.
2026-09
- [mcp] 2026-09-21 · ⚠ BREAKING · MCP
token_chartremoved;ohlcvreplaced byhl_ohlcvandpolymarket_ohlcv— both tools read the merged centralised-exchange candle engine.ohlcvread it directly;token_chartresolved an ERC-20 contract to a canonical symbol and read the same engine behind it, which is why a per-contract chart could answer for a token that trades nowhere on chain. Vike redistributes market data only from venues whose data is itself on chain — Hyperliquid and Polymarket — so the candle tools are scoped to those two rather than filtered venue by venue.tools/callwith either retired name returns-32601.hl_ohlcvserves Hyperliquid candles andpolymarket_ohlcvserves Polymarket candles; there is no replacement for a candle on a centralised venue, and no candle tool takes a contract address. The REST candle routes are unaffected by this entry —/v1/hyperliquid/ohlcv(/export)and/v1/polymarket/ohlcvalready serve the same two venues. - [api] 2026-09-04 · ⚠ BREAKING ·
/v1/onchain/wallets/{address}/balancesreads the chain, and covers two chains instead of six — balances are nowbalanceOfcalls against our own Ethereum and BSC nodes, with the candidate token list drawn from our transfer index.base,arbitrum,polygonandoptimismare no longer scanned: they come back named inchain_errorsrather than silently contributing nothing. Two response fields are new —balance_raw(the contract's integer, as a string, for callers that need exactness) andname.usd_valueandusd_priceare nownullon a holding we cannot price, and the holding is still listed;total_usdsums only the priced ones and should be read as a floor. The previous provider filtered unpriced holdings out entirely. The route no longer answers200with an emptyholdingsarray when the lookup fails. That was the old shape and it read exactly like an empty wallet. - [api] 2026-09-04 · ⚠ BREAKING ·
GET /v1/onchain/wallets/{address}/defiis removed — decoded DeFi protocol positions, and thedefi_positionsMCP tool beside it. The route was served by an upstream vendor whose free tier was withdrawn on 2026-09-03, and it cannot be rebuilt from our own data: we recordTransferevents, and a lending position is not a transfer. It recorded 4 calls in its entire history, so it was retired rather than replaced.fund_holdingsis unaffected. Calls now return404. - [api] 2026-09-04 ·
/v1/onchain/wallets/{address}/ensresolves over Ethereum RPC — the fallback for an address our pre-resolved table has not seen was an external API; it is now twoeth_calls to the ENS registry over Ethereum RPC — public RPC endpoints first, then our own pool, so the address is sent to those RPC providers (wording corrected 2026-10-19; this entry first said "our own node"). No behaviour change for a caller beyond the obvious one: the fallback works again, where since 2026-09-03 it returned nothing. The name is forward-verified before it is returned — a reverse record is written by the address itself and means nothing until resolving it forward lands back on the same address — so a spoofed record answersnullrather than somebody else's name. - [api] 2026-09-03 · ⚠ BREAKING · the flat Polymarket paths were retired —
/v1/markets,/v1/markets/{condition_id},/v1/market_stats,/v1/ohlcv,/v1/orderbook,/v1/settlements/{condition_id}and/v1/eventsnow return404. They predated the/v1/polymarket/namespace and answered alongside it for compatibility. Add/polymarketafter/v1and nothing else changes — same handlers, same responses. Retired because the usage record showed no caller: 28 requests across their entire history, all from the account that owns the platform. - [api] 2026-09-03 · Polymarket moved to the same service as every other namespace — the nine endpoints were served by a separate process and are now served by the same application as
onchainandhyperliquid. No path, parameter or response shape changed. What did change is below. - [polymarket/markets] 2026-09-03 · ⚠ BREAKING · market state is real —
activeandclosedwere CONSTANTS: every market reportedactive=1, closed=0, so?active=0returned nothing at all and?closed=1returned open markets with a200. State is now derived from on-chain resolutions and the venue's own flag, either of which alone misses thousands. 119,047 of 121,275 markets report closed where none did before. ⚠ If you filtered on these fields, your results change — that is the fix, not a regression.closedis also accepted now as the complement ofactive; passing both is refused rather than silently resolved. - [limits] 2026-09-02 · Archive downloads no longer spend the hourly request budget — a ranged
GETagainst/archive/is still authenticated and still writes its usage row, but it no longer consumes the hourly request allowance. Bulk Parquet readers (pyarrow, DuckDB, fsspec) fetch a footer and then one rangedGETper column chunk, each of which cost a unit: one 1.26 GB partition measured 20,237 usage rows, more than the whole 20,000/hour ceiling for a single file, and almost every rate-limit rejection recorded in the platform's whole history was an archive download./v1and/mcpstill meter normally, and the counter's periodic reseed excludesarchive_downloadrows too, so the skip is not erased 30 seconds later. - [limits] ⚠ BREAKING · 2026-09-02 · Rate-limit rejections speak one dialect on every surface — a throttled request now returns
429withRetry-After: 60and{"error": {"code": "RATE_LIMITED", ...}}. Previously/v1raised{"detail": ...}, the archive gate hand-built{"error": "rate limited"}, and/mcpanswered200with a JSON-RPC error — so a client could not detect throttling by status code at all./mcpstill returns a valid JSON-RPC body and carries the envelope inerror.data. - [api] 2026-09-02 · The published OpenAPI spec declares
X-API-KEY— the/v1spec carried nosecuritySchemesand nosecurity, so a client generated from it omitted the API-key header and401'd on every call. The schemes are injected into the generated spec itself, so the live spec and the exported file cannot disagree; ReDoc moved under/v1/at the same time. - [api] ⚠ BREAKING · 2026-09-02 · The website app stopped publishing its route table —
/openapi.json(283 paths),/docsand/redocare switched off on the website app. Only the data API publishes a schema, scoped under/v1/. No/v1route changed. - [api] ⚠ BREAKING · 2026-09-02 ·
/v1/etf/*and/v1/marketdata/ohlcv(/export)removed — the ETF router is no longer mounted and the marketdata candle routes are deleted; both now404for an authenticated caller, a closure pinned by a regression test so it cannot quietly come back. Public candles remain at/v1/hyperliquid/ohlcv(/export). Usage showed exactly one key had ever called each surface, last on Aug 17 and Aug 6. - [api] 2026-09-02 · New docs site at vike.io/docs/data — replaces the MkDocs site, which documented 8 of the 36 MCP tools the server exposes and quoted rate limits wrong by more than an order of magnitude. It covers getting started, authentication, rate limits, errors, the full 36-tool MCP reference generated from what the registry's
tools/listactually serves, per-client setup (Claude Desktop and Code, Cursor, Gemini CLI, VS Code, raw HTTP), the/v1REST overview and the archive; the Polymarket REST reference landed the same day.PRs #852 · 0b032622,#855 · a0afdb91,#856 · ecf9a730 - [api] 2026-09-01 · Non-finite floats serialize as
nullinstead of failing the request — a singleNaNorInfinityanywhere in a payload previously produced a503through the error handler or a500on/v1, losing the entire response; the field is nownulland the rest of the body arrives. It is also a large latency win on bulk pages: a 5,000-candle page went 44.14 ms to 1.41 ms, and NDJSON export lines 3.35 µs to 0.30 µs.
2026-08
- [hyperliquid/position-snapshots] 2026-08-22 · MCP
hl_position_matchstopped returning closed positions — the tool read a latest-known-position view with no recency filter, and that view keeps a wallet's last-seen row forever (89.8% of rows more than a day stale, the oldest from 2026-04-02), so "who has a 25x ETH long open at $3,200" could answer with a position closed in April while the tool card promised<5 minstaleness. Results are now gated on the newest snapshot batch for the asset. - [hyperliquid/cohort-metrics] ⚠ BREAKING · 2026-08-19 ·
/v1/hl-cohorts/symbols/{symbol}/metricsrefuseslabelBasisand declares its contamination — the route filters every historical hour by today's wallet grading, resolved at request time rather than as of the hour being reported. Measured on the 2026-04-20T12:00Z BTC "3x smart" cohort: 938,495,920.6 against a point-in-time 861,706,562.3 — 8.91% inflated. It used to answer200to a request for honest labels; it now returns400for the parameter and points at/cohort-metrics. - [hyperliquid/cohort-metrics] 2026-08-19 ·
grading=on/v1/hl-cohorts/symbols/{symbol}/cohort-metrics, and responses declare when the label was computed — one parameter selects amongrealized,realized-pitandunrealized, which previously took three different spellings (axis=pnlpluslabelBasis, a separate axis, and no parameter at all). Every response now carrieslabel_computedon the envelope andgradingon every row. - [hyperliquid/cohort-metrics] 2026-08-19 ·
freshnessobject added to cohort-metrics responses — windows reaching the present now carryfreshness: {newest_ts, age_seconds, settled_lag_ceiling_seconds, stale}. Before this,?grading=realized-pit&hours=1with nostartreturned its own newest bucket — measured 63 hours old and identical in shape to a live one, with nothing in the payload letting a program tell them apart.staleis the precomputed verdict, so a caller need not re-derive the rollup cadence. (figure corrected in) - [hyperliquid/candles] 2026-08-18 · New endpoint:
GET /v1/hyperliquid/ohlcv(and/export) — minute-resolution Hyperliquid candles built from executed fills, mirroring/v1/marketdata/ohlcv's parameters and envelope. Two parameters are Hyperliquid-specific:dex(HL core versus builder-deployed HIP-3 perp DEXs) and tick intervals such as15t. - [hyperliquid/cohort-metrics] 2026-08-17 · New cohort axis:
axis=pnl_unrealized— grades a wallet by unrealized PnL on open positions as a share of account value, a different signal from the realized ladder: 44% of wallets change unrealized rung day over day, against 2.4% on realized. Point-in-time by construction, and not reachable through the API at all before this. - [api] ⚠ BREAKING · 2026-08-16 ·
/v1/marketdata/orderbookremoved — the L1/L2 recorder behind it was retired and its stored datasets dropped (quotes 1.376B rows, book events 531M, trades 296M, among others; ~51 GiB reclaimed). The route was their only consumer, so it goes with them rather than becoming a permanent503. There is no orderbook surface. - [api] 2026-08-15 · New namespace:
/v1/etf/*(physical-ETF holdings) — 23 funds, 19 of them with a daily measured source;quantityis a measured count in the fund's own unit, never assets divided by a price. ⚠ This namespace was closed again on 2026-09-02. - [api] 2026-08-12 · Repeated identical
/v1requests return byte-identical bodies — the query engine reducessum()in an unpinned parallel order and f64 addition is not associative, so the last digits of a nine-figure notional were reduction noise: one URL executed six times returned six distinct bodies, with 24–35% of values differing pairwise. Values are now snapped to 10 significant digits at the serialization boundary with a midpoint nudge, which took one research pipeline's content-addressed cache from broken to working; consumers no longer need to canonicalize floats themselves. - [hyperliquid/cohort-metrics] ⚠ BREAKING · 2026-08-11 · One canonical position-size ladder; retired labels now
400; newGET /v1/hl-cohorts/cohorts— the position-size axis had four vocabularies (the site's dollar-range ladder, a storedmicro..megatier vocabulary, and two reconstruction vocabularies). The dollar-range ladder wins:axis=tier,/symbols/{symbol}/size-breakdownand/segmentstrade_sizeall derive the bucket fromsize_usdand serve the same canonical ten labels, largest first, and a retired label in a cohort filter returns400naming the canon. The new flat taxonomy endpointGET /v1/hl-cohorts/cohortspublishes all three ladders. - [hyperliquid/cohort-metrics] 2026-08-11 · New cohort axis:
axis=tieron/symbols/{symbol}/cohort-metrics— the per-position size ladder as the third matrix axis. It is rejected on the per-wallet aggregates (heatmap, segment summary) because a wallet straddles tiers, and the refusal names where the axis is valid; a conflictinglabelBasisis a400rather than a silent downgrade. - [hyperliquid/cohort-metrics] 2026-08-06 ·
labelBasis=point_in_timeonaxis=pnl— the pnl axis had lookahead —axis=pnlresolved the cohort at query time, so a historical row came back with today's grading and a backtest was told which wallets eventually became rankable. Measured on BTC over 3 days: 0 of 852 cells exact before, 852 of 852 after (max relative error 5.45e-16), and hourly totals from 4.37% mean error to 0.000000%. The frozen source costs five fields — no position count, no unrealized PnL, no token-denominated size — which come backnullrather than0and are named inunavailable_fields; every row and the envelope carrylabel_basis. - [hyperliquid/cohort-metrics] 2026-08-06 · New endpoint:
GET /v1/hl-cohorts/symbols/{symbol}/cohort-metrics— returns the full coin-by-cohort matrix in one request instead of one request per bucket (12 for size, 13 for pnl). Measured on BTC over 24 hours: 0.25–0.44 s per axis against ~12 s for the equivalent loop. Paginated by hour rather than by row, so a page never lands mid-bucket. - [hyperliquid/cohort-metrics] 2026-08-06 ·
provisionalflag on/symbols/{symbol}/metricsrows — the endpoint reads an hourly rollup that does not write hour H until H+1:00 to H+1:30; measured, the newest row was 114 minutes old and a client polling for "current positioning" had no way to know. Rows now carryprovisional, true on at most one row (the unsettled right edge), and the live row cuts staleness to roughly 5 minutes. - [hyperliquid/cohort-metrics] 2026-08-06 ·
/segmentsrows carrygroupable; axis error messages fixed —/segmentspublished four axes but only three were valid as?axis=(trade_sizebuckets a position, not a wallet), with nothing in the payload saying so; every row now carriesgroupableso a generated client can filter. Refusals name where the axis is valid, and the "forgot the axis" case no longer reports the server's own default back at the caller. - [api] 2026-08-04 · The
/v1data API goes live on data.vike.io — 34 routes across four namespaces under one host:marketdata,onchain,hyperliquidandpolymarket. The error contract from day one:400for caller input,503for upstream, never a200with an empty body. The same work made archive authentication independent of the website, so a website deploy can no longer500an archive download — the mechanism of the 2026-07-31 outage.PRs #574 · af98d88d,#584 · 638a6d93 - [api] 2026-08-04 ·
/v1/hyperliquidexpands from 2 endpoints to 22 — new: cohort catalogue, per-cohort summary and coin-by-cohort heatmap; position list and history, market-wide OI, hourly coin metrics, trade-size breakdown; trader leaderboard with the full risk-metric set, and per-wallet summary, trades, trade-stats, fills, funding and ledger; liquidation fills, a price-binned liquidation heatmap and liquidation risk by asset; ecosystem stats, perp volume and HYPE holders. Pagination is keyset throughout. - [hyperliquid/builders] 2026-08-04 · New:
/v1/hyperliquid/builders/*(6 routes) — leaderboard, builder profile, that builder's traders, raw fills, a per-bucket time series, and the reverse lookup of which builders a wallet routes through. Schema note for consumers:builder_feeanddeployer_feeare USD, butfeeis denominated infee_token(1.04% of rows pay in something else), so fee aggregates are USD-only and the profile reports what it excluded. - [hyperliquid/builders] 2026-08-04 · New:
GET /v1/hyperliquid/builders/stats, plus richer builder fields — leaderboard rows gainrevenue_per_user,taker_pct,market_share_pctandfirst_seen_lifetime; the profile gainsprofitable_users(_pct),biggest_day,market_share_pct, a lifetime block anduser_volume_distribution(volume deciles)./builders/statsreturns ecosystem totals, all-time builder revenue and a daily series. The same change fixes a keyset pagination bug that could drop or repeat rows. - [hyperliquid/traders-and-leaderboard] 2026-08-04 ·
axis=pnl_abs, a position-age filter, and/leaderboard/flow-adjustedre-enabled — the board was withheld in #588 and now ranks on total realized PnL (closed round-trips), because the upstream ledger records sends one-sided: over 30 days, 1,010,263 negative against 835,295 positive send rows, netting -$1.27B, so an outflow was recorded while the matching inflow was invisible and booked as profit. The attributed figures ship under their ownattributedkey with aflow_unbalancedflag. - [api] 2026-08-04 ·
/v1/marketdata/options/chainreturned settled contracts, not the live chain — the query had no time bound: it aggregated the whole recorded history and returned the oldest expiries first, so a BTC chain request came back with contracts that had settled eight weeks earlier while the live chain was three expiries inside the next 72 hours. The read is now bounded to one snapshot.
2026-07
- [limits] 2026-07-29 · Hourly rate limit raised from 2,000 to 20,000 requests per key — the 2,000 ceiling was sized for the MCP and AI-chat surface and inherited by the data routes, where it was far too low: a real hour measured 2,543 calls with 558 rejected. It is one shared ceiling across
/v1,/mcpand the archive, not a per-surface number — see Rate limits. - [archive] ⚠ BREAKING · 2026-07-29 · The Parquet archive became credential-gated and metered, and usage is labeled per surface —
/archive/downloads are now validated at the edge through the same API-key and OAuth auth, the same hourly limit and the same metering as/mcp, so an unauthenticated download stops working. Usage rows are labeled from the request URI rather than hardcoded —/archive/...toarchive_download,/v1/<route>...toapi_<route>,/mcptomcp, anything else toapi_other. Auth and rate-limit decision logic elsewhere was unchanged; only the label.
2026-06
- [mcp] 2026-06-16 · MCP
perp_funding(symbol=...)fixed — it errored on every call — any symbol-scoped request returned an error instead of data; only the unscoped call worked. The symbol path was rewritten.
2026-05
- [api] 2026-05-30 · New: a historical OHLCV API (REST + MCP) — API-key-gated historical candles built on a canonical 1-minute base and correct at any timeframe from
1mto1w: UTC left-aligned buckets, partial buckets excluded so the series is look-ahead-safe, and deterministic cursor pagination. Shares MCP auth, the hourly rate limit and usage logging. ⚠ This surface is no longer documented — see the note at the foot of this page — and its MCP tool was removed on 2026-09-21. - [api] 2026-05-30 ·
include_partialflag onohlcv(REST + MCP);token_chartreturns real candles —include_partialis off by default (look-ahead-safe); switched on, it includes the in-progress current candle.token_chartwas a stub and now resolves a token address to a canonical symbol and serves real candles through the ohlcv engine, with the legacy5/30/120values mapping to5m/30m/2h. ⚠ Both tools were removed on 2026-09-21. - [mcp] 2026-05-26 · New MCP tool:
hl_position_match— reverse-lookup of Hyperliquid share cards.72bafc07 - [limits] 2026-05-25 · Hourly per-key cap raised from 100 to 2,000 — headroom for agent workloads, where one skill workflow can call 5–15 tools per turn.
da4c744d - [mcp] 2026-05-25 · 5 new MCP tools (v0.7) —
wallet_transactions,wallet_compare,wallet_trace,wallet_batch_labels,token_screener.fdc32aad - [mcp] 2026-05-25 · 4 new MCP tools (v0.5.0) —
alerts_register_webhook,wallet_counterparties,wallet_pnl_history,wallet_token_balances.2832bb04 - [mcp] 2026-05-25 · New MCP tool
wallet_ens;defi_positionschanges data provider — the data source behind an existing tool changes.00cfc5ce - [mcp] 2026-05-25 · 2 new MCP tools —
web_search,web_fetch.e2143e3f - [mcp] 2026-05-25 · 4 new MCP tools (v0.3.0) —
fund_holdings,wallet_label_provenance,token_holders,defi_positions.65a51900 - [mcp] 2026-05-25 · 4 new Polymarket MCP tools —
polymarket_markets,polymarket_market_detail,polymarket_wallet,polymarket_smart_money.57d327c1
2026-04
- [mcp] 2026-04-20 · New MCP tool:
hl_perp_top_traders—138e9234 - [mcp] 2026-04-19 · OAuth 2.1 and Dynamic Client Registration on
/mcp— the MCP endpoint acceptsAuthorization: BeareralongsideX-API-KEY, with RFC 8414 discovery, RFC 7591 dynamic client registration, Authorization Code + PKCE S256, refresh-token rotation and RFC 7009 revocation — so Claude Desktop's "Add custom connector" dialog works with nomcp-remoteand no JSON config. The rate limit stays per credential: perapi_key_idfor API keys, pooled peruser_idfor OAuth.72774187 - [mcp] 2026-04-16 · MCP server launches:
POST /mcp, JSON-RPC 2.0,X-API-KEYauth, 9 tools — initial tools: token search, wallet summary, wallet discover, transfers, chart, perps leaderboard, funding, spreads, options flow. Per-tool credit costs, hourly rate limiting and usage tracking ship with it.7d9bec99
What this page cannot see
Entries are derived from the repository's own history — read from the commit diff, not the subject line — rather than from probing the deployed API. Four gaps are structural, and it is better to name them than to let the page imply completeness:
/v1/polymarket/*has no dated history here. Those routes are served by a separate system with its own history, and were frozen at the/v1cutover on 2026-08-04. The current surface is documented in Polymarket REST; its change history is not on this page.- Some surfaces this history records are no longer documented. Entries above describe endpoints and MCP tools that shipped and are not in the current reference — the CEX candle, perp and options surfaces. ⚠ They carry no ⚠ BREAKING entry deliberately, because that marker means a caller had to change something and nothing here was withdrawn from callers: the documentation was withdrawn, not the routes. Treating an undocumented surface as a supported one is the mistake this note exists to prevent.
- Edge configuration is applied outside this history. Routing, edge caching, throughput caps, compression and which paths are gated can change without a commit to record, so an edge-only change is invisible here.
- The archive's dataset inventory is generated on the host, not committed. There are no "dataset added to the archive" entries above, and that is absence of evidence rather than evidence of absence — the open
manifest.jsonis the live answer for what the archive holds today.