> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0xinsider.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> The Markdown of an API reference page leaves out the OpenAPI schema.
> Every object an endpoint returns or a webhook carries, with each field's type, presence and meaning, is on https://docs.0xinsider.com/api-reference/objects.md.
> The full OpenAPI 3.1 spec names each operation's and each webhook's exact parameters, request body and response schema: https://docs.0xinsider.com/api-reference/openapi.json.

# API changelog: October 25 to 26, 2026

> 13 API, SDK, CLI, MCP, OAuth, and feed changes from October 25 to 26, 2026, newest first, each with its effect on clients. Newer ones are on the API changelog.

These are the API changelog entries from October 25 to 26, 2026, newest first. The newest changes are on the [API changelog](https://docs.0xinsider.com/changelog.md).

**October 26, 2026**

Old V1 field spellings and webhook event names are removed on February 1, 2027

The renamed V1 response fields and webhook event types now have a sunset date: 2027-02-01T00:00:00Z. Until then every old spelling is still sent beside its new name with the same value. From that date the old spellings are no longer sent or accepted.

Before this change, the old spellings had no end date. The [OpenAPI document](https://0xinsider.com/api/v1/openapi.json), the TypeScript SDK's types and the MCP tool descriptions now mark each one deprecated and name the date.

| Old spelling | Read instead | Where |
| - | - | - |
| `signal_score`, `recorded_signal_score` | `review_score`, `recorded_review_score` | [Large trades](https://docs.0xinsider.com/api-reference/endpoint/get-large-trades.md) |
| `smart_money` | `sharp_money` | [Market flow](https://docs.0xinsider.com/api-reference/endpoint/get-market-flow.md), [the flow batch](https://docs.0xinsider.com/api-reference/endpoint/batch-get-market-flow.md), [sharp-money flows](https://docs.0xinsider.com/api-reference/endpoint/sharp-money-flows.md) |
| `whale_trade_count` | `large_trade_count` | Flow bodies and [explore markets](https://docs.0xinsider.com/api-reference/endpoint/explore-markets.md) |
| `whale_distinct_wallets`, `whale_total_usd`, `whale_last_trade_at` | `large_trade_distinct_wallets`, `large_trade_total_usd`, `large_trade_last_at` | Explore markets |
| `score_components.whale_signal`, `score_components.smart_money_signal` | `large_trade_signal`, `sharp_money_signal` | Explore markets |
| `rep_whales` | `rep_large_trades` | Explore groups |
| `sort=whales` | `sort=large_trades` | Explore markets; from the date `whales` returns `400` |
| `whale_signal`, `insider_radar` | `large_trades`, `suspicious_trades` | [Coverage](https://docs.0xinsider.com/api-reference/endpoint/get-coverage.md) capabilities |
| `completeness.covered_days_with_whale_activity` | `covered_days_with_large_trade_activity` | Reports |
| `market.market_type`, `market.market_result` | Nothing. Both are always `null` | [Market snapshot](https://docs.0xinsider.com/api-reference/endpoint/get-market-snapshot.md) |
| `whale_trades_inserted`, `whale_trader_synced`, `insider_radar_flag_raised`, `smart_money_flow_detected` | `large_trades_inserted`, `trader_synced`, `suspicious_trade_flagged`, `sharp_money_flow_detected` | Webhook event types |

The OpenAPI document also drops `pnl.last_7d` and `pnl.last_30d` from the trader schema. The API has not sent either field since they were deprecated, so no response changes.

**Backward compatible** until 2027-02-01. **Breaking** from that date for clients that read an old field spelling, send `sort=whales`, or subscribe a webhook endpoint to an old event type.

**What to change:** Read the new field names, send `sort=large_trades`, and register webhook endpoints under the new event types before 2027-02-01. A client that already reads the new names needs no change.

**October 26, 2026**

Pick of the Day ledger permalinks point at each pick's stable page

Every entry's `permalink` on [`GET /api/v1/pick-of-the-day/ledger`](https://docs.0xinsider.com/api-reference/endpoint/get-pick-of-the-day-ledger) and [`GET /api/v1/pick-of-the-day/ledger/{pick_id}`](https://docs.0xinsider.com/api-reference/endpoint/get-pick-of-the-day-ledger-entry) is now the pick's stable page, `https://0xinsider.com/pick-of-the-day/picks/{pick_id}`.

Before this change it was the dated address, `https://0xinsider.com/pick-of-the-day/{date}/{rank}`. That address now answers `308 Permanent Redirect` to the same stable page, and `404` when no published pick holds the slot.

**Backward compatible.** Every permalink you stored still opens its pick, through the redirect.

**What to change:** Nothing. If you parse the date or rank out of `permalink`, read `pick_date` and `pick_rank` on the entry instead.

**October 26, 2026**

Grade drawdown and smoothness, and streak\_tier, read sports and esports days

The drawdown and equity smoothness inside `grade` and `score` are now measured on the wallet's sports and esports realized P\&L by day, the series [`GET /api/v1/trader/{address}/pnl`](https://docs.0xinsider.com/api-reference/endpoint/get-trader-pnl) returns. `streak_tier` now compares the wallet's sports and esports realized P\&L over the last 7 days with other wallets.

Before this change, both read the day-to-day differences of Polymarket's P\&L curve for the whole wallet, which covers every market.

* Forecasting edge and the Sortino ratio inside the grade still read every market the wallet trades.
* `streak_tier` is returned by [`GET /api/v1/trader/{address}`](https://docs.0xinsider.com/api-reference/endpoint/get-trader), [`POST /api/v1/traders/batch`](https://docs.0xinsider.com/api-reference/endpoint/batch-get-traders), [`GET /api/v1/leaderboard`](https://docs.0xinsider.com/api-reference/endpoint/get-leaderboard), [`GET /api/v1/leaderboard/trending`](https://docs.0xinsider.com/api-reference/endpoint/list-trending-wallets) and the MCP tools built on them. `grade` changes wherever it is returned, including large trades, positions and their `min_grade` filters.
* A wallet's `grade` and `score` change at its next grading pass after the release. On a copy of production from October 26, 1,359 of 162,394 graded wallets (0.8%) changed letter, 408 of them to or from `S`, `A` or `B`; the number of wallets at each letter moved by 7 at most.
* A wallet whose sports and esports days 0xinsider has not computed yet keeps the previous drawdown and smoothness; while any wallet waits, `streak_tier` keeps the previous basis for every wallet.

**Backward compatible.** Field names, types, allowed values and presence rules are unchanged; what the values measure changes.

**What to change:** Nothing. If you store grades or streak tiers, expect a one-time change for some wallets.

**October 26, 2026**

Trending wallets' daily P\&L series covers sports and esports markets only

[`GET /api/v1/leaderboard/trending`](https://docs.0xinsider.com/api-reference/endpoint/list-trending-wallets) and the `get_trending_wallets` MCP tool now return each wallet's `daily_pnl_series` as its sports and esports realized P\&L by day: the same day series [`GET /api/v1/trader/{address}/pnl`](https://docs.0xinsider.com/api-reference/endpoint/get-trader-pnl) serves, cut to the window.

Before this change, `daily_pnl_series` was the day-to-day differences of Polymarket's P\&L curve for the whole wallet, which covers every market, and a day without a curve point was left out.

* The series has one point for each UTC day of the window, oldest first, with `pnl_usd` `0` on a day with no sports or esports realized P\&L.
* `daily_pnl_series_status` is new and always present: `ready`, or `pending` while 0xinsider has not computed the wallet's sports and esports days or does not have the wallet. A pending series is empty, which never means zero.
* `trending_pnl_usd`, `rank` and the order are unchanged: they stay Polymarket's leaderboard figure across every market, so the series does not add up to `trending_pnl_usd`.
* The TypeScript SDK's types and the MCP tool's output schema add `daily_pnl_series_status`.

**Breaking** for clients that read `daily_pnl_series` as the wallet's P\&L across every Polymarket market, or an empty series as a wallet with no P\&L. Field names and parameters are unchanged; `daily_pnl_series_status` is added.

**What to change:** Read the series as sports and esports P\&L. Treat `daily_pnl_series_status: "pending"` as not computed yet and request the list again later.

**October 26, 2026**

Trader daily P\&L covers sports and esports markets only

[`GET /api/v1/trader/{address}/pnl`](https://docs.0xinsider.com/api-reference/endpoint/get-trader-pnl) and the `get_trader_pnl` MCP tool now return the wallet's sports and esports realized P\&L by day. A day's `daily_change` is the realized P\&L of the wallet's sports and esports markets dated to it: a settled market on its resolution day, else its last trade day, and an open market's realized part on its last trade day. The days add up to the Sports P\&L that [`GET /api/v1/trader/{address}`](https://docs.0xinsider.com/api-reference/endpoint/get-trader) returns as `pnl.in_scope.realized_pnl`, with the new `realized.undated_pnl` added.

Before this change, `daily_change`, `cumulative_profit` and `total_pnl` were the day-to-day differences of Polymarket's P\&L curve for the whole wallet, which covers every market and cannot be split per market. `markets_traded` counted every market the wallet's stored fills touched that day.

* `series_status` is always present: `ready`, or `pending` while 0xinsider has not computed the wallet's sports and esports series yet. A pending response has empty sections, default `stats`, and `null` for `realized` and `freshness_at`. Its empty sections never mean zero.
* `realized` is always present, `null` while pending: `basis`, `realized_pnl`, `dated_pnl` and `undated_pnl`, at full precision. `dated_pnl` is the sum of every day's `daily_change`, and `undated_pnl = realized_pnl - dated_pnl`. `realized_pnl` starts from Polymarket's figures and the days from 0xinsider's per-market record, so `undated_pnl` holds the wallet's rebate share, corrections, markets with no trade date, and the difference between Polymarket's figure and the per-market record, which on some wallets is most of it.
* `cumulative_profit` and `total_pnl` are the running sum of `daily_change`. `stats`, `monthly`, `year_totals` and `drawdown` derive from the new series.
* `entries` has one point for each UTC day with realized P\&L or sports and esports volume. A day with volume and nothing realized has `daily_change` `0`.
* `markets_traded` is absent on a day whose stored fills include a market outside sports and esports. `total_volume` is absent on a day with realized P\&L and no stored sports or esports fill.
* `monthly[].markets_traded`, until now always an integer, is `null` for a month with such a day, where a sum would undercount.
* `freshness_at` is when the wallet's sports and esports record was last computed, where it was when the wallet-wide series was last rebuilt.
* The TypeScript SDK's types and the MCP tool's output schema add both fields.

**Breaking** for clients that read the series as the wallet's P\&L across every Polymarket market, read an empty series as a wallet with no P\&L, or require an integer in `monthly[].markets_traded`. Field names and parameters are unchanged; `series_status` and `realized` are added.

**What to change:** Read the series as sports and esports P\&L. Treat `series_status: "pending"` as not computed yet and retry later, and accept `null` in `monthly[].markets_traded`. To match `pnl.in_scope.realized_pnl`, add `realized.undated_pnl` to the last `cumulative_profit`.

**October 26, 2026**

Polymarket links carry the via=0xinsider partner tag before the referral tag

`polymarket_url` on [`GET /api/v1/pick-of-the-day`](https://docs.0xinsider.com/api-reference/endpoint/get-pick-of-the-day) and on each combo leg's `market` from [`GET /api/v1/combos/fills`](https://docs.0xinsider.com/api-reference/endpoint/list-combo-fills) and [`GET /api/v1/combos/{condition_id}`](https://docs.0xinsider.com/api-reference/endpoint/get-combo) now ends in `?via=0xinsider&r=0xinsidercom` instead of `?r=0xinsidercom`. `via=0xinsider` is 0xinsider's tag in Polymarket's partner program; `r=0xinsidercom` is the Polymarket referral tag it already carried. The path is unchanged. The MCP tools that return these fields change the same way.

A response cached before the change keeps the old query string until it expires.

**Backward compatible.** The field keeps its name, type and presence rules; only its query string changes.

**What to change:** Nothing if you open or display the URL as returned. If you compare `polymarket_url` with a URL you build, or strip its query string to find the page, expect the two parameters in this order.

**October 26, 2026**

A trader's daily markets\_traded no longer counts unstored markets outside sports and esports

`entries[].markets_traded` on [`GET /api/v1/trader/{address}/pnl`](https://docs.0xinsider.com/api-reference/endpoint/get-trader-pnl) counts the markets of the fills 0xinsider stores for the wallet that day. Since late October 2026 0xinsider does not store a fill in a market outside sports and esports, and the day's count no longer adds such a market either.

Before this change, from October 25, 2026, a day on which the wallet traded a market outside sports and esports still counted that market, although none of its fills was stored. Each wallet's stored days are rebuilt without those markets at its next full daily rebuild, at the latest within a week.

* Fills in markets outside sports and esports that 0xinsider stored before October 2026 still count until they are removed.
* `daily_change`, `cumulative_profit` and `total_pnl` still follow Polymarket's P\&L for the whole wallet, and `total_volume` is unchanged.

**Backward compatible** in shape: no field is added, removed, or retyped. `markets_traded` can be lower on days from October 25, 2026 for wallets that also trade markets outside sports and esports.

**What to change:** Nothing. If you stored `markets_traded` for those days, read them again after a week.

**October 26, 2026**

The sports and esports P\&L shares rebates out by trading volume

On `basis` `polymarket_sports_esports_v1`, `pnl.in_scope.realized_pnl` on [`GET /api/v1/trader/{address}`](https://docs.0xinsider.com/api-reference/endpoint/get-trader) and [`POST /api/v1/traders/batch`](https://docs.0xinsider.com/api-reference/endpoint/batch-get-traders), and `in_scope.realized_pnl` on [`GET /api/v1/leaderboard`](https://docs.0xinsider.com/api-reference/endpoint/get-leaderboard), now add the sports and esports share of the wallet's maker and taker rebates by trading volume: the wallet's Polymarket volume in sports and esports over its Polymarket volume overall, capped at 1. The grade ranks the same figure.

Before this change the rebates were shared out by cost. 0xinsider no longer stores a wallet's markets outside sports and esports, so on wallets that keep trading other markets the cost share kept growing toward 1 and credited sports with rebates earned elsewhere. Rebates accrue with volume.

* While Polymarket reports no overall volume for the wallet, the cost share still applies.
* `sports_esports_split_v1` is unchanged: it still shares fees, refunds and rebates out by cost.
* The other `in_scope` fields, the other `pnl` fields, and `basis` are unchanged. The TypeScript SDK's description changes the same way.

**Backward compatible** in shape: no field is added, removed, or retyped. The value of `realized_pnl` changes for wallets on `polymarket_sports_esports_v1` that earned rebates.

**What to change:** Nothing. If you stored `realized_pnl` figures, compare new ones only with figures read after this change.

**October 26, 2026**

Pick of the Day increases the public daily capacity from 20 to 25

[`GET /api/v1/pick-of-the-day`](https://docs.0xinsider.com/api-reference/endpoint/get-pick-of-the-day), its dated reads, the [archive](https://docs.0xinsider.com/api-reference/endpoint/get-pick-of-the-day-archive.md), and MCP `get_pick_of_the_day` now support up to 25 active recommendations per date in `America/New_York`. Max opens all available published recommendations; Pro keeps its allowance of 5, including the designated free selection.

Before this change, the public daily capacity and Max allowance were 20. After withdrawals or release declines, later additions can now use compatibility `pick_rank` values through 30, while the date still has at most 25 active recommendations.

* In the OpenAPI document and the Pick of the Day MCP tool's output schema, `pick_count` now has a maximum of 25 and every `pick_rank` (in `picks`, `scheduled_picks`, `locked_picks`, `proof_pending_picks` and the archive) a maximum of 30.
* The public ledger's `publication_order` runs from 1 to 30. The [`0xinsider/picks`](https://github.com/0xinsider/picks) verifier accepts it.
* Withdrawal gaps do not change existing pick IDs, order, or proof bytes. Use `pick_id` for identity and `publication_order` for presentation. A date can have fewer than 25 recommendations.
* [`potd-trader` v0.4.5](https://github.com/0xinsider/potd-trader/releases/tag/v0.4.5) accepts up to 25 daily recommendations and ranks through 30 for Polymarket and Kalshi. Its default spending limits are unchanged.

**Breaking** for clients that enforce the old pick-count or rank bounds. The response fields and types are unchanged.

**What to change:** Remove assumptions that a public date has at most 20 active recommendations or that `pick_rank` cannot exceed 25. Stop older `potd-trader` watchers and upgrade to `v0.4.5`: older releases stop buying at 20 Max picks and refuse a slate with a rank above 25.

**October 26, 2026**

The export's risk\_summary.kelly\_fraction counts sports and esports markets only

In the dataset export file from [`POST /api/v1/trader/{address}/export`](https://docs.0xinsider.com/api-reference/endpoint/submit-trader-export), `risk_summary.kelly_fraction` is now the Kelly fraction of the wallet's resolved sports and esports markets: the markets the file's `markets` section lists. `export_metadata.scope_note` says so.

Before this change it counted every resolved market the wallet traded. 0xinsider no longer stores a wallet's markets outside sports and esports, so that figure would have kept changing as those markets dropped out.

* It is `null` when the wallet has fewer than 5 resolved sports and esports markets, or no win or no loss among them. On a sample of 1,000 wallets that trade both kinds of market, 197 of 939 values became `null`, and 116 changed sign.
* The other `risk_summary` fields, `risk_metrics`, and `quant_metrics` still cover every market of the wallet.
* A file written before this change keeps its old value and its old `scope_note`.

**Backward compatible** in shape: no field is added, removed, or retyped. The value changes for wallets that trade outside sports and esports.

**What to change:** Nothing, unless you compare `kelly_fraction` across files. Compare it only between files whose `scope_note` names `risk_summary.kelly_fraction`.

**October 26, 2026**

The sports and esports P\&L starts from Polymarket's own sports and esports figures, with a new basis value

`pnl.in_scope.realized_pnl` on [`GET /api/v1/trader/{address}`](https://docs.0xinsider.com/api-reference/endpoint/get-trader) and [`POST /api/v1/traders/batch`](https://docs.0xinsider.com/api-reference/endpoint/batch-get-traders), and `in_scope.realized_pnl` on [`GET /api/v1/leaderboard`](https://docs.0xinsider.com/api-reference/endpoint/get-leaderboard), now start from the realized P\&L Polymarket itself reports for the wallet in its sports and esports categories. 0xinsider adds the wallet's maker and taker rebates, which those figures leave out, shared out by cost, and the sports and esports part of any published `pnl.correction`. The grade ranks the same figure.

Before this change the figure split Polymarket's realized P\&L for the whole wallet by market, and shared fees, refunds and rebates out by cost. On wallets that trade both sports and other markets, that split could credit sports with P\&L earned elsewhere: on October 26, 2026, one graded wallet's split figure was $3,487,183 where Polymarket's sports and esports figures summed to $136,339.

* `basis` tells the two rules apart. `polymarket_sports_esports_v1` is the new rule. `sports_esports_split_v1` is the earlier split, which a wallet keeps until both of its category figures are confirmed.
* A wallet that Polymarket does not list in a category counts 0 there once that has been confirmed.
* `markets`, `markets_resolved`, `win_rate`, `markets_out_of_scope` and `as_of` are unchanged. Every other `pnl` field still covers all of the wallet's Polymarket markets.
* The MCP tools that return these objects and the TypeScript SDK's descriptions change the same way.

**Backward compatible** in shape: no field is added or removed, and `basis` was always a string. The value of `realized_pnl` changes for many wallets that trade outside sports and esports.

**What to change:** If you check `basis` against `sports_esports_split_v1`, accept `polymarket_sports_esports_v1` too. Compare `realized_pnl` figures only within one `basis`.

**October 25, 2026**

A wallet needs a sports or esports market to have a grade

[`GET /api/v1/trader/{address}`](https://docs.0xinsider.com/api-reference/endpoint/get-trader) and every response that carries a wallet's `grade` now omit `grade` and `score` for a wallet that holds no sports or esports market. Grades are also ranked only against wallets that hold at least one.

Before this change, about 31,300 such wallets held a grade (mostly `C` and `D`), ranked on sports and esports profit of exactly \$0. Ranking them pushed every other wallet's position up or down.

* About 31,300 wallets lose their grade. None of them was `S`, `A`, or `B`.
* About 20,500 of the 165,000 wallets still ranked move one band. Most move up from `D` to `C` or `F` to `D`. About 1,700 move down: `S` to `A`, `A` to `B`, or `B` to `C`.
* The leaderboard, which lists `S`, `A`, and `B`, shrinks from about 11,450 wallets to about 9,950.
* A wallet that makes its first sports or esports trade can be graded again from the next hourly ranking.

**Breaking** for clients that expect every tracked wallet to have a grade, or that store band counts.

**What to change:** Treat a missing `grade` as "no sports or esports record", as you already treat an ungraded wallet. Refresh any stored grades after October 25, 2026.

**October 25, 2026**

A trader's daily total\_volume counts sports and esports markets only, on every day

[`GET /api/v1/trader/{address}/pnl`](https://docs.0xinsider.com/api-reference/endpoint/get-trader-pnl) now returns `entries[].total_volume` as the cash the wallet traded that day in sports and esports markets, on every day. [`GET /api/v1/trader/{address}/export`](https://docs.0xinsider.com/api-reference/endpoint/get-trader-export-snapshot) and the export file sum the same figure into `exported_activity_volume`.

Before this change, `total_volume` was the cash traded across every market, and it was absent on every day from October 23, 2026, because 0xinsider no longer stores every fill outside sports and esports.

* `markets_traded` still counts every market the wallet traded that day.
* `provider_activity_volume_gap` and `activity_volume_coverage` are always `null`. `provider_lifetime_volume` covers every market, so a difference or ratio of the two measures nothing.
* A wallet whose stored history 0xinsider has not rebuilt yet keeps the earlier figure, absent from October 23, 2026, until its rebuild. One wallet's entries never mix the two.
* `stats.total_volume` on [`GET /api/v1/trader/{address}`](https://docs.0xinsider.com/api-reference/endpoint/get-trader) is unchanged: Polymarket's full-history volume across every market.
* The MCP tools that return these objects and the TypeScript SDK's descriptions change the same way.

**Breaking** for clients that read `entries[].total_volume` or `exported_activity_volume` as volume across every market. Both keep their names and types.

**What to change:** Read both as sports and esports volume. Stop reading `provider_activity_volume_gap` and `activity_volume_coverage`, and compare `exported_activity_volume` with `stats.total_volume` only as two different measures.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.