{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/arena-predictions-com/json-schema/arena-predictions-com-owner-scoreboard-response-schema.json",
  "title": "OwnerScoreboardResponse",
  "description": "The key owner's own settled paper trades in the window, graded the way Arena grades its AI models: against the market, not by win rate. Aggregates only. A count is 0 and a number is null when there is nothing to measure.",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/arena-predictions-com-openapi.json#/components/schemas/OwnerScoreboardResponse",
  "type": "object",
  "required": [
    "days",
    "settled",
    "meanReturn",
    "returnCiLow",
    "returnCiHigh",
    "clvN",
    "clvMeanCents",
    "beatCloseN",
    "beatCloseShare",
    "brierN",
    "brierModel",
    "brierMarket",
    "brierSkill",
    "since",
    "lastTradeAt",
    "mode"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 3650,
      "description": "The window asked for."
    },
    "settled": {
      "type": "integer",
      "minimum": 0,
      "description": "Trades in the window that settled won or lost."
    },
    "meanReturn": {
      "type": [
        "number",
        "null"
      ],
      "description": "Mean of P&L over stake per trade, a fraction (-0.012 is -1.2%), each trade counted once whatever its size. Null with no settled trade."
    },
    "returnCiLow": {
      "type": [
        "number",
        "null"
      ],
      "description": "Low end of meanReturn's 95% interval (mean minus 1.96 standard errors). Null under 2 settled trades."
    },
    "returnCiHigh": {
      "type": [
        "number",
        "null"
      ],
      "description": "High end of meanReturn's 95% interval. Null under 2 settled trades."
    },
    "clvN": {
      "type": "integer",
      "minimum": 0,
      "description": "Trades with a usable closing price: entered before the game started, with a closing line captured before the game was decided."
    },
    "clvMeanCents": {
      "type": [
        "number",
        "null"
      ],
      "description": "Mean closing-line value in cents on the side bought: the closing price of that side minus the price paid. Above 0 means the price moved toward the side. Null when clvN is 0."
    },
    "beatCloseN": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0,
      "description": "How many of the clvN trades had a closing price better than the price paid (strictly). Null only if the database did not say."
    },
    "beatCloseShare": {
      "type": [
        "number",
        "null"
      ],
      "minimum": 0,
      "maximum": 1,
      "description": "beatCloseN over clvN, 0 to 1 (4 decimals). Null when clvN is 0."
    },
    "brierN": {
      "type": "integer",
      "minimum": 0,
      "description": "Trades with a stated probability, the ones Brier scores."
    },
    "brierModel": {
      "type": [
        "number",
        "null"
      ],
      "description": "Mean Brier score of the stated probabilities on those trades. Lower is better."
    },
    "brierMarket": {
      "type": [
        "number",
        "null"
      ],
      "description": "Mean Brier score of the market's own price at entry on the same trades: the side's midpoint when the bid and ask at entry are known, else the price paid."
    },
    "brierSkill": {
      "type": [
        "number",
        "null"
      ],
      "description": "1 minus brierModel / brierMarket. Above 0: the stated probabilities had less error than the market's price; below 0: more. Null when brierN is 0."
    },
    "since": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "The earliest entry among the counted trades. Null with none."
    },
    "lastTradeAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "The account's newest standalone trade of any status, open included, and not limited to the window: it says when the account last traded, not which trade was counted last. Null when the account has never traded."
    },
    "mode": {
      "type": "string",
      "const": "paper"
    }
  }
}