---
title: "Get Blackbox Picks"
method: GET
path: "/api/picks/blackbox"
tags: ["picks"]
---

# Get Blackbox Picks

`GET /api/picks/blackbox`

## Request

- Base URL: `https://api.fairline.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.fairline.io/api/picks/blackbox`
- Auth: HTTP bearer

The featured slate plus the summary over the whole tracked window.

The summary spans every pick in the window by design, so this endpoint still
derives the full ledger; it just no longer serves it. The history is paged
separately, and the tiles have to keep describing the whole record however deep
into it the reader has paged, or the headline CLV appears to move when they turn
a page.

## Query parameters

- `date` string, date, nullable
- `days` integer
- `sport` string, nullable

## Response `200`

Successful Response

- BlackboxPicksResponse: The featured slate plus the whole-record summary. Deliberately carries NO ledger: the history is paged by GET /api/picks/blackbox/ledger, so arriving on the page no longer serialises every reasoning paragraph ever written.
  - `featured_date` string, date, nullable
  - `picks` BlackboxPickOut[], required
    - `id` integer, required
    - `sport` string, required
    - `game_date` string, date, required
    - `external_game_id` string, required
    - `home_team` string, nullable
    - `away_team` string, nullable
    - `game_time_utc` string, date-time, nullable
    - `market` string, required
    - `side` string, required
    - `line` number, nullable
    - `bookmaker` string, required
    - `odds_taken_decimal` number, required
    - `model_probability` number, required
    - `market_fair_probability` number, nullable
    - `edge` number, required
    - `confidence_tier` string, required
    - `consensus_votes` string, required
    - `display_units` number, required
    - `reasoning` string, nullable
    - `news_sources` object[], nullable
    - `model_version` string, required
    - `generated_at` string, date-time, required
    - `result` string, nullable
    - `pnl` number, nullable
    - `voided_at` string, date-time, nullable
    - `void_reason` string, nullable
    - `clv_pct` number, nullable
    - `clv_status` string
    - `beat_close` boolean, nullable
    - `closing_decimal` number, nullable
    - `clv_pct_novig` number, nullable
    - `beat_close_novig` boolean, nullable
    - `clv_close_source_novig` string, nullable
    - `closing_fair_decimal_novig` number, nullable
    - `dissent_reasoning` string, nullable
  - `summary` TrackRecordSummary, required
    - `n_picks` integer, required
    - `n_graded` integer, required
    - `n_pending` integer, required
    - `wins` integer, required
    - `losses` integer, required
    - `half_wins` integer
    - `half_losses` integer
    - `pushes` integer, required
    - `voids` integer, required
    - `n_voided` integer
    - `units_staked` number, required
    - `units_pnl` number, required
    - `roi_pct` number, nullable
    - `clv_soft` ClvSummary, required: One anchor's CLV rollup (raw same-book OR no-vig), never blended together.
      - `n_with_clv` integer, required
      - `avg_clv_pct` number, nullable
      - `pct_beat_close` number, nullable
    - `clv_sharp` ClvSummary, required: One anchor's CLV rollup (raw same-book OR no-vig), never blended together.
      - `n_with_clv` integer, required
      - `avg_clv_pct` number, nullable
      - `pct_beat_close` number, nullable
    - `close_economics` CloseEconomics, required: Where the money goes between entry and close, in probability points (x100), averaged over close-covered picks: vig paid at entry, line movement captured, and the net EV edge left at the close. Movement has to beat vig for the record to have a chance; Design B captured +1.6 while paying +2.8.
      - `n` integer, required
      - `avg_vig_pts` number, nullable
      - `avg_move_pts` number, nullable
      - `avg_net_pts_at_close` number, nullable
    - `by_tier` TierSummary[]
      - `tier` string, required
      - `n_picks` integer, required
      - `wins` integer, required
      - `losses` integer, required
      - `half_wins` integer
      - `half_losses` integer
      - `pushes` integer, required
      - `n_voided` integer
      - `units_pnl` number, required
      - `roi_pct` number, nullable
      - `clv_soft` ClvSummary, required: One anchor's CLV rollup (raw same-book OR no-vig), never blended together.
        - `n_with_clv` integer, required
        - `avg_clv_pct` number, nullable
        - `pct_beat_close` number, nullable
      - `clv_sharp` ClvSummary, required: One anchor's CLV rollup (raw same-book OR no-vig), never blended together.
        - `n_with_clv` integer, required
        - `avg_clv_pct` number, nullable
        - `pct_beat_close` number, nullable
    - `n_no_close` integer
    - `n_delisted` integer
    - `n_awaiting_close` integer
    - `sample_size_label` string, required
  - `disclaimers` string[], required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/fairline/apis/fairline-api.md) · [All operations](https://skmtc.dev/fairline/apis/fairline-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fairline/apis/fairline-api/revisions/9f7ed2bfdf75?raw)
