{
  "game": {
    "id": 823328,
    "matchup": "St. Louis Cardinals @ Pittsburgh Pirates",
    "venue": "PNC Park",
    "first_pitch_utc": "2026-09-22T22:41:00Z",
    "lineup_status": "Awaiting published batting orders"
  },
  "snapshot": {
    "board_checked_at": "2026-09-21T23:27:24.883957Z",
    "quoted_at": "2026-09-21T23:26:44Z",
    "model_version": "mlb-v1.0-ffe831160a077d5d-2026-09-20",
    "model_inputs_through": "2026-09-20",
    "history_through": "2026-09-20"
  },
  "pick": {
    "selection": "Pittsburgh Pirates -1.5",
    "book": "Bovada",
    "price": 155,
    "model_probability": 0.4675,
    "break_even": 0.3922,
    "model_edge_pp": 7.54,
    "model_ev_pct": 19.22,
    "model_fair_price": 114,
    "projected_run_margin": 0.865,
    "market_no_margin": 0.3805,
    "paired_books": 6,
    "best_price": true,
    "displayed_inputs": {
      "home recent runs/game": 4.15,
      "away recent runs/game": 4.92,
      "home starter recent RA/9": 3.95,
      "away starter recent RA/9": 3.86
    }
  },
  "recalibration": {
    "interpolated": 0.4398,
    "edge_pp": 4.77,
    "ev_pct": 12.15,
    "lower_bin": {
      "predicted": 0.4412,
      "observed": 0.3913,
      "n": 161
    },
    "upper_bin": {
      "predicted": 0.559,
      "observed": 0.6085,
      "n": 189
    },
    "spreads_brier_skill": 0.0018,
    "spreads_ece": 0.048571,
    "spreads_samples": 810,
    "spreads_passed": true,
    "test_window": [
      "2026-08-22",
      "2026-09-20"
    ]
  },
  "scenarios": [
    {
      "scenario": "Published model",
      "probability": 0.4675,
      "edge_pp": 7.54,
      "ev_pct": 19.22,
      "profit_per_100": 19.22
    },
    {
      "scenario": "Interpolated between audit bins",
      "probability": 0.4398,
      "edge_pp": 4.77,
      "ev_pct": 12.15,
      "profit_per_100": 12.15
    },
    {
      "scenario": "Nearest lower audit bin (44.1% predicted)",
      "probability": 0.3913,
      "edge_pp": -0.09,
      "ev_pct": -0.22,
      "profit_per_100": -0.22
    },
    {
      "scenario": "Nearest upper audit bin (55.9% predicted)",
      "probability": 0.6085,
      "edge_pp": 21.63,
      "ev_pct": 55.17,
      "profit_per_100": 55.17
    }
  ],
  "books": [
    {
      "book": "Bovada",
      "pirates_line": -1.5,
      "pirates_price": 155,
      "cardinals_price": -180,
      "pirates_no_margin": 0.3789,
      "hold": 0.035
    },
    {
      "book": "DraftKings",
      "pirates_line": -1.5,
      "pirates_price": 153,
      "cardinals_price": -186,
      "pirates_no_margin": 0.378,
      "hold": 0.0456
    },
    {
      "book": "Caesars",
      "pirates_line": -1.5,
      "pirates_price": 153,
      "cardinals_price": -182,
      "pirates_no_margin": 0.3798,
      "hold": 0.0406
    },
    {
      "book": "FanDuel",
      "pirates_line": -1.5,
      "pirates_price": 150,
      "cardinals_price": -182,
      "pirates_no_margin": 0.3826,
      "hold": 0.0454
    },
    {
      "book": "Fanatics",
      "pirates_line": -1.5,
      "pirates_price": 150,
      "cardinals_price": -185,
      "pirates_no_margin": 0.3813,
      "hold": 0.0491
    },
    {
      "book": "BetMGM",
      "pirates_line": -1.5,
      "pirates_price": 145,
      "cardinals_price": -175,
      "pirates_no_margin": 0.3908,
      "hold": 0.0445
    },
    {
      "book": "BetRivers",
      "pirates_line": -1.0,
      "pirates_price": -104,
      "cardinals_price": -118,
      "pirates_no_margin": 0.485,
      "hold": 0.0511
    }
  ],
  "price_sensitivity": [
    {
      "book": "Bovada",
      "price": 155,
      "ev_pct": 12.15
    },
    {
      "book": "DraftKings",
      "price": 153,
      "ev_pct": 11.27
    },
    {
      "book": "Caesars",
      "price": 153,
      "ev_pct": 11.27
    },
    {
      "book": "FanDuel",
      "price": 150,
      "ev_pct": 9.96
    },
    {
      "book": "Fanatics",
      "price": 150,
      "ev_pct": 9.96
    },
    {
      "book": "BetMGM",
      "price": 145,
      "ev_pct": 7.76
    }
  ],
  "bullpens": {
    "pittsburgh": {
      "season": {
        "games": 156,
        "relief_outs": 1887.0,
        "relief_er": 285.0,
        "ra9": 4.08,
        "relief_ip_per_game": 4.03,
        "starter_ip_per_game": 4.89
      },
      "last30": {
        "games": 30,
        "relief_outs": 409.0,
        "relief_er": 53.0,
        "ra9": 3.5,
        "relief_ip_per_game": 4.54,
        "starter_ip_per_game": 4.41
      }
    },
    "st_louis": {
      "season": {
        "games": 156,
        "relief_outs": 1779.0,
        "relief_er": 298.0,
        "ra9": 4.52,
        "relief_ip_per_game": 3.8,
        "starter_ip_per_game": 5.13
      },
      "last30": {
        "games": 30,
        "relief_outs": 384.0,
        "relief_er": 80.0,
        "ra9": 5.62,
        "relief_ip_per_game": 4.27,
        "starter_ip_per_game": 4.71
      }
    }
  },
  "starters": {
    "jones": {
      "season_ip": 90.7,
      "starts": 19,
      "last_three": [
        18,
        21,
        15
      ],
      "last_three_pitches": [
        91,
        90,
        91
      ],
      "starts_over_14_5": 9
    },
    "pallante": {
      "season_ip": 151.0,
      "appearances": 27,
      "ra9": 3.7,
      "last_five": [
        18,
        18,
        15,
        15,
        15
      ]
    }
  },
  "limitations": [
    "Prices are a saved snapshot; sportsbook availability at first pitch is not guaranteed.",
    "Bullpen splits are computed by removing each listed starter, so an opener or a bullpen game shifts innings between the two columns.",
    "The last-30 bullpen window is a small sample and overlaps the model validation window.",
    "The spreads model shows a Brier skill of 0.0018 against its reference distribution.",
    "Recalibration interpolates between two held-out bins whose errors have opposite signs."
  ]
}
