@0xinsider/sdk 0.15.0 → 0.16.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.
package/dist/schema.d.ts CHANGED
@@ -802,10 +802,10 @@ export type LargeTrade = {
802
802
  /** The Polymarket CLOB token id (ERC1155 asset id, decimal string) for the traded outcome; null when unavailable (e.g. unsynced markets) and for a Polymarket trade recorded before 2026-04-02T00:00:00Z, where the traded side is unknown. */
803
803
  token_id: string | null;
804
804
  price: number;
805
- /** Current 0.0–1.0 review score, computed at request time from the trade's size, the trader's win rate today, a bonus when a trader with a win rate above 55% trades at a price below 30¢, and the trade's age now. A higher score means read this trade first; it does not measure edge or predict an outcome. On a historical row it is today's view of the trade, not what a reader saw then; use recorded_review_score for that. Canonical since #16311; signal_score carries the same value. */
805
+ /** Current trade review score on a 0..1 scale; higher values indicate a stronger review signal. This is the current response value and can differ from the recorded score. Missing measurements remain unavailable. */
806
806
  review_score: number;
807
807
  /**
808
- * Current 0.0–1.0 review score, computed at request time from the trader's win rate today and the trade's age now. Deprecated (#16311): `review_score` is the canonical spelling and carries the same value; this key stays on the wire.
808
+ * Deprecated alias of review_score with the same current value and 0..1 scale.
809
809
  * @deprecated
810
810
  */
811
811
  signal_score: number;
@@ -1205,7 +1205,6 @@ export type PickHolder = {
1205
1205
  is_bot?: boolean;
1206
1206
  /** The wallet's X handle from its Polymarket profile, normalized to 1-15 characters of [A-Za-z0-9_] with no `@`. Link it as `https://x.com/<handle>`. Stamped at serve time from the wallet's current trader record, never frozen with the pick. The five badge fields are present together, and only for a wallet that carries at least one badge; all absent means no badge, or a body cached before the fields shipped. */
1207
1207
  x_username?: string | null;
1208
- category_evidence?: HolderCategoryEvidence;
1209
1208
  };
1210
1209
  export type PickOfTheDay = {
1211
1210
  /** Always 'full' for an authenticated Pro key. */
@@ -1217,7 +1216,7 @@ export type PickOfTheDay = {
1217
1216
  * @deprecated
1218
1217
  */
1219
1218
  pick_rank?: number;
1220
- /** The complete ranked picks for this product day, ordered by pick_rank. Thin days contain fewer items; the selector never fabricates rows. */
1219
+ /** Published picks for this product day in the returned display order. Use pick_id for identity. */
1221
1220
  picks?: PickOfTheDay[];
1222
1221
  /** Number of items in `picks`: the proof-readable picks. Picks held in `proof_pending_picks` are not counted. */
1223
1222
  pick_count?: number;
@@ -1225,7 +1224,7 @@ export type PickOfTheDay = {
1225
1224
  scheduled_picks?: ScheduledPickSlot[];
1226
1225
  /** Human-readable matchup (e.g. "Portugal vs. Uzbekistan"). */
1227
1226
  matchup?: string;
1228
- /** Frozen canonical calibration/report bucket (e.g. "Basketball", "MMA", or "Soccer"). Existing semantics are unchanged; presentation consumers should prefer display_category when present. */
1227
+ /** Recorded canonical sport category. Prefer display_category for the public competition label. */
1229
1228
  category?: string;
1230
1229
  /** 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. */
1231
1230
  display_category?: string;
@@ -1251,23 +1250,19 @@ export type PickOfTheDay = {
1251
1250
  position?: string;
1252
1251
  /** One-line summary of which side sharp money is backing. Required on every item in `picks`: a current-day published pick whose required holder proof is not safely readable is listed in `proof_pending_picks` instead of being served with a partial success shape or a synthetic zero, and the route returns 503 read_model_warming only when no published pick has readable proof. */
1253
1252
  side_summary?: string;
1254
- /** Public V1 compatibility count of S/A sharp-money wallets on the backed side. The first-party/internal current policy counts S/A/B; historical rows retain their frozen policy's count. Required on every item in `picks`: a current-day published pick whose required holder proof is not safely readable is listed in `proof_pending_picks` instead of being served with a partial success shape or a synthetic zero, and the route returns 503 read_model_warming only when no published pick has readable proof. Canonical key since #16308; smart_wallet_count is its deprecated spelling, emitted beside it with the same value. */
1253
+ /** S/A wallet count on the backed side in the public V1 compatibility projection. */
1255
1254
  sharp_wallet_count?: number;
1256
1255
  /**
1257
- * Deprecated spelling of sharp_wallet_count, emitted beside it with the same value and never removed. Public V1 compatibility count of S/A sharp-money wallets on the backed side. The first-party/internal current policy counts S/A/B; historical rows retain their frozen policy's count. Required on every item in `picks`: a current-day published pick whose required holder proof is not safely readable is listed in `proof_pending_picks` instead of being served with a partial success shape or a synthetic zero, and the route returns 503 read_model_warming only when no published pick has readable proof.
1256
+ * Deprecated spelling of sharp_wallet_count with the same value.
1258
1257
  * @deprecated
1259
1258
  */
1260
1259
  smart_wallet_count?: number;
1261
- /** Best public V1-compatible S/A sharp-money grade on the backed side. The first-party/internal current policy can select B, but a current B-only grade is omitted by the stable V1 adapter. Historical rows retain their frozen policy's grade. A current-day published pick with pending legacy proof, unknown-future proof, or structurally invalid current-policy proof returns 503 before this success schema is served. Resolved legacy proof remains readable on both current-day and archive/history responses. */
1260
+ /** Best recorded S/A grade in the public V1 compatibility projection. */
1262
1261
  top_grade?: string;
1263
- /** Deprecated (#7170): no longer populated for picks selected on/after the calibration-edge change; omitted (absent) for new picks (the field uses skip_serializing_if, so a null value is dropped from the JSON rather than serialized as null). Permanently frozen-legacy -- retained for historical picks, with no removal or replacement planned, so no v2 is implied. Historical picks may still carry a value. Legacy meaning: category win-rate edge as a fraction (the backed-side cohort's win rate in this category minus the non-market-maker category baseline, e.g. 0.09 = +9 points), paired with category_edge_sample. */
1264
- category_edge_pct?: number;
1265
- /** Deprecated (#7170): no longer populated for picks selected on/after the calibration-edge change; omitted (absent) for new picks (the field uses skip_serializing_if, so a null value is dropped from the JSON rather than serialized as null). Permanently frozen-legacy -- retained for historical picks, with no removal or replacement planned, so no v2 is implied. Historical picks may still carry a value. Legacy meaning: pooled count of resolved markets behind category_edge_pct (the headline's n). */
1266
- category_edge_sample?: number;
1267
- /** Recency-weighted graded-flow magnitude in USD; omitted when <= 0. Canonical key since #16308; smart_usd is its deprecated spelling, emitted beside it with the same value. */
1262
+ /** Recorded sharp-money magnitude in USD when available. */
1268
1263
  sharp_usd?: number;
1269
1264
  /**
1270
- * Deprecated spelling of sharp_usd, emitted beside it with the same value and never removed. Recency-weighted graded-flow magnitude in USD; omitted when <= 0.
1265
+ * Deprecated spelling of sharp_usd with the same value.
1271
1266
  * @deprecated
1272
1267
  */
1273
1268
  smart_usd?: number;
@@ -1301,67 +1296,40 @@ export type PickOfTheDay = {
1301
1296
  unit_score?: number;
1302
1297
  /** Backend-formatted signed unit score, present exactly when unit_score is present. */
1303
1298
  unit_score_display?: string;
1304
- /** First-party/internal backed-side sharp-money dollar consensus as a fraction 0..1: the share of current-policy sharp dollars on the backed side. Omitted on current public V1 rows when the B-inclusive value has no reconstructible S/A equivalent. A conviction signal, NOT a probability or expected-value claim. Frozen at generation. */
1299
+ /** Recorded sharp-money share as a 0..1 fraction when available. This is not a winning probability. */
1305
1300
  sharp_pct?: number;
1306
- /** Market-implied probability of the backed side as a fraction 0..1 (equals backed_price), re-exposed alongside sharp_pct for the WHY breakdown. */
1301
+ /** Recorded market-implied probability as a 0..1 fraction when available. */
1307
1302
  market_pct?: number;
1308
- /** First-party/internal consensus edge = sharp_pct - market_pct, the conviction-vs-price gap (how much more of the current-policy sharp money sits on this side than the price implies). Omitted on current public V1 rows when the B-inclusive value has no reconstructible S/A equivalent. This is NOT an expected-value or guaranteed edge. Omitted when either input is unavailable. */
1309
- consensus_edge_pct?: number;
1310
- /** First-party/internal team-directional commitment read at selection time: the fraction (0..1) of the backed side's current-policy graded sharp-money DOLLARS held by wallets read one-way rather than hedged: no opposite leg on this market worth at least 10% of the backed leg (Polymarket's own currentValue pair), and no opposing team across the game's markets where the wallet's synced legs are fresh. Current public V1 rows omit this B-inclusive read because its historical S/A equivalent is not reconstructed. A high value means the graded pile is really committed to this side; a low one means much of it is hedged or unreadable. Omitted when the read was not computed (a pick selected before the field existed, an ungroupable game, an empty graded pile, or a pile where no holder carried usable evidence) -- which is NOT the same as 0.0, a computed reading that classified holders and found none one-way. */
1311
- directional_confidence?: number;
1312
- /** Graded backed-side holders read as one-way-committed on this game. */
1313
- one_way_holder_count?: number;
1314
- /** Graded backed-side holders read as HEDGED across the game's markets. */
1315
- hedged_holder_count?: number;
1316
- /** The one-way holders' share of the backed-side graded dollars (the confidence's numerator). */
1317
- one_way_graded_usd?: number;
1318
- /** Backed-side graded dollars the confidence is measured against (its denominator). */
1319
- total_graded_usd?: number;
1320
- /** The qualifying category expert whose sport-specific record and real position earned this pick its top selection tier. The first-party/internal current policy admits S/A/B; public V1 exposes a compatible S/A expert and omits a current-policy B-grade expert: a candidate backed by one outranks every candidate without one. Present only on the full payload. Omitted when no wallet qualified on the backed side, on picks generated before the field existed, and on the first-party web teaser, which withholds all backed-side evidence. Frozen at SELECTION time — the wallet's position can move before the pick renders. */
1303
+ /** Optional recorded specialist facts. These describe the trader and do not disclose selection decisions. Present only on a full response when available. */
1321
1304
  qualifying_expert?: {
1322
- /** Wallet address of the qualifying expert. */
1305
+ /** Trader wallet address. */
1323
1306
  address: string;
1324
1307
  /** Provider display name, or null for an unnamed wallet. */
1325
1308
  name: string | null;
1326
- /** 0xinsider grade letter. The first-party/internal current Pick of the Day policy counts S, A, and B; public V1 exposes only the compatible S/A expert. */
1309
+ /** Recorded trader grade. Public V1 preserves its S/A compatibility projection. */
1327
1310
  grade: string | null;
1328
1311
  /** The canonical sport bucket the win rate was measured over (for example Basketball). Can be BROADER than the pick's display_category, which names an exact league such as NBA — label the rate with this field, never with display_category. */
1329
1312
  canonical_category: string;
1330
- /** Share of this wallet's resolved markets in canonical_category whose realized P&L came out positive, as a 0..1 fraction. Above 0.60 by construction for a source=v1 expert; null for an expert who qualified on the category-skill v2 definition only. Deliberately NOT phrased as "closed profitable": the metric counts realized P&L above zero, so a resolved winner the wallet never redeemed sits at zero and counts against it. */
1313
+ /** Share of the trader’s resolved markets in canonical_category with positive realized P&L, as a 0..1 fraction. Null when not measured. This is a trader statistic, not the pick’s probability of winning. */
1331
1314
  win_rate: number | null;
1332
- /** Resolved markets in canonical_category behind win_rate. At least 10 by construction for a source=v1 expert; null with win_rate. */
1315
+ /** Number of resolved markets behind win_rate; null when not measured. */
1333
1316
  n_resolved: number | null;
1334
- /** Current expert policy 10 does not require a category-skill v2 specialist in any sport; in every sport a specialist raises the candidate's rank tier rather than gating it. Standard specialists need a positive edge_lower_95 over enough independent events and enough net backing on the backed side; the floors are not published. Fresh healthy records below the shared model's live sample floor can qualify; stale, unknown and degraded records cannot. Historical records preserve which definition qualified the wallet: v1, the profitability rate (win_rate over n_resolved), or v2, the forward-only category-skill calibration edge (edge_lower_95 over independent_event_count). Absent on picks frozen before the v2 definition existed; read absence as v1. A Tennis pick frozen under gate policy v4 or later carries v2 only: a v1 rate stopped qualifying a tennis expert at v4. A Tennis pick frozen under an earlier policy can still carry v1 with a win rate. */
1335
- source?: "v1" | "v2";
1336
- /** 95% lower bound of the wallet's mean calibration edge over the market price in canonical_category, in probability units (0.08 is 8 points). Positive by construction for a v2 expert; present on a v1 expert only when the wallet also holds a live v2 row. */
1337
- edge_lower_95?: number;
1338
- /** Point estimate behind edge_lower_95. */
1339
- edge_mean?: number;
1340
- /** Independent canonical events behind the edge. At least 10 by construction for a v2 expert. */
1341
- independent_event_count?: number;
1342
- /** Polymarket's own currentValue for this wallet on the backed outcome, in USD, as of selection. At least 1000 by construction through gate policy v7; the standard floor is 500 from v8. From gate policy v5 the floor is read on the net: position_usd minus opposite_position_usd is at least that floor, and the pick re-verifies that net against the live holder snapshot when it is released. */
1317
+ /** Recorded Polymarket position value on the backed outcome, in USD. It can change after this snapshot. */
1343
1318
  position_usd: number;
1344
- /** The same wallet's currentValue on the OTHER outcome of this market, in USD, as of selection. Present from gate policy v5, when the floor moved to net exposure; a wallet long both sides does not qualify. Absent on picks frozen before v5, which never read the leg. 0 is a measured one-way position, not an absence. */
1319
+ /** Recorded position value on the other outcome of this market, in USD. Omitted when not recorded; zero is a measured value. */
1345
1320
  opposite_position_usd?: number;
1346
- /** When the skill read model behind the evidence was last rebuilt: trader_category_stats.computed_at for a source=v1 expert, category_skill_v2_current.as_of for a source=v2 expert. */
1321
+ /** Timestamp of the recorded trader statistics. */
1347
1322
  stats_computed_at: string;
1348
- /** Present from expert policy 6. Current expert policy 10 retains the longshot requirement of live v2 only, with a positive lower bound over a large sample, large net backed value and no meaningful opposite value. Historical policy 6: a specialist required large net backed value, no meaningful opposite value, and either a live v2 positive lower bound over a large sample or a high v1 rate over enough resolved markets. Tennis requires v2. The floors are not published. */
1349
- lane?: "standard" | "longshot_specialist";
1350
- /** Answered, spread-gated, index-scoped backed probability frozen only on a specialist exception. */
1351
- lane_probability?: number;
1352
- /** Canonical provider probability pair branch; absent on standard experts. */
1353
- lane_probability_source?: "p";
1354
- };
1355
- trust?: PickTrust;
1356
- /** Public V1 S/A compatibility count on the backed side (equals the adapted sharp_wallet_count). The first-party/internal current policy counts S/A/B. Historical rows retain their frozen policy's count. */
1323
+ };
1324
+ /** Public V1 S/A wallet count on the backed side, equal to sharp_wallet_count. */
1357
1325
  traders?: number;
1358
- /** Raw backed-side sharp-money USD frozen at generation. This is the Sharp USD value, not the recency-weighted sharp_usd which decays. Omitted on current public V1 rows when the B-inclusive value has no reconstructible S/A equivalent. */
1326
+ /** Recorded backed-side sharp-money value in USD when available. */
1359
1327
  backed_sharp_usd?: number;
1360
- /** Bounded S/A compatibility projection of the frozen sharp-money holders on the backed side. Current full payloads expose the complete S/A/B roster in display_holders; historical rows can retain their earlier frozen shape. */
1328
+ /** Bounded S/A holder display projection. Historical rows retain their recorded display shape. */
1361
1329
  holders?: PickHolder[];
1362
- /** Full-only complete provider-confirmed S/A/B holder roster for the current Pick of the Day backing policy. Omitted for teaser, no-pick, and historical rows whose frozen holder proof predates this policy. Each entry may additionally carry `category_win_rate` / `category_win_rate_status`: the wallet's win rate in the pick's canonical `category`, stamped at serve time from the current category read model (the same annotation the sports sharp-money chips carry). The bounded `holders` compatibility projection never carries these fields. */
1330
+ /** Optional complete holder display roster. Each entry carries ordinary trader and recorded position facts. */
1363
1331
  display_holders?: PickHolder[];
1364
- /** Exact S/A sharp-money proof count on the backed side. The current display_holders roster can be longer because it also carries B-grade sharp-money holders. */
1332
+ /** S/A holder count for the public V1 compatibility projection. display_holders can include additional grades. */
1365
1333
  holder_count?: number;
1366
1334
  /** Optional editorial note attached to the pick. */
1367
1335
  editorial_note?: string;
@@ -1373,17 +1341,15 @@ export type PickOfTheDay = {
1373
1341
  polymarket_url?: string;
1374
1342
  /** The canonical /event game-page slug (one neutral page per game); omitted when the game has no neutral event page. */
1375
1343
  event_slug?: string;
1376
- /** Backend-resolved /event destination slug for this pick's source market; its absence is an authoritative no-link decision. */
1377
- event_link_slug?: string;
1344
+ /** Backend-resolved /event destination slug for the source market. Omitted outside full responses; null is an authoritative no-link decision. */
1345
+ event_link_slug?: string | null;
1378
1346
  /** Provider-first sports context for the pick's market (team logos, league branding, live score). Full-state only; omitted when the pick is not a team-sports market. */
1379
1347
  sports_context?: PickSportsContext;
1380
1348
  /** Risk disclaimer shown with every pick. */
1381
1349
  disclaimer?: string;
1382
1350
  /** Published same-day picks whose holder proof is not readable yet, ordered by pick_rank. Additive and optional: present only while at least one such pick exists. While present, `picks` carries only the proof-readable picks and `pick_count` counts them. Schedule the next read from the earliest retry_at instead of polling. The route returns 503 read_model_warming only when no published pick has readable proof. */
1383
1351
  proof_pending_picks?: ProofPendingPickSlot[];
1384
- /** Frozen admission classification, full payload only. The specialist lane exempts two probability rejects and adds no rank bonus. Historical rows remain standard. */
1385
- selection_lane?: "standard" | "longshot_specialist";
1386
- /** Optional full-only authorization for newly issued policy-7 picks; omitted for legacy or unissued picks and teasers. It remains historical after expiry. */
1352
+ /** Optional full-response entry authorization. Missing or expired authorization cannot authorize an automated entry. */
1387
1353
  entry_authorization?: PotdEntryAuthorization;
1388
1354
  /** Stable pick row identity as decimal text. Never use a quality rank as identity. */
1389
1355
  pick_id?: string;
@@ -1795,11 +1761,6 @@ export type PickSportsTeam = {
1795
1761
  /** Completed sets won by this side. Present only when both sides expose the same set columns, so a partially parsed scoreline reports no tally rather than a misleading one. */
1796
1762
  sets_won?: number;
1797
1763
  };
1798
- /** Field-level trust metadata for the full Pick of the Day payload. Present on the full shape only (omitted on the teaser and the no-pick state, because whether a specialist backs the pick is itself backed-side evidence). Unlike TraderTrust it is not gated behind expand=trust: it carries one member on an endpoint that returns a single object per day. */
1799
- export type PickTrust = {
1800
- /** Provenance of the frozen qualifying category expert. source.kind=database with reconciliation.status=db_mirror means the evidence deserialized, still satisfies every frozen selection gate, and is being served. On that arm freshness.status is always not_live and never fresh, because this evidence is frozen at selection and never refreshed, so on an archived pick the as_of (the expert's own stats_computed_at) can be days or months old by design. source.kind=computed with reconciliation.status=not_applicable means the selector evaluated the backed side and nobody qualified -- a real negative. source.kind=computed with freshness.status=unknown and completeness.status=not_computed means the selector never evaluated this field, as on a pre-feature pick. source.kind=unavailable means the payload is malformed, violates a selection gate, or conflicts with its persisted status, or the public V1 adapter intentionally omitted a current-policy B-grade expert; read the reason before treating it as a negative. Do not read an omitted qualifying_expert as 'no specialist' without checking this field. */
1801
- qualifying_expert: TrustMetadata;
1802
- };
1803
1764
  export type PlatformCapabilities = {
1804
1765
  grade: PlatformCapabilityStatus;
1805
1766
  pnl: PlatformCapabilityStatus;
@@ -1909,7 +1870,7 @@ export type PositionTimelineEvent = {
1909
1870
  /** Cumulative buy-weighted average of stored fills for this outcome, including older pages; not provider current-position avgPrice. Sells do not change this value. 0 when no stored buys have occurred yet. */
1910
1871
  running_avg_price: number;
1911
1872
  };
1912
- /** Policy-7 issuance binds one condition, selected token, outcome, canonical event and sport. Reuse the same authorization across public/private discovery and retries. Require a new account-size executable book and current market eligibility; this frozen reference does not prove current liquidity or positive expected value. Absence or expiry cannot authorize a new automated entry. */
1873
+ /** Returned entry permission bound to the named market, token and outcome. Honor max_entry_price and expires_at, and check a current executable order book for the actual stake. This snapshot does not guarantee current liquidity, execution or positive expected value. */
1913
1874
  export type PotdEntryAuthorization = {
1914
1875
  version: 1;
1915
1876
  authorization_id: string;
@@ -1921,13 +1882,13 @@ export type PotdEntryAuthorization = {
1921
1882
  category: string;
1922
1883
  /** Exact provider parent event ID, or provider event ID when no parent exists. */
1923
1884
  canonical_event_id: string;
1924
- /** Immutable decimal limit: first fresh selected-token ask plus 0.02, floored to the provider tick below 1. Fees excluded. Never a calibrated fair probability. */
1885
+ /** Returned maximum entry price as an exact decimal string. Honor this bound; fees are excluded. This is not a fair probability. */
1925
1886
  max_entry_price: string;
1926
1887
  reference_best_ask: string;
1927
1888
  reference_book_hash: string;
1928
1889
  reference_book_at: string;
1929
1890
  issued_at: string;
1930
- /** Original provider kickoff ceiling. Never extended on retry. */
1891
+ /** Authorization expiry. An expired authorization cannot authorize a new automated entry. */
1931
1892
  expires_at: string;
1932
1893
  };
1933
1894
  /** 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. */
@@ -1936,7 +1897,7 @@ export type PreGameSide = {
1936
1897
  side: string | null;
1937
1898
  /** UTC time at which the snapshot that ranked this row was computed. Canonical spelling of signal_created_at (#16310), same value. */
1938
1899
  ranked_at: string;
1939
- /** Grade-weighted holders times the share of their money on the side: (5*s + 4*a + 3*b) * sharp_pct. Canonical spelling of conviction_score (#16310), same value. */
1900
+ /** Recorded side backing score; higher values indicate stronger backing. */
1940
1901
  backing_score: number;
1941
1902
  /** Signed share of graded money on the side, (yes_usd - no_usd)/(yes_usd + no_usd) in [-1, 1] (side-yes positive, side-no negative). Canonical spelling of smart_score (#16309, #16310), same value. */
1942
1903
  side_share: number | null;
@@ -1979,7 +1940,7 @@ export type PreGameSide = {
1979
1940
  /** Best grade present on the piled side; null when none. */
1980
1941
  top_grade: "S" | "A" | "B" | null;
1981
1942
  /**
1982
- * Canonical sharp-money score (yes_usd - no_usd)/(yes_usd + no_usd) in [-1, 1] (piled-yes positive, piled-no negative); a lower-order ranking tiebreak (after directional_rank_score and conviction_score). Deprecated (#16310): `side_share` is the canonical spelling and carries the same value; this key stays on the wire.
1943
+ * Canonical sharp-money score (yes_usd - no_usd)/(yes_usd + no_usd) in [-1, 1] (piled-yes positive, piled-no negative). Deprecated (#16310): `side_share` is the canonical spelling and carries the same value; this key stays on the wire.
1983
1944
  * @deprecated
1984
1945
  */
1985
1946
  smart_score: number | null;
@@ -1988,7 +1949,7 @@ export type PreGameSide = {
1988
1949
  /** Aggregate recent flow direction on the market; null when unavailable. */
1989
1950
  net_side: "BUY" | "SELL" | null;
1990
1951
  /**
1991
- * Grade-weighted pile score (5*s + 4*a + 3*b) * sharp_pct; the raw conviction input to the ranking (see directional_rank_score). Deprecated (#16310): `backing_score` is the canonical spelling and carries the same value; this key stays on the wire.
1952
+ * Recorded conviction score; higher values indicate stronger conviction.
1992
1953
  * @deprecated
1993
1954
  */
1994
1955
  conviction_score: number;
@@ -2000,7 +1961,7 @@ export type PreGameSide = {
2000
1961
  one_way_graded_usd: number | null;
2001
1962
  /** One-way fraction of the piled graded dollars, in [0, 1] -- the metric orthogonal to sharp_pct. Stale, unknown, hedged, and two-sided dollars dilute it toward zero (conservative). Null when the directional read was not computed or classified nobody. */
2002
1963
  directional_confidence: number | null;
2003
- /** The ranking key, descending: conviction_score * (1 + 0.25 * directional_confidence). Equals conviction_score when the directional read is null/zero, so signals without the read rank exactly as before. */
1964
+ /** Recorded side ordering score; higher values sort first. */
2004
1965
  directional_rank_score: number;
2005
1966
  category_skill: PreGameSideCategorySkill;
2006
1967
  /** 1-based rank within the (min_grade-filtered) ranked result. */
@@ -2037,7 +1998,7 @@ export type PreGameSideFunnelReport = {
2037
1998
  export type PreGameSideObservation = {
2038
1999
  /** 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. */
2039
2000
  side: string | null;
2040
- /** Grade-weighted holder-pile score before directional enrichment. Canonical spelling of conviction_score (#16310), same value. */
2001
+ /** Recorded side backing score; higher values indicate stronger backing. */
2041
2002
  backing_score: number;
2042
2003
  /** Signed share of graded money on the side, in [-1, 1]. Canonical spelling of smart_score (#16309, #16310), same value. */
2043
2004
  side_share: number;
@@ -2091,7 +2052,7 @@ export type PreGameSideObservation = {
2091
2052
  /** Strictly positive stored market volume in USD. Missing, zero, or non-finite volume terminates as invalid_market and is never emitted as an observation. */
2092
2053
  volume: number;
2093
2054
  /**
2094
- * Grade-weighted holder-pile score before directional enrichment. Deprecated (#16310): `backing_score` is the canonical spelling and carries the same value; this key stays on the wire.
2055
+ * Recorded conviction score; higher values indicate stronger conviction.
2095
2056
  * @deprecated
2096
2057
  */
2097
2058
  conviction_score: number;
@@ -2107,7 +2068,7 @@ export type PreGameSideObservation = {
2107
2068
  hedged_holder_count: number | null;
2108
2069
  one_way_graded_usd: number | null;
2109
2070
  directional_confidence: number | null;
2110
- /** Default cohort ordering key: conviction_score * (1 + 0.25 * directional_confidence), or conviction_score when confidence is null. */
2071
+ /** Recorded side ordering score; higher values sort first. */
2111
2072
  directional_rank_score: number;
2112
2073
  /** 1-based rank within this observation cohort and snapshot. */
2113
2074
  rank: number;
@@ -2424,9 +2385,9 @@ export type Trader = {
2424
2385
  /** Hot-streak tier (trailing-7d cross-sectional percentile); a separate axis from the all-time grade. Omitted when there is no recent activity. */
2425
2386
  streak_tier?: "hot" | "rising" | "neutral" | "cooling" | "cold";
2426
2387
  score?: number;
2427
- /** Capital-normalized forecasting score: the cohort percentile (0-100) of the EB-shrunk calibration edge. Omitted when the forecasting signal is unavailable; never replaced with zero. */
2388
+ /** Optional forecast score on the documented display scale. Null when unavailable. */
2428
2389
  forecast_score?: number;
2429
- /** Share of forecast_score supported by the trader's own resolved-market record rather than the cohort prior: n / (n + 30). Omitted when forecast_score is unavailable. */
2390
+ /** Optional measured forecast context. Missing values remain unavailable rather than being inferred. */
2430
2391
  forecast_evidence?: number;
2431
2392
  rank?: number;
2432
2393
  pnl: {
@@ -2455,11 +2416,11 @@ export type Trader = {
2455
2416
  description?: string;
2456
2417
  confidence?: number;
2457
2418
  };
2458
- /** Per-category performance breakdown (expand=categories or expand[]=categories). Omitted unless expanded. Object keyed by category name; each value is the precomputed trader_rankings.category_ranks payload (rank, total_in_category, total_pnl, scaled_total_pnl, n_markets, wins, losses, win_rate; scaled_total_pnl is a legacy alias that currently equals total_pnl). RANK BASIS: rank and total_in_category use the same hourly breakpoint publication; categories absent from that publication are omitted until a later publication includes them. Current trader performance values update separately, so this is not a frozen historical record. BASIS: the calibration sample, which admits a position only above a 20 USD notional floor and with a chosen-side entry price strictly inside (0,1), because the ranks and the calibration edge derived from it depend on both rules. That is a different sample from GET /api/v1/trader/{address}/categories, which counts every settled market at any size, and the two differ in both directions. Measured on production 2026-09-22 over the 122,497 wallet-category pairs with at least 20 decided markets on both bases: the floored rate was higher in 56.5% of pairs, lower in 34.5% and equal in 9.0%, median +0.6 points, p10 -4.6, p90 +9.8, and 14.0% of pairs differ by 10 points or more. The difference is not only small positions: on a 1-in-250 wallet sample the same day, admitted markets won 56.6% while markets dropped by the notional floor alone won 45.2% and markets dropped by the entry-price rule alone won 48.7%. n_markets counts every admitted market including the ones that resolved at exactly zero P&L, so it is not the denominator of win_rate: it differed from wins + losses in 15.8% of pairs with at least 5 decided markets. The two tables also run on different clocks, this one updated incrementally and that route rebuilt daily, so a same-day read can differ on timing alone. Use this for rank context and that route for the wallet's plain record. Pass-through DB JSON: keys and value shape are DB-owned, so the inner shape is intentionally unconstrained and may carry additional compatibility fields. */
2419
+ /** Per-category rank context when expand=categories is requested. Values include available rank, category totals, performance and record counts; scaled_total_pnl is a legacy alias of total_pnl. Its measurement basis and update timing differ from the plain record returned by GET /api/v1/trader/{address}/categories, so the two need not agree. Use this for rank context and that route for the plain record. The inner key-set is intentionally unconstrained and may contain additional compatibility fields. */
2459
2420
  category_strengths?: Record<string, unknown>;
2460
2421
  /** Curated advanced risk/performance metrics (expand=quant_metrics or expand[]=quant_metrics). Omitted unless expanded and backed by a computed row strictly under six hours old; a missing row, NULL computed_at, or age of exactly six hours or more is stale and omitted. Provider-input changes may intentionally lag inside the bounded six-hour window. When present, all listed fields are present (each is a number or null); null means insufficient trade history and must not be treated as 0. The fixed field shape is unchanged. */
2461
2422
  quant_metrics?: {
2462
- /** Composite skill score, 0-100. smart_score = clamp(0, 100, 30*sharpe_percentile_fraction + 20*profit_factor_percentile_fraction + 20*edge_consistency_percentile_fraction + 10*min(1, return_on_capital/2) + 10*equity_smoothness + 10*(1 - min(1, asset_concentration))). Higher is better. null when insufficient history. */
2423
+ /** Trader smart score on a 0..100 display scale; higher is stronger. Null when unavailable. */
2463
2424
  smart_score: number | null;
2464
2425
  /** 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. */
2465
2426
  copy_score: number | null;