@0xinsider/mcp 3.4.0 → 3.5.0

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.
Files changed (65) hide show
  1. package/README.md +26 -5
  2. package/dist/catalog.generated.d.ts +40 -1
  3. package/dist/catalog.generated.d.ts.map +1 -1
  4. package/dist/catalog.generated.js +50 -1
  5. package/dist/catalog.generated.js.map +1 -1
  6. package/dist/cli-lib.d.ts +0 -1
  7. package/dist/cli-lib.d.ts.map +1 -1
  8. package/dist/cli-lib.js +0 -3
  9. package/dist/cli-lib.js.map +1 -1
  10. package/dist/client.d.ts +35 -12
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +37 -133
  13. package/dist/client.js.map +1 -1
  14. package/dist/constants.d.ts +1 -2
  15. package/dist/constants.d.ts.map +1 -1
  16. package/dist/constants.js +1 -2
  17. package/dist/constants.js.map +1 -1
  18. package/dist/resources/index.d.ts.map +1 -1
  19. package/dist/resources/index.js +2 -1
  20. package/dist/resources/index.js.map +1 -1
  21. package/dist/sdk/client.d.ts +7 -0
  22. package/dist/sdk/client.d.ts.map +1 -1
  23. package/dist/sdk/client.js +7 -1
  24. package/dist/sdk/client.js.map +1 -1
  25. package/dist/sdk/index.d.ts +5 -5
  26. package/dist/sdk/index.d.ts.map +1 -1
  27. package/dist/sdk/index.js +4 -3
  28. package/dist/sdk/index.js.map +1 -1
  29. package/dist/sdk/retry.d.ts +19 -0
  30. package/dist/sdk/retry.d.ts.map +1 -1
  31. package/dist/sdk/retry.js +111 -0
  32. package/dist/sdk/retry.js.map +1 -1
  33. package/dist/sdk/schema.d.ts +299 -40
  34. package/dist/sdk/schema.d.ts.map +1 -1
  35. package/dist/sdk/webhooks.d.ts +93 -174
  36. package/dist/sdk/webhooks.d.ts.map +1 -1
  37. package/dist/sdk/webhooks.js +22 -6
  38. package/dist/sdk/webhooks.js.map +1 -1
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +14 -0
  41. package/dist/server.js.map +1 -1
  42. package/dist/tools/combos.d.ts +6 -0
  43. package/dist/tools/combos.d.ts.map +1 -0
  44. package/dist/tools/combos.js +133 -0
  45. package/dist/tools/combos.js.map +1 -0
  46. package/dist/tools/get-trader.d.ts.map +1 -1
  47. package/dist/tools/get-trader.js +7 -2
  48. package/dist/tools/get-trader.js.map +1 -1
  49. package/dist/tools/large-trade-counterparties.d.ts +5 -0
  50. package/dist/tools/large-trade-counterparties.d.ts.map +1 -0
  51. package/dist/tools/large-trade-counterparties.js +91 -0
  52. package/dist/tools/large-trade-counterparties.js.map +1 -0
  53. package/dist/tools/market-reads.d.ts +5 -0
  54. package/dist/tools/market-reads.d.ts.map +1 -0
  55. package/dist/tools/market-reads.js +100 -0
  56. package/dist/tools/market-reads.js.map +1 -0
  57. package/dist/tools/pick-of-the-day.js +1 -1
  58. package/dist/tools/read-parity.d.ts.map +1 -1
  59. package/dist/tools/read-parity.js +8 -4
  60. package/dist/tools/read-parity.js.map +1 -1
  61. package/dist/tools/trader-reads.d.ts +6 -0
  62. package/dist/tools/trader-reads.d.ts.map +1 -0
  63. package/dist/tools/trader-reads.js +99 -0
  64. package/dist/tools/trader-reads.js.map +1 -0
  65. package/package.json +1 -1
