0xinsider · Schema

TraderContext

SportsEsportsAnalyticsFinance

Properties

Name Type Description
trader object
position_summary object Aggregate position and P&L coverage for the trader, over its synced markets. Since 2026-10-27 (#29366) a wallet that holds a sports or esports market has only sports and esports markets synced, so mar
data_as_of stringnull RFC3339 freshness of the OPEN-position-level data: when a position_summary is present this mirrors its as_of byte-for-byte (latest /positions snapshot, else last completed sync) -- the open-position f
freshness_note string Human-readable statement of the point-in-time snapshot semantics (data_as_of is the open-position clock -- the latest /positions snapshot, else the last completed sync; the snapshot advances only open
View JSON Schema on GitHub

JSON Schema

0xinsider-com-trader-context-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/0xinsider-com/json-schema/0xinsider-com-trader-context-schema.json",
  "title": "TraderContext",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/0xinsider-com-openapi.json#/components/schemas/TraderContext",
  "type": "object",
  "required": [
    "trader",
    "data_as_of",
    "freshness_note"
  ],
  "properties": {
    "trader": {
      "$ref": "#/$defs/Trader"
    },
    "position_summary": {
      "type": "object",
      "description": "Aggregate position and P&L coverage for the trader, over its synced markets. Since 2026-10-27 (#29366) a wallet that holds a sports or esports market has only sports and esports markets synced, so markets_synced, markets_resolved, markets_open, unrealized_mtm, cost_basis_locked and the resolved win figures cover those markets; before, they covered every Polymarket market. A wallet with no sports or esports market can still carry older markets of other categories until they are deleted. markets_total, total_realized_pnl and synced_realized_pnl still cover every Polymarket market of the wallet. Omitted entirely (key absent, never null) when the trader is not in the local database or native net economics is unavailable. Realized fields remain numbers when present, including a genuine zero.",
      "required": [
        "markets_total",
        "markets_synced",
        "markets_pruned",
        "markets_unstored",
        "markets_combo",
        "markets_resolved",
        "markets_open",
        "sync_coverage",
        "synced_realized_pnl",
        "total_realized_pnl",
        "unrealized_mtm",
        "cost_basis_locked",
        "resolved_win_rate",
        "resolved_wins",
        "resolved_decided",
        "as_of"
      ],
      "properties": {
        "markets_total": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Polymarket's count of the markets the wallet traded, every category, when known; null when the provider total is unavailable."
        },
        "markets_synced": {
          "type": "integer",
          "description": "Markets with locally synced position rows."
        },
        "markets_pruned": {
          "type": "integer",
          "description": "Markets outside sports and esports that the wallet traded and whose synced rows 0xinsider deleted, counted when they were deleted (from 2026-10-27, #29366); 0 when none were. Not in markets_synced or any other count here; sync_coverage adds it to markets_synced so both sides of that ratio count every category."
        },
        "markets_unstored": {
          "type": "integer",
          "description": "Markets outside sports and esports that the wallet first traded since 2026-10-26, which 0xinsider does not store, counted as the wallet syncs (#30165); 0 when none are. Not in markets_synced, markets_pruned or any other count here; sync_coverage adds it with markets_pruned to markets_synced."
        },
        "markets_combo": {
          "type": "integer",
          "description": "Combo markets the wallet traded, as maker or taker, counted from the combo fills 0xinsider indexes from the chain (#30218); 0 when it traded none. Polymarket counts each combo as one market in markets_total, and no position read lists one, so a combo is in no other count here; sync_coverage adds it with markets_pruned and markets_unstored to markets_synced."
        },
        "markets_resolved": {
          "type": "integer",
          "description": "Synced markets that have resolved."
        },
        "markets_open": {
          "type": "integer",
          "description": "Synced markets still open with residual value (open positions with current value > 0)."
        },
        "sync_coverage": {
          "type": "number",
          "description": "markets_synced plus markets_pruned plus markets_unstored plus markets_combo, divided by markets_total when the provider total is known (capped at 1.0); 0.0-1.0. Both sides count every category: no Polymarket count of a wallet's sports and esports markets exists, so the ratio does not estimate one. When markets_total is unknown or not positive (null, 0, or negative), this is 1.0 if that sum is positive (else 0.0), so cross-check markets_total before treating 1.0 as full coverage."
        },
        "synced_realized_pnl": {
          "type": "number",
          "description": "Native net realized P&L (USD) over every Polymarket market of the wallet, including credited rebates, minus the stored realized component of synced open positions with positive current value. Rebates are credited to the account, not to a position, so every credited rebate stays in this figure. NUMERIC arithmetic precedes conversion to a JSON number."
        },
        "total_realized_pnl": {
          "type": "number",
          "description": "Native net realized P&L (USD) over every Polymarket market of the wallet, including credited rebates, read directly from the accounting snapshot. For the sports and esports figure read trader.pnl.in_scope.realized_pnl. Position sync_coverage is separate from this accounting basis."
        },
        "unrealized_mtm": {
          "type": "number",
          "description": "Mark-to-market unrealized P&L (USD) on open positions in synced markets."
        },
        "cost_basis_locked": {
          "type": "number",
          "description": "Cost basis (USD) currently tied up in open positions in synced markets."
        },
        "resolved_win_rate": {
          "type": [
            "number",
            "null"
          ],
          "description": "Win rate as a percentage (0-100): resolved_wins over resolved_decided. A resolved market that settled at exactly zero realized P&L (a void, a refund, a fully hedged position) is neither a win nor a loss and is not in the denominator, the same rule the leaderboard applies; null when no resolved market was decided. It is the rule of trader.stats.win_rate, read from the synced rows at request time; stats.win_rate is the stored figure the profile shows, refreshed by each sync and a few minutes after a closed-history write. context.md prints one Market win rate, stats.win_rate."
        },
        "resolved_wins": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Resolved markets that settled at positive realized P&L: the win-rate numerator. Additive; null only on a summary cached before the field existed."
        },
        "resolved_decided": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Resolved markets that settled at a non-zero realized P&L: the win-rate denominator. At most markets_resolved; the difference is markets settled at exactly zero or with an unknown P&L. Additive; null only on a summary cached before the field existed."
        },
        "as_of": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "RFC3339 freshness of the served OPEN-position data: the trader's latest /positions snapshot, else the last completed sync. The snapshot advances ONLY open positions, so read this as the open-position freshness clock -- the resolved/closed aggregates on this same summary (markets_resolved, resolved_win_rate) advance only on a full sync. The value is the /positions snapshot instant when one exists, so it is typically at or just before the trader-level last sync on a normal sync, and can be AFTER it while the active-view loop refreshes open positions between full syncs. This clock does not establish native accounting freshness. Always present on the wire (serialized as JSON null when the trader has neither a snapshot nor a sync); never omitted."
        }
      }
    },
    "data_as_of": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "RFC3339 freshness of the OPEN-position-level data: when a position_summary is present this mirrors its as_of byte-for-byte (latest /positions snapshot, else last completed sync) -- the open-position freshness clock, since the snapshot advances only open positions; otherwise the trader's last completed sync, even if an unserved position snapshot exists. Null when the selected clock is unavailable; a missing breakdown does not establish position or accounting freshness."
    },
    "freshness_note": {
      "type": "string",
      "description": "Human-readable statement of the point-in-time snapshot semantics (data_as_of is the open-position clock -- the latest /positions snapshot, else the last completed sync; the snapshot advances only open positions, so resolved counts and win rate can include settled markets recorded after the last full sync; native realized P&L follows its accounting snapshot -- not a live feed; re-fetch for fresher data)."
    }
  },
  "$defs": {
    "CategorySkillModelReadiness": {
      "type": "object",
      "required": [
        "status",
        "model_version",
        "taxonomy_version",
        "observation_started_at",
        "as_of",
        "source_last_success_at"
      ],
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "live",
            "insufficient",
            "stale",
            "unknown",
            "degraded"
          ]
        },
        "model_version": {
          "type": "string"
        },
        "taxonomy_version": {
          "type": "string"
        },
        "observation_started_at": {
          "type": "string",
          "format": "date-time"
        },
        "as_of": {
          "type": "string",
          "format": "date-time"
        },
        "source_last_success_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        }
      },
      "description": "Model-wide readiness, read in the same database snapshot as category_records. Individual category rows retain their own status."
    },
    "CategorySkillV2": {
      "type": "object",
      "description": "Forward-only category evidence from observed Polymarket taker fills. Status is category eligibility, not a global letter grade or a guarantee of positive edge. Scores are probability differences. Unknown and degraded rows withhold scores. Coverage is partial; observation counts are not lifetime market counts.",
      "required": [
        "status",
        "model_version",
        "taxonomy_version",
        "platform",
        "scope",
        "source_coverage",
        "canonical_category",
        "as_of",
        "source_last_success_at",
        "observation_started_at",
        "latest_observation_at",
        "independent_event_count",
        "resolved_condition_count",
        "unresolved_observation_count",
        "edge_mean",
        "edge_sd",
        "edge_se",
        "edge_lower_95",
        "brier_event_avg"
      ],
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "live",
            "insufficient",
            "stale",
            "unknown",
            "degraded"
          ]
        },
        "model_version": {
          "type": "string"
        },
        "taxonomy_version": {
          "type": [
            "string",
            "null"
          ]
        },
        "platform": {
          "type": "string",
          "enum": [
            "polymarket"
          ]
        },
        "scope": {
          "type": "string",
          "enum": [
            "observed_goldsky_primary_taker_fill"
          ]
        },
        "source_coverage": {
          "type": "string",
          "enum": [
            "partial_whale_threshold_fills",
            "graded_wallet_fills"
          ]
        },
        "canonical_category": {
          "type": "string"
        },
        "as_of": {
          "type": "string",
          "format": "date-time"
        },
        "source_last_success_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "observation_started_at": {
          "type": "string",
          "format": "date-time"
        },
        "latest_observation_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "independent_event_count": {
          "type": "integer",
          "minimum": 0
        },
        "resolved_condition_count": {
          "type": "integer",
          "minimum": 0
        },
        "unresolved_observation_count": {
          "type": "integer",
          "minimum": 0
        },
        "edge_mean": {
          "type": [
            "number",
            "null"
          ]
        },
        "edge_sd": {
          "type": [
            "number",
            "null"
          ]
        },
        "edge_se": {
          "type": [
            "number",
            "null"
          ]
        },
        "edge_lower_95": {
          "type": [
            "number",
            "null"
          ]
        },
        "brier_event_avg": {
          "type": [
            "number",
            "null"
          ]
        }
      }
    },
    "DataQuality": {
      "type": "object",
      "description": "Compact data age and coverage for a response body, always present on the operations that publish it. Read status and as_of to decide whether to use the body at all, and field_groups to see which part is weak. Everything here comes from stored observation clocks, so a cached body reports the same ages a freshly computed one does: meta.cached and meta.cache_age_s stay the only transport-time facts and neither makes this block newer. The per-field audit object is still available through expand=trust; this is the default summary of the same question.",
      "required": [
        "status",
        "field_groups"
      ],
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "fresh",
            "partial",
            "unknown",
            "untracked",
            "unavailable"
          ],
          "description": "fresh when every group is fresh, unavailable when every group is unavailable, and partial in every other case."
        },
        "as_of": {
          "type": "string",
          "format": "date-time",
          "description": "The oldest as_of among the groups that carry one: the age of the weakest clock this body rests on. Omitted when no group carries a clock."
        },
        "field_groups": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/DataQualityGroup"
          },
          "description": "One entry per field group. Entries may be added in later releases, so match on group rather than on position or length."
        }
      }
    },
    "DataQualityGroup": {
      "type": "object",
      "description": "One group of response fields that share a writer and therefore share a clock.",
      "required": [
        "group",
        "owner",
        "status"
      ],
      "properties": {
        "group": {
          "type": "string",
          "description": "Stable snake_case group name. Names are additive across releases, so match on the ones you know and ignore the rest."
        },
        "owner": {
          "type": "string",
          "description": "The table and column that write this group, named so the verdict can be audited (for example trader_rankings.computed_at)."
        },
        "status": {
          "type": "string",
          "enum": [
            "fresh",
            "partial",
            "unknown",
            "untracked",
            "unavailable"
          ],
          "description": "fresh: served, and as_of carries this group's real observation or computation clock. partial: some of the group's fields are served and some are missing. unknown: served, and this read has no clock for it, so no age may be inferred. untracked: 0xinsider does not track this group for this subject, by design. unavailable: the group could not be served. New values may be added; treat one you do not recognize as unknown. fresh means the group is tracked and clocked, not that it is inside any particular tolerance: compare as_of against your own."
        },
        "as_of": {
          "type": "string",
          "format": "date-time",
          "description": "When this group's values were observed or computed. Omitted whenever the read cannot measure it, and never filled with the serialization time, the cache time, or another group's clock."
        },
        "reason": {
          "type": "string",
          "description": "Why the status is not fresh. Omitted when it is."
        }
      }
    },
    "ExactDecimal": {
      "type": "object",
      "required": [
        "value",
        "unit",
        "scale",
        "basis"
      ],
      "description": "A lossless decimal atom rendered from the canonical NUMERIC or provider value. The value is a decimal string and must be parsed with a decimal library; it is never a display string and must not be converted through a binary float. `scale` is the source decimal scale. The field is omitted when its source is unavailable.",
      "properties": {
        "value": {
          "type": "string",
          "description": "Plain decimal text at full source precision, including a minus sign for negative values and trailing zeros when the source scale carries them. Parse as an arbitrary-precision decimal.",
          "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$"
        },
        "unit": {
          "type": "string",
          "description": "Unit of the value, such as `USD`, `USD/share`, or `shares`."
        },
        "scale": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of digits after the decimal point in `value`'s source atom."
        },
        "basis": {
          "type": "string",
          "description": "Backend-owned source or derivation basis. Treat it as provenance, not as a display label."
        }
      }
    },
    "PnlCorrection": {
      "type": "object",
      "required": [
        "basis",
        "amount",
        "as_of",
        "markets_measured"
      ],
      "description": "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 with a sports or esports event that the wallet converted in is measured and checked for transfers, and stays as last published until then; a market with no sports or esports event is not measured, and counts only when it was measured before (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.",
      "properties": {
        "basis": {
          "type": "string",
          "enum": [
            "neg_risk_conversion_v1"
          ],
          "description": "The correction method."
        },
        "amount": {
          "type": "number",
          "description": "The correction in USD. Negative when Polymarket overstates the wallet."
        },
        "realized": {
          "type": "number",
          "description": "Polymarket's net realized P&L plus amount. Since 2026-10-22 the grade reads this figure's sports and esports share. Omitted when Polymarket's figure is."
        },
        "net_total": {
          "type": "number",
          "description": "Polymarket's net total P&L over every Polymarket market of the wallet, plus amount. Omitted when Polymarket's figure is, and on leaderboard entries."
        },
        "as_of": {
          "type": "string",
          "format": "date-time",
          "description": "The newest measurement among the measured markets."
        },
        "markets_measured": {
          "type": "integer",
          "description": "Neg-risk markets whose measurement amount sums."
        },
        "markets_excluded": {
          "type": "integer",
          "description": "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."
        }
      }
    },
    "Trader": {
      "type": "object",
      "required": [
        "id",
        "address",
        "pnl",
        "stats",
        "data_quality"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Prefixed ID (trd_...)."
        },
        "address": {
          "type": "string"
        },
        "username": {
          "type": "string"
        },
        "grade": {
          "type": "string",
          "enum": [
            "S",
            "A",
            "B",
            "C",
            "D",
            "F"
          ]
        },
        "streak_tier": {
          "type": "string",
          "enum": [
            "hot",
            "rising",
            "neutral",
            "cooling",
            "cold"
          ],
          "description": "Hot-streak tier (trailing-7d cross-sectional percentile); a separate axis from the all-time grade. Omitted when there is no recent activity."
        },
        "score": {
          "type": "number"
        },
        "forecast_score": {
          "type": "number",
          "description": "Optional forecast score on the documented display scale. Null when unavailable."
        },
        "forecast_evidence": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Optional measured forecast context. Missing values remain unavailable rather than being inferred."
        },
        "rank": {
          "type": "integer"
        },
        "pnl": {
          "type": "object",
          "properties": {
            "total": {
              "type": "number",
              "deprecated": true,
              "x-never-sent": true,
              "description": "Deprecated since 2026-10-27 and never sent. It was Polymarket's all-time leaderboard P&L, which covered every Polymarket market of the wallet, and wallet figures cover sports and esports markets only (#29830). Read pnl.in_scope.realized_pnl."
            },
            "net_total": {
              "type": "number",
              "deprecated": true,
              "x-never-sent": true,
              "description": "Deprecated since 2026-10-27 and never sent. It was Polymarket's net total P&L over every Polymarket market of the wallet, and wallet figures cover sports and esports markets only (#29830). Read pnl.in_scope.realized_pnl."
            },
            "correction": {
              "$ref": "#/$defs/PnlCorrection",
              "deprecated": true,
              "x-never-sent": true,
              "description": "Deprecated since 2026-10-27 and never sent. It was the neg-risk conversion correction to the wallet-wide pnl.net_total and pnl.realized (#29830). Its sports and esports part is inside pnl.in_scope.realized_pnl."
            },
            "correction_pending": {
              "type": "boolean",
              "description": "true while 0xinsider is still checking some of the wallet's converted neg-risk markets with a sports or esports event (not yet measured, measured and not yet checked for transfers, or its latest reads keep failing), so the correction's part inside pnl.in_scope.realized_pnl may change, or arrive where none is published yet. Omitted otherwise."
            },
            "realized": {
              "type": "number",
              "deprecated": true,
              "x-never-sent": true,
              "description": "Deprecated since 2026-10-27 and never sent. It was native Polymarket realized P&L over every Polymarket market of the wallet, and wallet figures cover sports and esports markets only (#29830). Read pnl.in_scope.realized_pnl."
            },
            "unrealized": {
              "type": "number",
              "description": "Unrealized P&L in USD of the wallet's open positions on its synced markets, from the open-position aggregate (dated by the positions data_quality group). Since 2026-10-27 (#29366) a wallet that holds a sports or esports market has only sports and esports markets synced, so this covers those positions; before, it covered every Polymarket market. A wallet with no sports or esports market can still carry older markets of other categories until they are deleted."
            },
            "exact": {
              "$ref": "#/$defs/TraderPnlExact",
              "deprecated": true,
              "x-never-sent": true,
              "description": "Deprecated since 2026-10-27 and never sent: its one member was the lossless counterpart of the retired pnl.realized (#29830)."
            },
            "in_scope": {
              "$ref": "#/$defs/TraderPnlInScope",
              "description": "Additive (#27311): the wallet's sports and esports record, the figure the 0xinsider profile headlines, dated by the sports_record data_quality group. Omitted until 0xinsider has computed the wallet's record; absent means not computed yet, never zero. Also omitted for a wallet that traded no sports or esports market, which never gets a record: then stats.markets_traded is 0 and the sports_record group is partial with owner traders.last_synced (since 2026-10-29, #30589, #30657). Also omitted for a wallet that trades only combos and holds no single sports or esports market: the record counts single markets, so it has none, stats.markets_traded and stats.win_rate are omitted, and the sports_record group is partial with owner traders.last_synced (since 2026-10-29, #30637). Since 2026-10-27 it is the wallet's only P&L figure besides pnl.unrealized (#29830)."
            }
          }
        },
        "stats": {
          "type": "object",
          "description": "Sports and esports markets only since 2026-10-27 (#29830): markets_traded and win_rate come from the wallet's sports and esports record (pnl.in_scope), and total_volume from its stored trade days. A wallet that traded no sports or esports market never gets a record: markets_traded is 0 and win_rate is omitted (since 2026-10-29, #30589, #30657). A wallet that trades only combos has no record either: both are omitted (since 2026-10-29, #30637).",
          "properties": {
            "markets_traded": {
              "type": "integer",
              "description": "Sports and esports markets the wallet traded, any status: pnl.in_scope.markets, dated by the sports_record data_quality group. Omitted until the record is computed. 0 for a wallet that traded no sports or esports market, which never gets a record: at its last completed sync Polymarket counted no market for it, or the sync read its Polymarket positions and found no sports or esports market; none is stored, and no Polymarket sports or esports board lists it; the sports_record group then carries the sync clock (since 2026-10-29, #30589; the second case since #30657). Omitted for a wallet that trades only combos and holds no single sports or esports market, which has no record (since 2026-10-29, #30637). Counted every Polymarket market before 2026-10-27."
            },
            "win_rate": {
              "type": "number",
              "description": "Won over decided sports and esports markets, 0 to 1: pnl.in_scope.win_rate truncated to four places, dated by the sports_record data_quality group. Omitted until the record is computed, while the wallet has no decided sports or esports market, for a wallet that traded no sports or esports market (#30589, #30657), and for one that trades only combos (#30637). Counted every Polymarket market before 2026-10-27."
            },
            "daily_win_rate": {
              "type": "number",
              "deprecated": true,
              "x-never-sent": true,
              "description": "Deprecated since 2026-10-27 and never sent. It counted mark-to-market days over every Polymarket market of the wallet (#29830). Read stats.all.win_days and stats.all.loss_days from GET /api/v1/trader/{address}/pnl, which count sports and esports days."
            },
            "total_volume": {
              "type": "number",
              "description": "Sports and esports USD volume, all time: the sum of every stored trade day's in-scope volume (trader_trade_daily_rollups.in_scope_volume_total), the profile's Volume traded. Dated by the volume data_quality group, which carries the trader sync clock. 0 for a synced wallet with no stored trade day. Omitted before the wallet's first completed sync and while any stored day's in-scope volume is not computed yet, so a partial sum is never served. Polymarket's full-history wallet-wide volume before 2026-10-27 (#29830)."
            },
            "exact": {
              "$ref": "#/$defs/TraderStatsExact",
              "description": "Additive lossless counterpart to `total_volume`, present exactly when it is."
            }
          }
        },
        "strategy": {
          "type": "object",
          "required": [
            "strategy_type"
          ],
          "properties": {
            "strategy_type": {
              "type": "string",
              "description": "Observed trading style identifier. New rows use two_sided, category_focused, high_activity, diversified, mixed, or unclassified, counted over the wallet's sports and esports markets only. Historical identifiers remain readable during normal reclassification; style does not predict skill or intent."
            },
            "description": {
              "type": "string"
            },
            "confidence": {
              "type": "number"
            }
          }
        },
        "category_strengths": {
          "type": "object",
          "additionalProperties": true,
          "description": "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. Sports and esports only (#28761): keys are sports and esports categories, and a category outside them is omitted, as on that route. The inner key-set is intentionally unconstrained and may contain additional compatibility fields."
        },
        "quant_metrics": {
          "type": "object",
          "deprecated": true,
          "x-never-sent": true,
          "additionalProperties": false,
          "required": [
            "smart_score",
            "copy_score",
            "sharpe_30d",
            "sharpe_7d",
            "profit_factor",
            "edge_consistency",
            "sharpe_percentile",
            "pf_percentile",
            "consistency_percentile"
          ],
          "description": "Deprecated since 2026-10-27 and never sent. These advanced risk and performance metrics covered every Polymarket market of the wallet, and wallet figures cover sports and esports markets only (#29589). expand=quant_metrics is still accepted and adds nothing. For the sports and esports record read pnl.in_scope here, and GET /api/v1/trader/{address}/pnl for its daily series. The member shape below is what the object held before; it is kept so existing type declarations still compile.",
          "properties": {
            "smart_score": {
              "type": [
                "number",
                "null"
              ],
              "description": "Trader smart score on a 0..100 display scale; higher is stronger. Null when unavailable."
            },
            "copy_score": {
              "type": [
                "number",
                "null"
              ],
              "description": "Copyability score, 0-100. Same base as

# --- truncated at 32 KB (49 KB total) ---
# Full source: https://artifacts.apis.io/0xinsider-com/json-schema/0xinsider-com-trader-context-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/0xinsider-com-trader-context"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.