@0xinsider/mcp 2.14.4 → 2.14.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -171,6 +171,196 @@ export type CategorySkillV2 = {
171
171
  edge_lower_95: number | null;
172
172
  brier_event_avg: number | null;
173
173
  };
174
+ export type Combo = {
175
+ /** Combo identifier: 0x followed by 62 lowercase hex characters. This differs from a binary market condition ID. */
176
+ condition_id: string;
177
+ leg_count: number | null;
178
+ prepared_at: string | null;
179
+ /** Whether the preparation event has been indexed. */
180
+ legs_known: boolean;
181
+ legs: ComboLeg[];
182
+ window: ComboWindowStats | null;
183
+ totals: ComboTotals | null;
184
+ /** Result of the YES conjunction, independent of the wallet side or its P&L. */
185
+ status: "pending" | "won" | "lost" | "unknown";
186
+ /** Reason the conjunction result cannot be verified, when unknown. */
187
+ status_reason: string | null;
188
+ };
189
+ export type ComboCoverage = {
190
+ state: "paused" | "uninitialized" | "stale" | "backfilling" | "live";
191
+ ingest_enabled: boolean;
192
+ cursors: ComboCoverageCursor[];
193
+ max_lag_blocks: number | null;
194
+ oldest_cursor_update: string | null;
195
+ lifecycle_lag_blocks: number | null;
196
+ lifecycle_backfilling: boolean;
197
+ /** Time the coverage state was evaluated; not a market-price timestamp. */
198
+ computed_at: string;
199
+ };
200
+ export type ComboCoverageCursor = {
201
+ /** Indexed contract. */
202
+ contract: string;
203
+ last_block: number;
204
+ seed_block: number;
205
+ seed_origin: string;
206
+ chain_finalized_block: number | null;
207
+ lag_blocks: number | null;
208
+ updated_at: string;
209
+ };
210
+ /** One combo with its newest 100 fills and all-time lifecycle totals. Paid API callers receive full access. */
211
+ export type ComboDetail = {
212
+ access: "full";
213
+ combo: Combo;
214
+ fills: ComboFill[];
215
+ lifecycle: ComboLifecycleStats | null;
216
+ coverage: ComboCoverage;
217
+ };
218
+ export type ComboFill = {
219
+ /** Stable fill identity. */
220
+ id: string;
221
+ block_number: number;
222
+ log_index: number;
223
+ block_timestamp: string;
224
+ tx_hash: string;
225
+ /** Taker wallet address. */
226
+ trader: string | null;
227
+ trader_name: string | null;
228
+ trader_grade: "S" | "A" | "B" | "C" | "D" | "F" | null;
229
+ /** Recorded wallet-wide trade time. */
230
+ last_traded_at: string | null;
231
+ action: "buy" | "sell";
232
+ /** Combo identifier: 0x followed by 62 lowercase hex characters. This differs from a binary market condition ID. */
233
+ condition_id: string;
234
+ /** 0 is YES, 1 is NO. */
235
+ outcome_index: number;
236
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
237
+ shares: string;
238
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
239
+ collateral_usdc: string;
240
+ /** Execution price for the traded outcome; null for a zero-share event. */
241
+ price: string | null;
242
+ /** Execution price normalized to YES. */
243
+ price_yes: string | null;
244
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
245
+ fee_usdc: string;
246
+ leg_count: number | null;
247
+ /** Result of the YES conjunction, independent of the wallet side or its P&L. */
248
+ status: "pending" | "won" | "lost" | "unknown";
249
+ status_reason: string | null;
250
+ won_legs: number;
251
+ /** Shares per dollar at execution; not a forecast or guaranteed return. */
252
+ payout_multiplier: string | null;
253
+ legs: ComboLeg[];
254
+ };
255
+ export type ComboFillsResponse = {
256
+ object: "list";
257
+ data: ComboFill[];
258
+ sort: "recent" | "largest" | "payout";
259
+ window: "24h" | "7d" | "all";
260
+ limit: number;
261
+ coverage: ComboCoverage;
262
+ /** A continuation is available based on page fullness. Its next page may be empty. */
263
+ has_more: boolean;
264
+ /** Exclusive block_number:log_index continuation for recent ordering. */
265
+ next_cursor?: string;
266
+ /** Continuation offset for largest or payout ordering. */
267
+ next_offset?: number;
268
+ meta: ResponseMeta;
269
+ /** Not computed for combo fill pages; omitted. */
270
+ total?: number;
271
+ };
272
+ export type ComboLeg = {
273
+ leg_index: number;
274
+ outcome_index: number;
275
+ module_id: number;
276
+ state: "pending" | "won" | "lost" | "void" | "unknown";
277
+ market: ComboLegMarket | null;
278
+ };
279
+ export type ComboLegMarket = {
280
+ /** Source of the leg facts. */
281
+ source: "markets" | "provider";
282
+ /** Full binary CTF condition ID for this leg. */
283
+ condition_id: string;
284
+ title: string | null;
285
+ slug: string | null;
286
+ event_slug: string | null;
287
+ /** Provider-resolved URL including the referral tag. */
288
+ polymarket_url?: string;
289
+ outcome_label: string | null;
290
+ image: string | null;
291
+ category: string | null;
292
+ /** Provider outcome index; negative sentinels describe void or unresolved states. */
293
+ winning_outcome: number | null;
294
+ resolved_at: string | null;
295
+ /** A closed market may still have no terminal outcome. */
296
+ market_closed: boolean | null;
297
+ /** Stored daily price for this leg outcome token; not a live quote. */
298
+ pick_price_daily: number | null;
299
+ /** Observation time of the stored daily price. */
300
+ pick_price_as_of: string | null;
301
+ /** Whole days since the stored daily bucket. */
302
+ pick_price_age_days: number | null;
303
+ /** Unmodified provider leg status when available. */
304
+ provider_leg_status: string | null;
305
+ };
306
+ export type ComboLifecycleStats = {
307
+ splits: number;
308
+ merges: number;
309
+ redeems: number;
310
+ compresses: number;
311
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
312
+ split_usdc: string;
313
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
314
+ merge_usdc: string;
315
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
316
+ redeemed_shares: string;
317
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
318
+ redeemed_usdc: string;
319
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
320
+ compressed_usdc: string;
321
+ last_event_at: string;
322
+ };
323
+ export type ComboLiveCount = {
324
+ /** Traded combos whose YES conjunction remains pending. */
325
+ count: number;
326
+ /** Time the count was computed; check its age before using it. */
327
+ computed_at: string;
328
+ };
329
+ export type ComboResponse = {
330
+ object: "combo";
331
+ data: ComboDetail;
332
+ meta: ResponseMeta;
333
+ };
334
+ /** Stored live combo count. Null means the first count is unavailable, never zero. */
335
+ export type CombosSummary = {
336
+ live: ComboLiveCount | null;
337
+ };
338
+ export type CombosSummaryResponse = {
339
+ object: "combos_summary";
340
+ data: CombosSummary;
341
+ meta: ResponseMeta;
342
+ };
343
+ export type ComboTotals = {
344
+ fills: number;
345
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
346
+ volume_usdc: string;
347
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
348
+ largest_fill_usdc: string;
349
+ first_fill_at: string;
350
+ last_fill_at: string;
351
+ /** Last taker execution normalized to YES; not a current quote. */
352
+ last_fill_price_yes: string | null;
353
+ last_fill_outcome_index: number;
354
+ last_fill_action: "buy" | "sell";
355
+ };
356
+ export type ComboWindowStats = {
357
+ fills: number;
358
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
359
+ volume_usdc: string;
360
+ distinct_traders: number;
361
+ /** Exact decimal string from the stored chain or SQL value; preserve precision until display. */
362
+ largest_fill_usdc: string;
363
+ };
174
364
  export type ContentSearchResult = {
175
365
  /** Backend-owned stable editorial content identifier. */
176
366
  content_id: string;
@@ -391,6 +581,7 @@ export type ExploreGroup = {
391
581
  category: string | null;
392
582
  /** Markets in the event cluster, ranked by volume with condition_id as the tie-breaker. The selected representative is retained within the 12-market cap. */
393
583
  markets: ExploreMarket[];
584
+ /** The volume of the group's highest-volume market, which is markets[0]: the same figure as that market's volume, Polymarket's cumulative taker volume in shares rather than cash. Null when unavailable. */
394
585
  rep_volume: number | null;
395
586
  /** Canonical key since #16304; rep_whales is its deprecated spelling, emitted beside it with the same value. */
396
587
  rep_large_trades: number | null;
@@ -412,6 +603,7 @@ export type ExploreMarket = {
412
603
  platform: "polymarket" | null;
413
604
  /** closed once Polymarket has closed trading or the market has resolved; active otherwise. The same rule labels a market on markets/search, markets/explore and market/{condition_id}/snapshot. */
414
605
  status: "active" | "closed";
606
+ /** Polymarket's traded-volume figure for the market, as last stored: cumulative taker volume in shares, each counted at its $1 settlement value, not the cash that changed hands (100 shares bought at $0.40 add 100, not 40). It can lag Polymarket's current figure. sort=volume orders by it. Null when unavailable. */
415
607
  volume: number | null;
416
608
  liquidity: number | null;
417
609
  /** Canonical key since #16304 (Polymarket's noun is large trade); whale_trade_count is its deprecated spelling, emitted beside it with the same value. */
@@ -672,7 +864,7 @@ export type GameMarketProviderPrices = GameMarketPricePaired | GameMarketPriceIn
672
864
  export type GamesCoverage = {
673
865
  /** Canonical sport buckets served, sorted. */
674
866
  sports: string[];
675
- /** League tags served, sorted. */
867
+ /** League tags served, sorted. EuroLeague is euroleague under the Basketball sport bucket. */
676
868
  leagues: string[];
677
869
  /** Scopes whose source half was unavailable for this read, as <sport>:<half>. Empty means every scope answered. */
678
870
  sources_unavailable: string[];
@@ -781,7 +973,7 @@ export type LargePosition = {
781
973
  username?: string;
782
974
  grade?: "S" | "A" | "B" | "C" | "D" | "F";
783
975
  win_rate?: number;
784
- /** Trader lifetime realized P&L across all markets. */
976
+ /** The wallet's Total P&L in USD, the figure its 0xinsider profile shows: native Polymarket position P&L across all markets, fees included, plus credited maker and taker rebates. Distinct from this position's position_unrealized_pnl. Omitted when the wallet has no native accounting snapshot. */
785
977
  pnl?: number;
786
978
  markets_traded?: number;
787
979
  };
@@ -824,7 +1016,7 @@ export type LargeTrade = {
824
1016
  suspicion_score: number | null;
825
1017
  /** Persisted scorer track. Null when a legacy row has no stored track label. */
826
1018
  suspicion_track: "whale" | "fresh_conviction" | "sliced_position" | null;
827
- /** This fill's size relative to its market: size_usd divided by a market volume figure recorded at or after the trade, so the value always falls between 0 and 1 inclusive. A $10,000 fill is 0.00005 of a $200M market and 0.125 of an $80,000 one, which size_usd alone cannot distinguish. Absent when no volume figure recorded at or after the trade is available; never 0 as a stand-in and never capped at 1, because a denominator we cannot trust publishes nothing rather than a trimmed number. A market's volume keeps growing, so the same trade reports a smaller share as the market trades on. */
1019
+ /** This fill's size relative to its market: its share count (size_usd / price) divided by the shares the market has traded, Polymarket's recorded volume, which counts shares rather than dollars, as observed at or after the trade, so the value always falls between 0 and 1 inclusive. A 20,000-share fill is 0.00005 of a market that has traded 400M shares and 0.125 of one that has traded 160,000, which size_usd alone cannot distinguish. Absent when no volume figure recorded at or after the trade is available, or when that figure is smaller than the fill; never 0 as a stand-in and never capped at 1, because a denominator we cannot trust publishes nothing rather than a trimmed number. A market's volume keeps growing, so the same trade reports a smaller share as the market trades on. */
828
1020
  market_volume_share?: number;
829
1021
  trader: {
830
1022
  id: string;
@@ -885,7 +1077,7 @@ export type LeaderboardEntry = {
885
1077
  /** Hot-streak tier (trailing-7d cross-sectional percentile); a separate axis from the all-time grade. Omitted when there is no recent activity. */
886
1078
  streak_tier?: "hot" | "rising" | "neutral" | "cooling" | "cold";
887
1079
  score?: number;
888
- /** All-time P&L in USD (total_pnl), including unrealized open positions. Kept for back-compat; prefer realized_pnl for the banked figure. */
1080
+ /** Polymarket's all-time leaderboard P&L in USD, from Polymarket's latest observation of this wallet on its all-time leaderboard (dated by the leaderboard_pnl data_quality group). Omitted when that leaderboard has no current observation ranking the wallet; 0xinsider requests one, and never serves an older stored figure in its place. Includes unrealized open positions. Kept for back-compat. Not the profile's Total P&L, which GET /api/v1/trader/{address} serves as pnl.net_total; the two can differ by a wide margin. Prefer realized_pnl for the banked figure. */
889
1081
  pnl?: number;
890
1082
  /** Native realized P&L plus credited maker and taker rebates in USD, with fees already included. The exact numeric value is truncated toward zero to cents before JSON conversion. Wallets without a native snapshot retain their historical stored realized P&L. Omitted when the native snapshot has no net realized value. */
891
1083
  realized_pnl?: number;
@@ -1109,9 +1301,13 @@ export type MarketSnapshot = {
1109
1301
  })[];
1110
1302
  liquidity: {
1111
1303
  source: string;
1304
+ /** Polymarket's traded-volume figure for the market, as last stored: cumulative taker volume in shares, each counted at its $1 settlement value, not the cash that changed hands (100 shares bought at $0.40 add 100, not 40). It can lag Polymarket's current figure. The name ends in _usd because Polymarket prints this figure with a dollar sign; it is a share count. Null when unavailable. */
1112
1305
  volume_usd: number | null;
1113
1306
  liquidity_usd: number | null;
1307
+ /** Polymarket's taker volume over the 24 hours before volume_24h_as_of, in shares, each counted at its $1 settlement value, not the cash that changed hands (100 shares bought at $0.40 add 100, not 40). The name ends in _usd because Polymarket prints volume with a dollar sign; it is a share count. Null when Polymarket does not report one: it omits the figure on closed markets and on open markets with no trades in the last 24 hours. */
1114
1308
  volume_24h_usd: number | null;
1309
+ /** When 0xinsider read volume_24h_usd from Polymarket; the figure covers the 24 hours before this time. Null exactly when volume_24h_usd is null. */
1310
+ volume_24h_as_of: string | null;
1115
1311
  /** Always null. Polymarket snapshot prices come from outcome top-of-book midpoints. */
1116
1312
  last_price: number | null;
1117
1313
  };
@@ -1264,7 +1460,7 @@ export type PickOfTheDay = {
1264
1460
  matchup?: string;
1265
1461
  /** Recorded canonical sport category. Prefer display_category for the public competition label. */
1266
1462
  category?: string;
1267
- /** Frozen public presentation category: the competition the Polymarket event belongs to. A curated label comes first -- an official league (e.g. "WNBA" or "UFC"), the esports title (e.g. "CS2", "LoL", "Dota 2" or "Valorant"), or a soccer competition (e.g. "LaLiga", "Premier League", "Serie A" or "UEFA Champions League"); any other competition carries the provider's own competition name without its season year (e.g. "UEFA Nations League", "ATP" or "Wimbledon"). It equals category only when the provider names no competition. An esports pick keeps the pooled "Esports" bucket in category, so a per-title label never implies a per-title measured cohort. Additive and optional for mixed-version client compatibility. */
1463
+ /** Frozen public presentation category. Tennis uses the provider-verified ATP or WTA tour, including Wimbledon and doubles; unknown tours retain Tennis. Every men's and women's cricket competition uses Cricket. Other sports use the curated league, esports title or soccer competition label, then the provider series name without its season year, then category when no competition is known. The canonical category and measured cohort are unchanged: an esports title still uses the pooled Esports category. Optional for mixed-version client compatibility. */
1268
1464
  display_category?: string;
1269
1465
  /** Provider platform. Always polymarket. */
1270
1466
  platform?: "polymarket";
@@ -1369,8 +1565,6 @@ export type PickOfTheDay = {
1369
1565
  display_holders?: PickHolder[];
1370
1566
  /** S/A holder count for the public V1 compatibility projection. display_holders can include additional grades. */
1371
1567
  holder_count?: number;
1372
- /** Optional editorial note attached to the pick. */
1373
- editorial_note?: string;
1374
1568
  /** Required truthful thesis. With at least one profitable-wallet holder: Profitable wallets hold {pick_outcome_label}[, led by a grade-{top_grade} trader]. Without holder backing: 0xInsider's Pick of the Day is {pick_outcome_label}. Wallet counts are not appended. */
1375
1569
  thesis?: string;
1376
1570
  /** Canonical web market URL. */
@@ -1448,7 +1642,7 @@ export type PickOfTheDayArchiveEntry = {
1448
1642
  matchup?: string;
1449
1643
  /** Frozen canonical calibration/report bucket (e.g. "Basketball", "MMA", or "Soccer"). Existing semantics are unchanged; presentation consumers should prefer display_category when present. */
1450
1644
  category?: string;
1451
- /** Frozen public presentation category: the competition the Polymarket event belongs to. A curated label comes first -- an official league (e.g. "WNBA" or "UFC"), the esports title (e.g. "CS2", "LoL", "Dota 2" or "Valorant"), or a soccer competition (e.g. "LaLiga", "Premier League", "Serie A" or "UEFA Champions League"); any other competition carries the provider's own competition name without its season year (e.g. "UEFA Nations League", "ATP" or "Wimbledon"). It equals category only when the provider names no competition. An esports pick keeps the pooled "Esports" bucket in category, so a per-title label never implies a per-title measured cohort. Additive and optional for mixed-version client compatibility. */
1645
+ /** Frozen public presentation category. Tennis uses the provider-verified ATP or WTA tour, including Wimbledon and doubles; unknown tours retain Tennis. Every men's and women's cricket competition uses Cricket. Other sports use the curated league, esports title or soccer competition label, then the provider series name without its season year, then category when no competition is known. The canonical category and measured cohort are unchanged: an esports title still uses the pooled Esports category. Optional for mixed-version client compatibility. */
1452
1646
  display_category?: string;
1453
1647
  /** Provider (Polymarket Gamma) market thumbnail URL (markets.image); omitted (not null) when the market has no image. Public regardless of the backed-side gate, so present for pending rows too. */
1454
1648
  image_url?: string;
@@ -1891,8 +2085,9 @@ export type Position = {
1891
2085
  address: string;
1892
2086
  username?: string;
1893
2087
  grade?: "S" | "A" | "B" | "C" | "D" | "F";
1894
- /** Percentage 0-100. */
2088
+ /** Win rate as a ratio from 0 to 1 (0.62 means 62%), the same scale as stats.win_rate on GET /api/v1/trader/{address}. Absent when unknown. */
1895
2089
  win_rate?: number;
2090
+ /** The wallet's Total P&L in USD, the figure its 0xinsider profile shows: native Polymarket position P&L across all markets, fees included, plus credited maker and taker rebates (trader_trading_pnl.net_total_pnl). Not the Polymarket leaderboard figure, which GET /api/v1/trader/{address} still serves as pnl.total. Omitted when the wallet has no native accounting snapshot; the leaderboard figure is never substituted. */
1896
2091
  pnl?: number;
1897
2092
  markets?: number;
1898
2093
  wallet_age_days?: number;
@@ -1929,7 +2124,7 @@ export type PositionTimelineEvent = {
1929
2124
  id: string;
1930
2125
  /** ISO 8601 timestamp of the on-chain fill. */
1931
2126
  event_timestamp: string;
1932
- /** From the taker's perspective. */
2127
+ /** The wallet's own side of this fill: buy or sell. */
1933
2128
  action: "buy" | "sell";
1934
2129
  outcome_side: "yes" | "no";
1935
2130
  /** The Polymarket CLOB token id (ERC1155 asset id, decimal string) for this outcome; null when unavailable (e.g. unsynced markets). */
@@ -1970,7 +2165,7 @@ export type PotdEntryAuthorization = {
1970
2165
  /** Original authorization expiry at the earlier requested or provider kickoff; never extended. An expired authorization cannot authorize a new automated entry. */
1971
2166
  expires_at: string;
1972
2167
  };
1973
- /** One ranked pre-game sports market where graded sharp money is piled on one side, with required-status shadow category evidence from partial forward-observed Polymarket fills. */
2168
+ /** One ranked pre-game sports market where graded sharp money is piled on one side, with required-status category evidence from partial forward-observed Polymarket fills. */
1974
2169
  export type PreGameSide = {
1975
2170
  /** The side profitable wallets hold, as a provider-backed display label. Canonical spelling of piled_side (#16310), same value: when provider group context is unavailable it may remain a bare Yes/No/Over/Under, so do not use it alone as participant identity. */
1976
2171
  side: string | null;
@@ -2023,7 +2218,7 @@ export type PreGameSide = {
2023
2218
  * @deprecated
2024
2219
  */
2025
2220
  smart_score: number | null;
2026
- /** Market volume (USD). */
2221
+ /** Polymarket's traded-volume figure for the market: cumulative taker volume in shares, the number Polymarket's market pages print with a dollar sign. Each share counts at its $1 settlement value, so this is not the cash that changed hands: 100 shares bought at $0.40 add 100, not 40. Null when unavailable. */
2027
2222
  volume: number | null;
2028
2223
  /** Aggregate recent flow direction on the market; null when unavailable. */
2029
2224
  net_side: "BUY" | "SELL" | null;
@@ -2046,7 +2241,7 @@ export type PreGameSide = {
2046
2241
  /** 1-based rank within the (min_grade-filtered) ranked result. */
2047
2242
  rank: number;
2048
2243
  };
2049
- /** Shadow-only category evidence over the full uncapped piled-side S/A/B holder allocation. It never changes signal membership, ordering, routing, or sizing. */
2244
+ /** Category evidence over the full uncapped piled-side S/A/B holder allocation. It never changes signal membership, ordering, routing, or sizing. */
2050
2245
  export type PreGameSideCategorySkill = {
2051
2246
  status: "live" | "insufficient" | "stale" | "unknown" | "degraded";
2052
2247
  model_version: string;
@@ -2128,7 +2323,7 @@ export type PreGameSideObservation = {
2128
2323
  * @deprecated
2129
2324
  */
2130
2325
  smart_score: number;
2131
- /** Strictly positive stored market volume in USD. Missing, zero, or non-finite volume terminates as invalid_market and is never emitted as an observation. */
2326
+ /** Strictly positive stored market volume: Polymarket's cumulative taker volume in shares, each counted at its $1 settlement value rather than the cash that changed hands (the same figure as volume on GET /api/v1/sports/pre-game-sides). Missing, zero, or non-finite volume terminates as invalid_market and is never emitted as an observation. */
2132
2327
  volume: number;
2133
2328
  /**
2134
2329
  * Recorded conviction score; higher values indicate stronger conviction.
@@ -2167,8 +2362,8 @@ export type PreGameSideSportFunnelReport = {
2167
2362
  board_upcoming_available: boolean;
2168
2363
  /** Why the upcoming-board source is (un)available. Board supply is one canonical-sport union: the bare category owns live truth and every configured composed league scope contributes upcoming rows; folded leagues without a configured board (currently NCAAB and CFL) are not in the upcoming union. available: every configured scope completed truthfully (a successful empty schedule still counts). capacity_limited: provider pagination or a configured upcoming cache published an intentionally bounded complete-event prefix; those rows are excluded from diagnostic-universe input and must not be treated as a complete upcoming universe. Cache-bound prefixes are limited to 3,000 rows or an exact 5,000,000-byte final envelope. source_unavailable: composition failed before a truthful union; resolved scope readers turn half failures into cold_unavailable, so fresh producers are whole-union identity reconciliation or a registry contract failure and carry zero rows. cold_unavailable: every scope completed but at least one reported its upcoming half unavailable because no servable entry was inside the stale-serve bound and the background warm did not land in time; it is not by itself proof of a provider outage. deadline_unavailable: an internal configured-scope deadline or the outer bounded fair wave expired. An internal deadline may retain healthy bare-category or sibling-scope rows; the outer wave records zero rows. These upcoming fields do not describe league live-membership availability. If the bare-category live scope fails, all live rows are dropped even when a league scope completed, because the bare category is the sole live-truth owner. not_configured: no upcoming scope applies to the sport. unknown: exactly one cause -- a snapshot cached before this field existed whose legacy flags recorded an unavailable-but-configured half without saying why. Every freshly computed snapshot reports a concrete status, and a legacy available or not-configured row is reconstructed exactly, so unknown self-clears within one TTL. board_upcoming_available is exactly board_upcoming_status == available. */
2169
2364
  board_upcoming_status: "unknown" | "not_configured" | "available" | "capacity_limited" | "source_unavailable" | "cold_unavailable" | "deadline_unavailable";
2170
- /** Configured upcoming scopes that did not complete as available. Values are category, a provider league tag slug (nfl, cfb, nba, wnba, nhl, mls, valorant, league-of-legends, counter-strike-2, or dota-2), registry when the compiled scope/projection contract drifted, union when cross-scope identity reconciliation failed, or wave when the outer fair-wave deadline expired before scope-level evidence returned. Empty means no unavailable upcoming scope was identified; this includes healthy/not-configured rows and a legacy cached row. Observation league scopes are upcoming-only and perform no live-membership read. */
2171
- board_upcoming_unavailable_scopes: ("category" | "nfl" | "cfb" | "nba" | "wnba" | "nhl" | "mls" | "valorant" | "league-of-legends" | "counter-strike-2" | "dota-2" | "registry" | "union" | "wave")[];
2365
+ /** Configured upcoming scopes that did not complete as available. Values are category, a provider league tag slug (nfl, cfb, nba, wnba, euroleague-basketball, nhl, mls, valorant, league-of-legends, counter-strike-2, or dota-2), registry when the compiled scope/projection contract drifted, union when cross-scope identity reconciliation failed, or wave when the outer fair-wave deadline expired before scope-level evidence returned. Empty means no unavailable upcoming scope was identified; this includes healthy/not-configured rows and a legacy cached row. Observation league scopes are upcoming-only and perform no live-membership read. */
2366
+ board_upcoming_unavailable_scopes: ("category" | "nfl" | "cfb" | "nba" | "wnba" | "euroleague-basketball" | "nhl" | "mls" | "valorant" | "league-of-legends" | "counter-strike-2" | "dota-2" | "registry" | "union" | "wave")[];
2172
2367
  /** Stored-universe rows plus provider-board rows missing from storage. */
2173
2368
  input: number;
2174
2369
  /** Sparse counts over the closed 25-value terminal vocabulary: outside_horizon, resolved, provider_closed, provider_excluded, invalid_market, missing_token, missing_stored_market, not_provider_live, board_source_unavailable, board_deadline_unavailable, primary_slate_candidate, zero_indexed_holder_research, capacity_limited, provider_unavailable, holder_deadline_unavailable, holder_computation_unavailable, holder_scan_incomplete, no_current_graded_holder, split_holder_pile, price_unavailable, wider_holder_emitted, in_play_emitted, in_play_stale_observed, in_play_directional_unavailable, or internal_unclassified. primary_slate_candidate means exact admission by the funded route's raw shared signals query before provider/holder enrichment; recent-flow rows rejected by its event, bucket, or total caps remain eligible for wider_holder measurement. capacity_limited is intentional bounded provider-work admission, is fully accounted here, and does not itself set degraded=true. board_source_unavailable means a completed board source was unavailable; board_deadline_unavailable means live-board work missed either an internal configured-scope deadline or the outer fair-wave deadline; provider_unavailable means an attempted holder-provider read failed; holder_deadline_unavailable means holder cache/provider work missed the absolute request deadline; holder_computation_unavailable means post-holder provider or DB-backed price/metadata evaluation was unavailable. */
@@ -2325,7 +2520,7 @@ export type ResponseMeta = {
2325
2520
  };
2326
2521
  /** SHA-256 of the funded signal membership/order/rank/cursor vector immediately before category-skill enrichment. Sports-edge-signals only. */
2327
2522
  category_skill_base_payload_hash?: string;
2328
- /** Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves shadow enrichment did not change funded inputs. Sports-edge-signals only. */
2523
+ /** Independent SHA-256 recomputation over the same base fields immediately after category-skill enrichment. Equality with category_skill_base_payload_hash proves category-skill enrichment did not change funded inputs. Sports-edge-signals only. */
2329
2524
  category_skill_enriched_base_payload_hash?: string;
2330
2525
  };
2331
2526
  /** An entitled same-day pick selected but not yet released: stable rank and backend-owned release/kickoff instants. No matchup, category, platform, side, price, or holder fields appear before release. Unauthorized scheduled ranks appear only in locked_picks. */
@@ -2505,7 +2700,10 @@ export type Trader = {
2505
2700
  forecast_evidence?: number;
2506
2701
  rank?: number;
2507
2702
  pnl: {
2703
+ /** Polymarket's all-time leaderboard P&L in USD, from Polymarket's latest observation of this wallet on its all-time leaderboard (dated by the leaderboard_pnl data_quality group). Omitted when that leaderboard has no current observation ranking the wallet; 0xinsider requests one, and never serves an older stored figure in its place. Kept for provider parity and back-compat. Not the profile's Total P&L and not realized plus unrealized: it can differ from net_total by a wide margin. Read net_total for the figure the 0xinsider profile shows. */
2508
2704
  total?: number;
2705
+ /** The profile's Total P&L in USD: native Polymarket position P&L, with fees already included, plus credited maker and taker rebates (trader_trading_pnl.net_total_pnl). The same figure the 0xinsider profile, search, live feed, portfolio and watchlist show. Truncated toward zero to cents before conversion to a JSON number. Omitted when the wallet has no native accounting snapshot; pnl.total is never substituted. */
2706
+ net_total?: number;
2509
2707
  /** For pnl.realized, expand=trust marks a matching native accounting snapshot as computed: native Polymarket realized P&L plus credited maker and taker rebates, with fees already included. The exact numeric value is truncated toward zero to cents before conversion to a JSON number. Without a matching native accounting snapshot, pnl.realized is omitted and its trust metadata is unavailable. Raw total P&L is never substituted for realized P&L. */
2510
2708
  realized?: number;
2511
2709
  unrealized?: number;
@@ -2537,7 +2735,7 @@ export type Trader = {
2537
2735
  quant_metrics?: {
2538
2736
  /** Trader smart score on a 0..100 display scale; higher is stronger. Null when unavailable. */
2539
2737
  smart_score: number | null;
2540
- /** Copyability score, 0-100. Same base as smart_score minus penalties for traits that make a strategy hard to replicate: -20 if fewer than 50 markets traded, -15 if positions are highly concentrated, -15 if position sizing exceeds about 2x Kelly, -10 if the worst single-trade loss exceeds 30%, -10 if edge is inconsistent; result clamped to 0-100. Higher means easier to follow. null when insufficient history. */
2738
+ /** Copyability score, 0-100. Same base as smart_score minus penalties for traits that make a strategy hard to replicate: -20 if fewer than 50 markets traded, -15 if positions are highly concentrated, -15 if position sizing exceeds about 2x Kelly, -10 if the largest loss on one settled market exceeds 30% of the capital the wallet deployed across all its positions, -10 if edge is inconsistent; result clamped to 0-100. Higher means easier to follow. null when insufficient history. */
2541
2739
  copy_score: number | null;
2542
2740
  /** Sharpe ratio over the trailing 30 days (risk-adjusted return; higher is better). Magnitude can be large for small samples. null when insufficient history. */
2543
2741
  sharpe_30d: number | null;
@@ -2558,7 +2756,7 @@ export type Trader = {
2558
2756
  synced_at?: string;
2559
2757
  /** synced, unknown, or pending. */
2560
2758
  sync_status?: string;
2561
- /** Data age and coverage for this trader body. Always present. Its five groups are sync (traders.last_synced, covering pnl.total, pnl.realized, stats.markets_traded, stats.win_rate, stats.daily_win_rate, last_active, synced_at and sync_status), ranking (trader_rankings.computed_at, covering grade, score, streak_tier, forecast_score and forecast_evidence), leaderboard_rank (leaderboard_rank_refresh_state.completed_at, the completion time of the latest fully completed global rank refresh, covering rank), volume (trader_usd_volume.observed_at, covering stats.total_volume) and positions (trader_position_snapshots.last_refreshed_at with traders.last_synced as fallback, covering pnl.unrealized, the open-position aggregate). The positions clock is the latest successful /positions snapshot when one exists, otherwise the last completed trader sync; it does not date closed or native accounting values. A rank or position value remains unknown or unavailable when its clock or value is absent. For an unknown wallet every group is unavailable. If the open-position read itself fails, positions is unavailable with a reason that says so, pnl.unrealized is absent, and the body is answered fresh (meta.cached false) and is not kept for later callers. */
2759
+ /** Data age and coverage for this trader body. Always present. Its six groups are sync (traders.last_synced, covering pnl.net_total, pnl.realized, stats.markets_traded, stats.win_rate, stats.daily_win_rate, last_active, synced_at and sync_status), ranking (trader_rankings.computed_at, covering grade, score, streak_tier, forecast_score and forecast_evidence), leaderboard_rank (leaderboard_rank_refresh_state.completed_at, the completion time of the latest fully completed global rank refresh, covering rank), volume (trader_usd_volume.observed_at, covering stats.total_volume) and positions (trader_position_snapshots.last_refreshed_at with traders.last_synced as fallback, covering pnl.unrealized, the open-position aggregate) and leaderboard_pnl (trader_profile_provider_snapshots.observed_at, covering pnl.total: unavailable when Polymarket's all-time leaderboard has no current observation ranking the wallet). The positions clock is the latest successful /positions snapshot when one exists, otherwise the last completed trader sync; it does not date closed or native accounting values. A rank or position value remains unknown or unavailable when its clock or value is absent. For an unknown wallet every group is unavailable. If the open-position read itself fails, positions is unavailable with a reason that says so, pnl.unrealized is absent, and the body is answered fresh (meta.cached false) and is not kept for later callers. */
2562
2760
  data_quality: DataQuality;
2563
2761
  /** Field-level trust metadata. Present only when expand=trust or expand[]=trust is requested. */
2564
2762
  trust?: TraderTrust;
@@ -2921,6 +3119,7 @@ export type TraderStatsExact = {
2921
3119
  export type TraderTrust = {
2922
3120
  total_pnl: TrustMetadata;
2923
3121
  realized_pnl: TrustMetadata;
3122
+ net_total_pnl: TrustMetadata;
2924
3123
  unrealized_pnl: TrustMetadata;
2925
3124
  markets_traded: TrustMetadata;
2926
3125
  win_rate: TrustMetadata;
@@ -2965,6 +3164,7 @@ export type TrendingWallet = {
2965
3164
  grade?: "S" | "A" | "B" | "C" | "D" | "F";
2966
3165
  /** Hot-streak tier (trailing-7d cross-sectional percentile). Omitted when there is no recent activity. */
2967
3166
  streak_tier?: "hot" | "rising" | "neutral" | "cooling" | "cold";
3167
+ /** The wallet's all-time Total P&L in USD, the figure its 0xinsider profile shows: native Polymarket position P&L across all markets, fees included, plus credited maker and taker rebates (trader_trading_pnl.net_total_pnl). Context only: it does not affect the ranking, which follows trending_pnl_usd. Omitted when the wallet is not in the 0xinsider database or has no native accounting snapshot; the Polymarket leaderboard all-time figure is never substituted. */
2968
3168
  all_time_pnl_usd?: number;
2969
3169
  all_time_score?: number;
2970
3170
  last_synced?: string;
@@ -3421,6 +3621,8 @@ export interface OperationData {
3421
3621
  scopes: string[] | null;
3422
3622
  };
3423
3623
  getApiDiscovery: ApiDiscovery;
3624
+ getCombo: ComboDetail;
3625
+ getCombosSummary: CombosSummary;
3424
3626
  getCoverage: Platforms;
3425
3627
  getDailyReportSnapshot: ReportSnapshot;
3426
3628
  getEventReplaySince: EventReplayEvent[];
@@ -3613,6 +3815,7 @@ export interface OperationData {
3613
3815
  filters: WhaleDatasetFilters;
3614
3816
  };
3615
3817
  getWhaleTrade: LargeTradeDetail;
3818
+ listComboFills: ComboFill[];
3616
3819
  listGames: Game[];
3617
3820
  listInsiderRadar: SuspiciousTrade[];
3618
3821
  listLargePositions: LargePosition[];
@@ -3779,6 +3982,8 @@ export interface OperationQuery {
3779
3982
  };
3780
3983
  getAccountIdentity: Record<string, never>;
3781
3984
  getApiDiscovery: Record<string, never>;
3985
+ getCombo: Record<string, never>;
3986
+ getCombosSummary: Record<string, never>;
3782
3987
  getCoverage: Record<string, never>;
3783
3988
  getDailyReportSnapshot: {
3784
3989
  /** UTC report date in YYYY-MM-DD format, from 2024-03-01 (the first day report data covers) through tomorrow UTC. Any other date returns 400 bad_request with error.param=date. */
@@ -3933,10 +4138,34 @@ export interface OperationQuery {
3933
4138
  };
3934
4139
  getWhaleDatasetStatus: Record<string, never>;
3935
4140
  getWhaleTrade: Record<string, never>;
4141
+ listComboFills: {
4142
+ /** CSV of pending, won, or lost; all clears the filter. Unknown results appear only in unfiltered lists. */
4143
+ result?: string;
4144
+ /** CSV of 2, 3, 4, or 5+; all clears the filter. A combo matches any named pick count. */
4145
+ legs?: string;
4146
+ /** Minimum collateral in whole USDC. */
4147
+ min_stake?: number;
4148
+ /** 0 disables the filter; otherwise use 2..1000000. Minimum shares per dollar at execution. */
4149
+ min_multiplier?: number;
4150
+ /** CSV of S, A, B, C, D, F; all clears the filter. Ungraded wallets do not match. */
4151
+ grades?: string;
4152
+ /** CSV of nfl, ncaaf, nba, wnba, baseball, hockey, soccer, tennis, table-tennis, esports, mma, boxing, golf, cricket, f1, pickleball; all clears the filter. Matches when any leg belongs to a selected sport. */
4153
+ sports?: string;
4154
+ /** Recent is newest first; largest ranks collateral; payout ranks buy-fill shares and excludes sells. */
4155
+ sort?: "recent" | "largest" | "payout";
4156
+ /** Defaults to all for recent and 24h for largest or payout. */
4157
+ window?: "24h" | "7d" | "all";
4158
+ /** Page size. Integer values outside the range are clamped to 1..200. */
4159
+ limit?: number;
4160
+ /** Exclusive block_number:log_index cursor for recent only; send the returned next_cursor unchanged. */
4161
+ cursor?: string;
4162
+ /** Offset for ranked largest or payout ordering; use returned next_offset. */
4163
+ offset?: number;
4164
+ };
3936
4165
  listGames: {
3937
4166
  /** Canonical sport bucket, case-insensitive, with - and _ read as a space: table-tennis and Table Tennis are the same bucket. Omit for every covered sport. A bucket this deployment does not serve returns an empty page. */
3938
4167
  sport?: string;
3939
- /** League tag, case-insensitive, as coverage.leagues spells it: nfl, epl, cs2. Omit for every league inside the selected sports. */
4168
+ /** League tag, case-insensitive, as coverage.leagues spells it: nfl, epl, cs2, euroleague. EuroLeague games use sport=Basketball and league=euroleague. Omit for every league inside the selected sports. */
3940
4169
  league?: string;
3941
4170
  /** Keep only games in this state. A value outside the enum returns an empty page. */
3942
4171
  status?: "scheduled" | "live" | "paused" | "ended" | "postponed" | "cancelled" | "suspended" | "delayed" | "unknown";
@@ -4060,7 +4289,7 @@ export interface OperationQuery {
4060
4289
  min_size?: number;
4061
4290
  /** Exact match against provider-backed market_canonical.category. */
4062
4291
  category?: string;
4063
- /** Scope to one market. Accepts the raw provider condition_id or the mkt_-prefixed market id emitted by V1 responses. Combine with min_size=0 for every reconciled position in that market; an unknown id returns []. */
4292
+ /** Scope to one market. Accepts the raw provider condition_id or the mkt_-prefixed market id emitted by V1 responses. Combine with min_size=0 for every reconciled position in that market; an unknown id or a resolved market returns []. */
4064
4293
  condition_id?: string;
4065
4294
  /** Scope to one wallet or a book of wallets (repeatable, up to 25 per request; comma-separated values inside one occurrence also work). Each value is a wallet address, a known username, or a trd_-prefixed trader id, resolved like /api/v1/trader/{address}. The response keeps the board's order and cursor, so pages of a book interleave wallets by current_value_usd. An address this API has never tracked returns its mirror rows or an empty list; a username or trader id that resolves to nothing is a 404 naming wallet; more than 25 values is a 400. min_size defaults to 0 when wallet is present. */
4066
4295
  wallet?: string[];
@@ -4302,6 +4531,11 @@ export interface OperationPath {
4302
4531
  exploreMarkets: Record<string, never>;
4303
4532
  getAccountIdentity: Record<string, never>;
4304
4533
  getApiDiscovery: Record<string, never>;
4534
+ getCombo: {
4535
+ /** Combo identifier: 0x followed by 62 lowercase hex characters. This differs from a binary market condition ID. */
4536
+ condition_id: string;
4537
+ };
4538
+ getCombosSummary: Record<string, never>;
4305
4539
  getCoverage: Record<string, never>;
4306
4540
  getDailyReportSnapshot: Record<string, never>;
4307
4541
  getEventReplaySince: Record<string, never>;
@@ -4417,6 +4651,7 @@ export interface OperationPath {
4417
4651
  /** Raw whale_alerts.id or wt_-prefixed whale trade id. */
4418
4652
  id: string;
4419
4653
  };
4654
+ listComboFills: Record<string, never>;
4420
4655
  listGames: Record<string, never>;
4421
4656
  listInsiderRadar: Record<string, never>;
4422
4657
  listLargePositions: Record<string, never>;
@@ -4534,6 +4769,8 @@ export interface OperationBody {
4534
4769
  exploreMarkets: never;
4535
4770
  getAccountIdentity: never;
4536
4771
  getApiDiscovery: never;
4772
+ getCombo: never;
4773
+ getCombosSummary: never;
4537
4774
  getCoverage: never;
4538
4775
  getDailyReportSnapshot: never;
4539
4776
  getEventReplaySince: never;
@@ -4572,6 +4809,7 @@ export interface OperationBody {
4572
4809
  getWeeklyReportSnapshot: never;
4573
4810
  getWhaleDatasetStatus: never;
4574
4811
  getWhaleTrade: never;
4812
+ listComboFills: never;
4575
4813
  listGames: never;
4576
4814
  listInsiderRadar: never;
4577
4815
  listLargePositions: never;
@@ -4687,6 +4925,8 @@ export interface OperationResponse {
4687
4925
  data: OperationData["getApiDiscovery"];
4688
4926
  meta: ResponseMeta;
4689
4927
  };
4928
+ getCombo: ComboResponse;
4929
+ getCombosSummary: CombosSummaryResponse;
4690
4930
  getCoverage: {
4691
4931
  object: "platforms";
4692
4932
  data: OperationData["getCoverage"];
@@ -4873,6 +5113,7 @@ export interface OperationResponse {
4873
5113
  data: OperationData["getWhaleTrade"];
4874
5114
  meta: ResponseMeta;
4875
5115
  };
5116
+ listComboFills: ComboFillsResponse;
4876
5117
  listGames: {
4877
5118
  object: "list";
4878
5119
  data: OperationData["listGames"];