@@ -1046,7 +1046,7 @@ export type ExploreMarket = {
1046
1046
  no_change_pct_24h: number | null;
1047
1047
  /** Backend-owned deterministic market discovery score used by the hot sort. */
1048
1048
  discover_score: number | null;
1049
- score_components?: {
1049
+ score_components: {
1050
1050
  volume_signal: number | null;
1051
1051
  /** Canonical key since #16304; whale_signal is its deprecated spelling, emitted beside it with the same value. */
1052
1052
  large_trade_signal: number | null;
@@ -1063,7 +1063,7 @@ export type ExploreMarket = {
1063
1063
  price_move_signal: number | null;
1064
1064
  missing_price_penalty: number;
1065
1065
  };
1066
- freshness?: {
1066
+ freshness: {
1067
1067
  enrichment_status: "available" | "unavailable";
1068
1068
  price_status: "available" | "unavailable";
1069
1069
  };
@@ -1083,6 +1083,40 @@ export type ExportCounts = {
1083
1083
  estimated_trade_rows: number;
1084
1084
  estimated_size_mb: number;
1085
1085
  };
1086
+ /** `export_job_cancelled` data: the owner's export stopped because its owner cancelled it. */
1087
+ export type ExportJobCancelledData = {
1088
+ job_id: number;
1089
+ status: "cancelled";
1090
+ format: string;
1091
+ next_action: "resubmit";
1092
+ };
1093
+ /** `export_job_expired` data: the owner's ready export passed retention. */
1094
+ export type ExportJobExpiredData = {
1095
+ job_id: number;
1096
+ status: "expired";
1097
+ format: string;
1098
+ next_action: "resubmit";
1099
+ };
1100
+ /** `export_job_failed` data: the owner's asynchronous export reached a terminal failure. */
1101
+ export type ExportJobFailedData = {
1102
+ job_id: number;
1103
+ status: "failed";
1104
+ format: string;
1105
+ next_action: "resubmit";
1106
+ failure_reason: string;
1107
+ };
1108
+ /** `export_job_ready` data: the owner's asynchronous export can be downloaded. Download authorization stays on the status and download routes. */
1109
+ export type ExportJobReadyData = {
1110
+ job_id: number;
1111
+ status: "ready";
1112
+ format: string;
1113
+ next_action: "download";
1114
+ total_trades: number | null;
1115
+ processed_trades: number | null;
1116
+ /** Artifact size in bytes. */
1117
+ file_size: number | null;
1118
+ data_as_of: string | null;
1119
+ };
1086
1120
  export type ExportSourceRange = {
1087
1121
  first_pnl_date: string | null;
1088
1122
  last_pnl_date: string | null;
@@ -1298,19 +1332,19 @@ export type LargeExportPolicy = {
1298
1332
  /** Programmatic API-key-gated export routes (submit/status/download/cancel) and supported formats (json, ndjson, csv). */
1299
1333
  v1_async: {
1300
1334
  /** POST route template to submit an export job. fresh=true asks for a snapshot read after the submit instead of reusing a finished one. */
1301
- submit_route?: string;
1335
+ submit_route: string;
1302
1336
  /** GET route template to poll job status. */
1303
- status_route?: string;
1337
+ status_route: string;
1304
1338
  /** GET route template that 302-redirects to the file. */
1305
- download_route?: string;
1339
+ download_route: string;
1306
1340
  /** POST route template to cancel a queued or running job. */
1307
- cancel_route?: string;
1341
+ cancel_route: string;
1308
1342
  /** Supported ?format= values. */
1309
- formats?: ("json" | "ndjson" | "csv")[];
1343
+ formats: ("json" | "ndjson" | "csv")[];
1310
1344
  /** Possible job status values. */
1311
- status_values?: ("queued" | "running" | "ready" | "failed" | "reconcile_required" | "expired" | "cancel_requested" | "cancelled")[];
1345
+ status_values: ("queued" | "running" | "ready" | "failed" | "reconcile_required" | "expired" | "cancel_requested" | "cancelled")[];
1312
1346
  /** How long a finished export is retained before expiry. */
1313
- retention?: string;
1347
+ retention: string;
1314
1348
  };
1315
1349
  direct_streaming: Record<string, unknown>;
1316
1350
  async_job: Record<string, unknown>;
@@ -1373,7 +1407,7 @@ export type LargePosition = {
1373
1407
  username?: string;
1374
1408
  grade?: "S" | "A" | "B" | "C" | "D" | "F";
1375
1409
  win_rate?: number;
1376
- /** 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. */
1410
+ /** Polymarket's net total P&L for the wallet in USD: native Polymarket position P&L across all markets, fees included, plus credited maker and taker rebates. The 0xinsider profile's Total P&L is this figure unless the wallet has a published correction for neg-risk conversions, which GET /api/v1/trader/{address} serves as pnl.correction; the profile then shows pnl.correction.net_total. Distinct from this position's position_unrealized_pnl. Omitted when the wallet has no native accounting snapshot. */
1377
1411
  pnl?: number;
1378
1412
  markets_traded?: number;
1379
1413
  };
@@ -1387,6 +1421,11 @@ export type LargePosition = {
1387
1421
  category?: string;
1388
1422
  };
1389
1423
  };
1424
+ /** `large_positions_updated` data: one large-positions refresh finished. */
1425
+ export type LargePositionsUpdatedData = {
1426
+ /** Positions the refresh published. */
1427
+ count: number;
1428
+ };
1390
1429
  export type LargeTrade = {
1391
1430
  /** Prefixed ID (wt_...). */
1392
1431
  id: string;
@@ -1458,6 +1497,38 @@ export type LargeTradeHistoryMeta = {
1458
1497
  reason: string;
1459
1498
  };
1460
1499
  };
1500
+ /** `large_trade_inserted_v2` data (Pro and Max): one large trade, with the trade itself. The three amounts are decimal strings that keep the stored precision: parse them with a decimal library when the exact value matters. The endpoint's `trade_filters` decide which trades it receives. */
1501
+ export type LargeTradeInsertedV2Data = {
1502
+ /** Stable identity of this trade's event. It equals the envelope `id`, and the `id` of the same event on `GET /api/v1/events/feed/since`. */
1503
+ event_id: string;
1504
+ /** Numeric id of the trade. `GET /api/v1/large-trades/{id}` accepts it. */
1505
+ whale_alert_id: number;
1506
+ /** Polymarket condition id of the market. */
1507
+ condition_id: string;
1508
+ /** 0xinsider's numeric id for the wallet. */
1509
+ trader_id: number;
1510
+ /** Address of the wallet that made the trade. */
1511
+ wallet: string;
1512
+ /** The wallet's grade when the event was published; `null` when it has none. */
1513
+ grade: "S" | "A" | "B" | "C" | "D" | "F" | null;
1514
+ /** USD notional of the trade; decimal string. */
1515
+ size_usd: string;
1516
+ /** Shares traded; decimal string. */
1517
+ shares: string;
1518
+ /** Price paid per share; decimal string. */
1519
+ price: string;
1520
+ side: "BUY" | "SELL";
1521
+ /** Polymarket's index of the outcome traded. */
1522
+ outcome_index: number;
1523
+ /** When the trade filled on Polymarket. The envelope's `created_at` is this instant. */
1524
+ traded_at: string;
1525
+ platform: "polymarket";
1526
+ };
1527
+ /** `large_trades_inserted` data (Pro and Max): new large trades were ingested. It carries a count and no trade; subscribe to `large_trade_inserted_v2` for the trade itself. The deprecated spelling `whale_trades_inserted` delivers the same object. */
1528
+ export type LargeTradesInsertedData = {
1529
+ /** Large trades the producing batch admitted. */
1530
+ count: number;
1531
+ };
1461
1532
  /** All present fields narrow large_trade_inserted_v2 delivery. Grade is observed at publication; ungraded trades do not match min_grade. An empty object matches every large trade. */
1462
1533
  export type LargeTradeSubscriptionFilters = {
1463
1534
  /** Raw provider condition ID or mkt_-prefixed market ID. */
@@ -1481,6 +1552,8 @@ export type LeaderboardEntry = {
1481
1552
  pnl?: number;
1482
1553
  /** 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. Omitted when the wallet has no native snapshot or the snapshot has no net realized value; never filled from another P&L basis. */
1483
1554
  realized_pnl?: number;
1555
+ /** The 0xinsider correction to Polymarket's P&L for neg-risk conversions. Present only when one is published; realized_pnl keeps Polymarket's own figure and pnl_correction.realized adds the amount to it. The grade and the ranking use the corrected figure. net_total is omitted here. */
1556
+ pnl_correction?: PnlCorrection;
1484
1557
  /** Full-history both-sides USD cash volume from a verified Polymarket user-volume observation. Omitted without coverage. */
1485
1558
  volume?: number;
1486
1559
  markets_traded?: number;
@@ -1492,6 +1565,48 @@ export type LeaderboardEntry = {
1492
1565
  platform: "polymarket";
1493
1566
  last_active?: string;
1494
1567
  };
1568
+ /** One side's score line inside a `live_sports_updated` pulse. */
1569
+ export type LiveSportsScoreEntry = {
1570
+ /** Team name, ordered for the league (away first where the league reads that way). */
1571
+ team: string;
1572
+ /** This side's score as the provider sends it. */
1573
+ score: string;
1574
+ /** Esports series only: this side's current-map score. Absent on other sports. */
1575
+ map_score?: string;
1576
+ };
1577
+ /** `live_sports_updated` data: one bounded pulse for one live game. A pulse fires when a material field moved since this game's previous delivered pulse (`scores`, `status`, `period`, `live`, `ended`), at most once per game per 20 seconds. A `live` or `ended` transition is exempt from that interval, and the game clock alone never fires a pulse. Suppressed frames are folded into the next pulse's `changed`, and its body carries the current state. */
1578
+ export type LiveSportsUpdatedData = {
1579
+ /** The Polymarket event slug this game trades under. */
1580
+ event_slug: string;
1581
+ /** Provider game id, or `null` when the frame carried none. */
1582
+ game_id: string | null;
1583
+ /** League abbreviation, or `null`. */
1584
+ league: string | null;
1585
+ /** Durable per-game pulse ordinal, increasing by one per delivered pulse. Deliveries are not ordered, so drop a pulse whose version you already saw. */
1586
+ version: number;
1587
+ /** Material fields that moved since this game's previous delivered pulse. */
1588
+ changed: ("scores" | "status" | "period" | "live" | "ended")[];
1589
+ /** Provider frame time, or `null` when the frame carried none. Never replaced with a local clock. */
1590
+ observed_at: string | null;
1591
+ /** When the pulse was admitted. */
1592
+ published_at: string;
1593
+ /** Provider status text, or `null`. */
1594
+ status: string | null;
1595
+ /** Provider period text ("Q3", "Map 2/3"), or `null`. */
1596
+ period: string | null;
1597
+ /** Game clock, or `null`. Not a material field: it never fires a pulse on its own. */
1598
+ clock: string | null;
1599
+ /** Provider live flag, or `null` when the frame carried none. */
1600
+ live: boolean | null;
1601
+ /** Whether the provider has marked this game final. */
1602
+ ended: boolean;
1603
+ /** Per-side scores, one line per team. */
1604
+ scores: LiveSportsScoreEntry[];
1605
+ /** Esports `BoN` series token, or `null` on every other sport. */
1606
+ series_format: string | null;
1607
+ /** Public game page. Re-read it after a gap instead of replaying pulses. */
1608
+ snapshot_url: string;
1609
+ };
1495
1610
  /** Provider-first bucketed OHLC price candles for a market's outcome tokens, derived from our stored copy of the Polymarket CLOB prices-history series (covers open and resolved markets). */
1496
1611
  export type MarketCandles = {
1497
1612
  /** Market condition id the candles were read for. */
@@ -1518,7 +1633,7 @@ export type MarketFlow = {
1518
1633
  /** The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the net-flow direction outcome; null when unavailable (e.g. unsynced markets). */
1519
1634
  token_id: string | null;
1520
1635
  /** Canonical key since #16304 (Polymarket's noun is large trade); whale_trade_count is its deprecated spelling, emitted beside it with the same value. */
1521
- large_trade_count?: number;
1636
+ large_trade_count: number;
1522
1637
  whale_trade_count: number;
1523
1638
  buy_volume_usd: number;
1524
1639
  sell_volume_usd: number;
@@ -1545,7 +1660,7 @@ export type MarketFlow = {
1545
1660
  /** The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the net-flow direction outcome; null when unavailable (e.g. unsynced markets). */
1546
1661
  token_id: string | null;
1547
1662
  /** Canonical key since #16304 (Polymarket's noun is large trade); whale_trade_count is its deprecated spelling, emitted beside it with the same value. */
1548
- large_trade_count?: number;
1663
+ large_trade_count: number;
1549
1664
  whale_trade_count: number;
1550
1665
  buy_volume_usd: number;
1551
1666
  sell_volume_usd: number;
@@ -1686,7 +1801,15 @@ export type MarketSnapshot = {
1686
1801
  image: string | null;
1687
1802
  /** Polymarket series slug from the canonical identity row, null when unavailable. A sports series identifies a league and must not be used as a per-matchup grouping key. */
1688
1803
  series_slug: string | null;
1804
+ /**
1805
+ * Always null. Deprecated (#24169): 0xinsider has never stored a value for this field. The key stays on the wire so existing clients keep parsing; do not read it.
1806
+ * @deprecated
1807
+ */
1689
1808
  market_type: string | null;
1809
+ /**
1810
+ * Always null. Deprecated (#24169): 0xinsider stores no value for this field on a Polymarket market. The key stays on the wire so existing clients keep parsing; do not read it. market.status and market.resolved_at say whether the market has closed or resolved.
1811
+ * @deprecated
1812
+ */
1690
1813
  market_result: string | null;
1691
1814
  created_at: string | null;
1692
1815
  end_date: string | null;
@@ -1696,6 +1819,7 @@ export type MarketSnapshot = {
1696
1819
  side: "yes" | "no";
1697
1820
  label: string;
1698
1821
  token_id?: string;
1822
+ /** The outcome's display price, the probability Polymarket shows for it: the midpoint of the cached top of book when the spread is at most 0.10, otherwise the token's last trade price. Omitted when neither is known, including a book wider than 0.10 with no last trade on record; top_of_book still carries that book's best_bid and best_ask. expand=trust explains a missing value in trust.current_price. */
1699
1823
  current_price?: number;
1700
1824
  top_of_book: MarketSnapshotTopOfBook;
1701
1825
  })[];
@@ -1756,7 +1880,7 @@ export type MarketSnapshotTrust = {
1756
1880
  };
1757
1881
  export type McpJsonRpcError = {
1758
1882
  jsonrpc: "2.0";
1759
- id?: string | number | null;
1883
+ id: string | number | null;
1760
1884
  error: {
1761
1885
  code: number;
1762
1886
  message: string;
@@ -1996,7 +2120,10 @@ export type PickOfTheDay = {
1996
2120
  publication_order?: number;
1997
2121
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
1998
2122
  is_free_selection?: boolean;
1999
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2123
+ /**
2124
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2125
+ * @deprecated
2126
+ */
2000
2127
  supersedes_pick_id: string | null;
2001
2128
  /** Optional full-only lead wallet publication facts. Omitted on legacy picks or when the recorded evidence is unavailable. */
2002
2129
  lead_backer?: PickLeadBacker;
@@ -2035,7 +2162,7 @@ export type PickOfTheDayArchiveEntry = {
2035
2162
  * Deprecated compatibility daily release slot; use pick_id for identity and publication_order for scheduling.
2036
2163
  * @deprecated
2037
2164
  */
2038
- pick_rank?: number;
2165
+ pick_rank: number;
2039
2166
  /** When this selection was published, as RFC3339 UTC. Use this instant for publication feeds and timelines; pick_date is the America/New_York product day, not a publication timestamp. Automatic picks publish from 03:00 America/New_York on pick_date. Absent only for historical rows whose publication instant is unknown. */
2040
2167
  published_at?: string;
2041
2168
  /** Human-readable matchup (e.g. "Portugal vs. Uzbekistan"). */
@@ -2096,7 +2223,10 @@ export type PickOfTheDayArchiveEntry = {
2096
2223
  publication_order: number;
2097
2224
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
2098
2225
  is_free_selection: boolean;
2099
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2226
+ /**
2227
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2228
+ * @deprecated
2229
+ */
2100
2230
  supersedes_pick_id: string | null;
2101
2231
  };
2102
2232
  /** Select using the entry commitment_version, never implicit payload shape. All historic v1 hashes remain unchanged. */
@@ -2154,7 +2284,7 @@ export type PickOfTheDayHitRate = {
2154
2284
  /** Number of picks still pending resolution (excluded from the hit rate). */
2155
2285
  pending: number;
2156
2286
  /** The flat stake every money figure here assumes, in USD: 1000 since 2026-09-22 (100 before). Always present. */
2157
- stake_usd?: number;
2287
+ stake_usd: number;
2158
2288
  /** Cumulative profit (USD) of a stake_usd-per-pick strategy over visible valued decided picks: a priced win pays stake_usd/backed_price - stake_usd, every visible loss pays -stake_usd independent of price, and a void pays 0. An unpriced visible win and a current non-Insider row whose price is gated remain in wins/losses but are excluded from price-derived totals. */
2159
2289
  net_profit_usd: number;
2160
2290
  /** Total staked (USD) = stake_usd * count of visible valued decided picks: every visible loss plus every priced win. Void, unpriced wins, and current non-Insider rows whose price is gated are excluded. */
@@ -2206,7 +2336,7 @@ export type PickOfTheDayHitRate = {
2206
2336
  /** Measured public rows where close exactly equals entry. */
2207
2337
  clv_ties: number;
2208
2338
  /** Cumulative track-record series, one point per decided (win/loss) pick in ascending pick_date order (void and pending add no point). A non-valued decided row carries cumulative profit forward while advancing hit rate. The last point's net_profit_usd and hit_rate_pct equal the headline net_profit_usd and pct by construction. Empty when nothing is decided. */
2209
- series?: {
2339
+ series: {
2210
2340
  /** The decided pick's publish date (YYYY-MM-DD). */
2211
2341
  date: string;
2212
2342
  /** Running cumulative stake_usd-per-pick profit (USD) through this pick; valued losses and priced wins are booked, while a non-valued decided row carries profit forward unchanged. */
@@ -2267,7 +2397,10 @@ export type PickOfTheDayLedgerOpenedEntry = {
2267
2397
  publication_order: number;
2268
2398
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
2269
2399
  is_free_selection: boolean;
2270
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2400
+ /**
2401
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2402
+ * @deprecated
2403
+ */
2271
2404
  supersedes_pick_id: string | null;
2272
2405
  /** Explicit proof provenance: 1 retains historic eight-field canonical JSON; 2 binds stable pick_id and version without pick_rank. */
2273
2406
  commitment_version: 1 | 2;
@@ -2296,7 +2429,10 @@ export type PickOfTheDayLedgerSealedEntry = {
2296
2429
  publication_order: number;
2297
2430
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
2298
2431
  is_free_selection: boolean;
2299
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2432
+ /**
2433
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2434
+ * @deprecated
2435
+ */
2300
2436
  supersedes_pick_id: string | null;
2301
2437
  /** Explicit proof provenance: 1 retains historic eight-field canonical JSON; 2 binds stable pick_id and version without pick_rank. */
2302
2438
  commitment_version: 1 | 2;
@@ -2331,7 +2467,10 @@ export type PickOfTheDayLedgerUncommittedEntry = {
2331
2467
  publication_order: number;
2332
2468
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
2333
2469
  is_free_selection: boolean;
2334
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2470
+ /**
2471
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2472
+ * @deprecated
2473
+ */
2335
2474
  supersedes_pick_id: string | null;
2336
2475
  };
2337
2476
  /** A successful current-day entitlement response when only unauthorized ranks have published. It carries an empty pick set, identity-free locked ranks and an upgrade message. Selection IDs, game identity, prices and unauthorized clocks are absent. Any scheduled or proof-pending rows are entitled rows. */
@@ -2355,7 +2494,10 @@ export type PickOfTheDayNoEntitledPicks = {
2355
2494
  scheduled_picks?: ScheduledPickSlot[];
2356
2495
  /** Entitled published picks whose holder proof is unreadable, ordered by rank. Unauthorized ranks appear only in locked_picks and cannot trigger proof warming. Read retry_at for the next read. */
2357
2496
  proof_pending_picks?: ProofPendingPickSlot[];
2358
- /** Null: the empty entitlement envelope has no selection lineage. */
2497
+ /**
2498
+ * Deprecated (#24157): always null, as on every Pick of the Day shape.
2499
+ * @deprecated
2500
+ */
2359
2501
  supersedes_pick_id: null;
2360
2502
  };
2361
2503
  /** A settled uncommitted pick's market, side and price. The same eight fields as PickOfTheDayCommitmentPayload, in the same key order, so a settled pick's side and price sit under payload whatever the entry's state. It is NOT a commitment: no hash was taken over it before the game, and it proves nothing about when the pick was made. */
@@ -2451,6 +2593,23 @@ export type Platforms = {
2451
2593
  polymarket: PlatformCapabilities;
2452
2594
  };
2453
2595
  };
2596
+ /** A derived 0xinsider correction to Polymarket's P&L, never a Polymarket value. Polymarket misbooks neg-risk conversions, in both directions: it puts cost on placeholder YES outcomes minted by a conversion and never books it as a loss (negative amount), and its position records leave out shares the wallet really got, such as YES minted by a conversion, so it books no P&L on them (positive amount). Per neg-risk market the wallet converted in, 0xinsider measures Polymarket's own activity cash against the sum of its position P&L, and sums the difference over every measured market whose shares did not move by direct transfer: transferred shares have no activity row, so such a market keeps Polymarket's figure and is counted in markets_excluded. It is published once every neg-risk market the wallet converted in is measured and checked for transfers, and stays as last published until then (on the trader body, pnl.correction_pending says so); a sum under $1 either way publishes nothing. The body's own P&L fields keep Polymarket's figures; this object adds the amount and the corrected figures. Money is truncated toward zero to cents. */
2597
+ export type PnlCorrection = {
2598
+ /** The correction method. */
2599
+ basis: "neg_risk_conversion_v1";
2600
+ /** The correction in USD. Negative when Polymarket overstates the wallet. */
2601
+ amount: number;
2602
+ /** Polymarket's net realized P&L plus amount: the figure 0xinsider grades on. Omitted when Polymarket's figure is. */
2603
+ realized?: number;
2604
+ /** Polymarket's net total P&L plus amount: the 0xinsider profile's Total P&L. Omitted when Polymarket's figure is, and on leaderboard entries. */
2605
+ net_total?: number;
2606
+ /** The newest measurement among the measured markets. */
2607
+ as_of: string;
2608
+ /** Neg-risk markets whose measurement amount sums. */
2609
+ markets_measured: number;
2610
+ /** Measured neg-risk markets left out because shares moved in or out of the wallet by direct transfer; they keep Polymarket's figure. Omitted when none. */
2611
+ markets_excluded?: number;
2612
+ };
2454
2613
  export type Position = {
2455
2614
  /** Composite prefixed ID `pos_<wallet>:<condition_id>:<outcome_index>`. */
2456
2615
  id: string;
@@ -2487,11 +2646,12 @@ export type Position = {
2487
2646
  grade?: "S" | "A" | "B" | "C" | "D" | "F";
2488
2647
  /** 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. */
2489
2648
  win_rate?: number;
2490
- /** 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. */
2649
+ /** Polymarket's net total P&L for the wallet in USD: native Polymarket position P&L across all markets, fees included, plus credited maker and taker rebates (trader_trading_pnl.net_total_pnl). The 0xinsider profile's Total P&L is this figure unless the wallet has a published correction for neg-risk conversions, which GET /api/v1/trader/{address} serves as pnl.correction; the profile then shows pnl.correction.net_total. 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. */
2491
2650
  pnl?: number;
2492
2651
  markets?: number;
2652
+ /** Days since the wallet's first-seen time. For a wallet 0xinsider first recorded on or after March 21, 2026, that is when 0xinsider recorded it. For a wallet recorded earlier, it is usually the wallet's first Polymarket activity, so the age can run to years. It is not the wallet's on-chain age or the time of its first trade. Absent when the first-seen time is unknown. */
2493
2653
  wallet_age_days?: number;
2494
- /** True when 0xinsider first recorded the wallet within the new-wallet threshold (30 days). This public V1 field is first-seen recency, not the wallet's on-chain age. */
2654
+ /** True when wallet_age_days is under the new-wallet threshold (30 days), which means 0xinsider first recorded the wallet in the last 30 days. False when wallet_age_days is absent. This public V1 field is first-seen recency, not the wallet's on-chain age. */
2495
2655
  is_new_wallet: boolean;
2496
2656
  };
2497
2657
  market: {
@@ -2584,7 +2744,10 @@ export type ProofPendingPickSlot = {
2584
2744
  publication_order: number;
2585
2745
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
2586
2746
  is_free_selection: boolean;
2587
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2747
+ /**
2748
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2749
+ * @deprecated
2750
+ */
2588
2751
  supersedes_pick_id: string | null;
2589
2752
  };
2590
2753
  export type ReportPayload = {
@@ -2732,7 +2895,10 @@ export type ScheduledPickSlot = {
2732
2895
  publication_order: number;
2733
2896
  /** Viewer-independent free selection designation. New rows store it explicitly; historic null storage uses the original free slot. */
2734
2897
  is_free_selection: boolean;
2735
- /** Replacement predecessor stable id; null when no lineage is recorded. */
2898
+ /**
2899
+ * Deprecated (#24157): always null. No replacement lineage was ever recorded in this field; the key stays so existing V1 clients keep parsing. Identify a pick by pick_id.
2900
+ * @deprecated
2901
+ */
2736
2902
  supersedes_pick_id: string | null;
2737
2903
  };
2738
2904
  /** One side's score in a single set. The verbatim provider text stays on the team's `score` string; this is the parsed form. */
@@ -2744,6 +2910,23 @@ export type ScoreCell = {
2744
2910
  };
2745
2911
  /** Shape the provider score string was parsed into. `two_side` is one aggregate per side (basketball `105-98`), `multi_set` is per-set columns (tennis `6-7(5-7), 6-0, 1-0`), `esports_series` is a maps/sets/format triplet (`000-000|2-0|Bo3`). Omitted when the score could not be parsed. */
2746
2912
  export type ScoreFormat = "two_side" | "multi_set" | "esports_series";
2913
+ /** `sharp_money_flow_detected` data (Pro and Max): ranked-trader net flow on a market crossed the threshold. The deprecated spelling `smart_money_flow_detected` delivers the same object. */
2914
+ export type SharpMoneyFlowDetectedData = {
2915
+ /** Polymarket condition id of the market. */
2916
+ condition_id: string;
2917
+ /** Signed ranked-trader net flow in USD over `window`: positive is net into YES, negative net into NO. */
2918
+ net_flow_usd: number;
2919
+ /** Absolute value of `net_flow_usd`, the magnitude compared with the threshold. */
2920
+ abs_net_flow_usd: number;
2921
+ /** `yes` when `net_flow_usd` is 0 or more, else `no`. */
2922
+ dominant_side: "yes" | "no";
2923
+ /** Minimum trader grade included in the flow. */
2924
+ grade_floor: "S" | "A" | "B" | "C" | "D" | "F";
2925
+ /** Ranked-trader large fills that make up the flow. */
2926
+ whale_trade_count: number;
2927
+ /** Window the flow was aggregated over, for example `24h`. */
2928
+ window: string;
2929
+ };
2747
2930
  export type SmartMoneyFlowMarket = {
2748
2931
  market: {
2749
2932
  id: string;
@@ -2761,7 +2944,7 @@ export type SmartMoneyFlowMarket = {
2761
2944
  /** The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the net-flow direction outcome; null when unavailable (e.g. unsynced markets). */
2762
2945
  token_id: string | null;
2763
2946
  /** Canonical key since #16304 (Polymarket's noun is large trade); whale_trade_count is its deprecated spelling, emitted beside it with the same value. */
2764
- large_trade_count?: number;
2947
+ large_trade_count: number;
2765
2948
  whale_trade_count: number;
2766
2949
  buy_volume_usd: number;
2767
2950
  sell_volume_usd: number;
@@ -2776,7 +2959,7 @@ export type SmartMoneyFlowMarket = {
2776
2959
  /** The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the net-flow direction outcome; null when unavailable (e.g. unsynced markets). */
2777
2960
  token_id: string | null;
2778
2961
  /** Canonical key since #16304 (Polymarket's noun is large trade); whale_trade_count is its deprecated spelling, emitted beside it with the same value. */
2779
- large_trade_count?: number;
2962
+ large_trade_count: number;
2780
2963
  whale_trade_count: number;
2781
2964
  buy_volume_usd: number;
2782
2965
  sell_volume_usd: number;
@@ -2789,7 +2972,7 @@ export type SnapshotCompleteness = {
2789
2972
  reason: string;
2790
2973
  expected_days: number;
2791
2974
  /** Canonical key since #16304; covered_days_with_whale_activity is its deprecated spelling, emitted beside it with the same value. */
2792
- covered_days_with_large_trade_activity?: number;
2975
+ covered_days_with_large_trade_activity: number;
2793
2976
  covered_days_with_whale_activity: number;
2794
2977
  };
2795
2978
  export type SnapshotState = {
@@ -2842,6 +3025,27 @@ export type SuspiciousTrade = {
2842
3025
  /** Stored trade timestamp. */
2843
3026
  created_at: string;
2844
3027
  };
3028
+ /** `suspicious_trade_flagged` data (Pro and Max): a trade's suspicion score crossed the flag threshold for the first time. The deprecated spelling `insider_radar_flag_raised` delivers the same object. */
3029
+ export type SuspiciousTradeFlaggedData = {
3030
+ /** Numeric id of the flagged trade, a JSON number. It is the `id` that `GET /api/v1/large-trades/{id}` accepts. */
3031
+ trade_id: number;
3032
+ /** Address of the wallet that made the trade. */
3033
+ wallet: string;
3034
+ /** 0xinsider's numeric id for the wallet. */
3035
+ trader_id: number;
3036
+ /** Polymarket condition id of the market. */
3037
+ condition_id: string;
3038
+ /** The suspicion score, 0 to 100, that crossed the threshold. */
3039
+ suspicion_score: number;
3040
+ /** The scoring track that raised the flag. */
3041
+ track: "whale" | "fresh_conviction" | "sliced_position";
3042
+ /** Outcome side the flagged fill took. */
3043
+ side: "yes" | "no";
3044
+ /** Share count of the flagged fill. */
3045
+ size: number;
3046
+ /** Fill price of the flagged trade. */
3047
+ price: number;
3048
+ };
2845
3049
  /** Optional current-game tennis facts from API-Tennis, aligned with live_score.scores display order. These facts have their own revision and expiry; Polymarket remains the source of sets, match status, period, and the outer live-score revision. New observations require corroborated identity, current set/games, and live state. Cached responses and replayed frames may still carry expired facts, so clients must enforce expires_at. */
2846
3050
  export type TennisPoints = {
2847
3051
  source: "api_tennis";
@@ -2894,8 +3098,12 @@ export type Trader = {
2894
3098
  pnl: {
2895
3099
  /** 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. */
2896
3100
  total?: number;
2897
- /** 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. */
3101
+ /** Polymarket's net 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). 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. The 0xinsider profile's Total P&L is this figure unless pnl.correction is present, then pnl.correction.net_total. */
2898
3102
  net_total?: number;
3103
+ /** The 0xinsider correction to Polymarket's P&L for neg-risk conversions. Present only when one is published; pnl.net_total and pnl.realized keep Polymarket's own figures, and correction.net_total and correction.realized add the amount to them. */
3104
+ correction?: PnlCorrection;
3105
+ /** true while 0xinsider is still checking some of the wallet's converted neg-risk markets (not yet measured, measured and not yet checked for transfers, or its latest reads keep failing), so the correction may change, or arrive where none is published yet. Omitted otherwise. */
3106
+ correction_pending?: boolean;
2899
3107
  /** 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. */
2900
3108
  realized?: number;
2901
3109
  unrealized?: number;
@@ -2917,7 +3125,7 @@ export type Trader = {
2917
3125
  };
2918
3126
  strategy?: {
2919
3127
  /** Observed trading style identifier. New rows use two_sided, category_focused, high_activity, diversified, mixed, or unclassified. Historical identifiers remain readable during normal reclassification; style does not predict skill or intent. */
2920
- strategy_type?: string;
3128
+ strategy_type: string;
2921
3129
  description?: string;
2922
3130
  confidence?: number;
2923
3131
  };
@@ -3308,11 +3516,20 @@ export type TraderStatsExact = {
3308
3516
  /** stats.total_volume as an exact decimal: full-history both-sides cash volume in USD, Polymarket user-volume `volume_usdc`, from the verified `trader_usd_volume` observation. Never Polymarket's share count. */
3309
3517
  total_volume: ExactDecimal;
3310
3518
  };
3519
+ /** `trader_synced` data: a tracked wallet finished a sync pass and has a fresh grade. The deprecated spelling `whale_trader_synced` delivers the same object. */
3520
+ export type TraderSyncedData = {
3521
+ /** 0xinsider's numeric id for the wallet. */
3522
+ trader_id: number;
3523
+ /** Proxy wallet address. */
3524
+ wallet: string;
3525
+ };
3311
3526
  /** Field-level trust metadata returned only when GET /api/v1/trader/{address} includes expand=trust. */
3312
3527
  export type TraderTrust = {
3313
3528
  total_pnl: TrustMetadata;
3314
3529
  realized_pnl: TrustMetadata;
3315
3530
  net_total_pnl: TrustMetadata;
3531
+ /** Present only with pnl.correction: a computed value owned by trader_pnl_corrections, dated by the newest measurement behind it. */
3532
+ pnl_correction?: TrustMetadata;
3316
3533
  unrealized_pnl: TrustMetadata;
3317
3534
  markets_traded: TrustMetadata;
3318
3535
  win_rate: TrustMetadata;
@@ -3357,8 +3574,10 @@ export type TrendingWallet = {
3357
3574
  grade?: "S" | "A" | "B" | "C" | "D" | "F";
3358
3575
  /** Hot-streak tier (trailing-7d cross-sectional percentile). Omitted when there is no recent activity. */
3359
3576
  streak_tier?: "hot" | "rising" | "neutral" | "cooling" | "cold";
3360
- /** 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. */
3577
+ /** Polymarket's net total P&L for the wallet in USD: native Polymarket position P&L across all markets, fees included, plus credited maker and taker rebates (trader_trading_pnl.net_total_pnl). The 0xinsider profile's Total P&L is this figure unless pnl_correction is present, then pnl_correction.net_total. 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. */
3361
3578
  all_time_pnl_usd?: number;
3579
+ /** The 0xinsider correction to Polymarket's P&L for neg-risk conversions. Present only when one is published; all_time_pnl_usd keeps Polymarket's own figure and pnl_correction.net_total is the profile's Total P&L. */
3580
+ pnl_correction?: PnlCorrection;
3362
3581
  all_time_score?: number;
3363
3582
  last_synced?: string;
3364
3583
  /** Shape-only daily P&L sparkline across the window, derived from Polymarket's documented user-pnl cumulative curve (GET /v2/user-pnl) converted to per-day deltas. It conveys the trend of the curve only and is NOT guaranteed to sum to trending_pnl_usd, which is the canonical leaderboard total. */
@@ -3441,8 +3660,6 @@ export type Usage = {
3441
3660
  pay_as_you_go: boolean;
3442
3661
  /** The most requests this account is admitted in a UTC calendar month once enforcement has begun: limit, or four times limit with pay as you go on (2,000,000 for Pro). null for an admin account, which no number stops. Additive since 2026-09-22. */
3443
3662
  ceiling: number | null;
3444
- /** A historical usage price has not been reconciled to this plan allowance. Pay as you go remains unavailable until billing reconciliation. */
3445
- unavailable_reason?: "usage_price_reconciliation_required" | null;
3446
3663
  } | null;
3447
3664
  };
3448
3665
  meta: ResponseMeta;
@@ -3451,6 +3668,24 @@ export type VerifyWebhookRequest = {
3451
3668
  /** The one-time token returned on create or on a url change. It is necessary but not sufficient: the destination must also answer the signed webhook.verification challenge with a 2xx. */
3452
3669
  verification_token: string;
3453
3670
  };
3671
+ /** `wallet_grade_changed` data (Pro and Max): a tracked wallet's grade moved on a re-grade. */
3672
+ export type WalletGradeChangedData = {
3673
+ /** Lowercased proxy wallet address. */
3674
+ wallet: string;
3675
+ /** 0xinsider's numeric id for the wallet. */
3676
+ trader_id: number;
3677
+ /** The grade before the move. Never equal to `new_grade`. */
3678
+ old_grade: "S" | "A" | "B" | "C" | "D" | "F";
3679
+ new_grade: "S" | "A" | "B" | "C" | "D" | "F";
3680
+ /** `upgrade` when `new_grade` is better than `old_grade`, else `downgrade`. */
3681
+ direction: "upgrade" | "downgrade";
3682
+ /** Cohort skill index that drove the grade, 0 to 1. */
3683
+ skill_index: number;
3684
+ /** Final 0 to 100 score banded into the new grade. */
3685
+ final_score: number;
3686
+ /** The ranking date of the re-grade. */
3687
+ date: string;
3688
+ };
3454
3689
  /** Owner-scoped view of one webhook delivery attempt. Deliberately omits the request body and the endpoint signing secret: a delivery log never re-exposes the payload or any secret material. */
3455
3690
  export type WebhookDelivery = {
3456
3691
  id: number;
@@ -3677,6 +3912,28 @@ export type WhaleDatasetTrade = {
3677
3912
  trade_event_id: string;
3678
3913
  source_trade_ingested_at: string | null;
3679
3914
  };
3915
+ /**
3916
+ * The `data` payload of each webhook event type, from the document's
3917
+ * `webhooks` map. Two spellings of one event share one payload.
3918
+ */
3919
+ export interface WebhookEventData {
3920
+ export_job_cancelled: ExportJobCancelledData;
3921
+ export_job_expired: ExportJobExpiredData;
3922
+ export_job_failed: ExportJobFailedData;
3923
+ export_job_ready: ExportJobReadyData;
3924
+ insider_radar_flag_raised: SuspiciousTradeFlaggedData;
3925
+ large_positions_updated: LargePositionsUpdatedData;
3926
+ large_trade_inserted_v2: LargeTradeInsertedV2Data;
3927
+ large_trades_inserted: LargeTradesInsertedData;
3928
+ live_sports_updated: LiveSportsUpdatedData;
3929
+ sharp_money_flow_detected: SharpMoneyFlowDetectedData;
3930
+ smart_money_flow_detected: SharpMoneyFlowDetectedData;
3931
+ suspicious_trade_flagged: SuspiciousTradeFlaggedData;
3932
+ trader_synced: TraderSyncedData;
3933
+ wallet_grade_changed: WalletGradeChangedData;
3934
+ whale_trader_synced: TraderSyncedData;
3935
+ whale_trades_inserted: LargeTradesInsertedData;
3936
+ }
3680
3937
  /**
3681
3938
  * The `data` payload each operation answers with: what
3682
3939
  * `ApiClient.call<T>` resolves to, and the default `T` of every
@@ -3793,6 +4050,8 @@ export interface OperationData {
3793
4050
  error?: {
3794
4051
  code: number;
3795
4052
  message: string;
4053
+ /** Optional JSON-serializable error data. */
4054
+ data?: Record<string, unknown> | unknown[] | string | number | boolean | null;
3796
4055
  };
3797
4056
  };
3798
4057
  createWebhook: WebhookEndpoint;
@@ -3822,10 +4081,10 @@ export interface OperationData {
3822
4081
  getEventReplaySince: EventReplayEvent[];
3823
4082
  getGame: Game;
3824
4083
  getHealth: {
3825
- status?: "ok" | "degraded" | "down" | "maintenance";
3826
- db?: boolean;
3827
- cache?: boolean;
3828
- subsystems?: {
4084
+ status: "ok" | "degraded" | "down" | "maintenance";
4085
+ db: boolean;
4086
+ cache: boolean;
4087
+ subsystems: {
3829
4088
  /** Whether the webhook outbox schema validated on this probe. false lowers status to degraded. true during a maintenance window, when nothing is probed. */
3830
4089
  webhook_compatibility: boolean;
3831
4090
  /** Public-safe aggregate status for expected background job successful-completion heartbeats. Does not expose Redis keys, job names, raw errors, provider payloads, wallet addresses, or condition IDs. */
@@ -3951,8 +4210,6 @@ export interface OperationData {
3951
4210
  pay_as_you_go: boolean;
3952
4211
  /** The most requests this account is admitted in a UTC calendar month once enforcement has begun: limit, or four times limit with pay as you go on (2,000,000 for Pro). null for an admin account, which no number stops. Additive since 2026-09-22. */
3953
4212
  ceiling: number | null;
3954
- /** A historical usage price has not been reconciled to this plan allowance. Pay as you go remains unavailable until billing reconciliation. */
3955
- unavailable_reason?: "usage_price_reconciliation_required" | null;
3956
4213
  } | null;
3957
4214
  };
3958
4215
  getWebhook: WebhookEndpoint;
@@ -5058,6 +5315,8 @@ export interface OperationResponse {
5058
5315
  error?: {
5059
5316
  code: number;
5060
5317
  message: string;
5318
+ /** Optional JSON-serializable error data. */
5319
+ data?: Record<string, unknown> | unknown[] | string | number | boolean | null;
5061
5320
  };
5062
5321
  };
5063
5322
  createWebhook: {