---
title: "Does one add and one drop beat keeping my NBA squad"
method: POST
path: "/v1/fantasy/nba/me/scenario"
tags: ["fantasy"]
---

# Does one add and one drop beat keeping my NBA squad

`POST /v1/fantasy/nba/me/scenario`

## Request

- Base URL: `https://api.predixsport.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.predixsport.com/v1/fantasy/nba/me/scenario`
- Auth: none declared

Compares keeping your saved squad with every single add and drop on the table, between now and your matchup end, and returns the best three moves beside the keep line. The comparison is between RE-OPTIMISED FULL LINEUPS day by day, never between two players' totals: a pickup only counts on a day he can actually reach one of your slots, so calendar congestion is counted by construction. Each move carries the expected points delta to the matchup end and a day-by-day breakdown showing what the incoming player adds inside your slots on each of them. Tonight's values are the model's projection for tonight's games. Every later day is the Predixsport weekly rule, which is built from season performance, recent form and the calendar. A player we hold nothing measured for is a baseline estimate and never a zero. A move whose outgoing player is one of the squad's three best by what he has actually done this season is marked `protected` and carries a `protected_reason`. NEVER present such a move without that sentence: a few days of calendar are not a reason to let a star go. Valid before the first tip-off tonight. Season-long squads only, and not for a nine-category league. Appends an immutable snapshot and changes nothing else: it never signs in to any platform and never makes a transaction for you. Owner comes from the bearer token. Requires mcp:read and fantasy:nba:write. The NBA fantasy workspace is a public beta. When the operator narrows it to a private trial, this endpoint answers 403 for an account outside it.

## Headers

- `authorization` string, nullable

## Request body

- NBAFantasyScenarioRequest
  - `season` string, nullable
  - `candidates` string[], required: The free agents you are weighing, by name. Resolved against the same season player index the roster uses, so an ambiguous surname is refused rather than guessed.
  - `droppable` string[]: Players you would let go. Empty compares against every player you hold.

## Response `200`

Successful Response

- NBAFantasyScenarioResponse
  - `sport` 'nba'
  - `mode` 'scenario'
  - `snapshot_id` integer, required
  - `season` string, required
  - `preset` string, required
  - `policy_version` string, nullable
  - `board_digest` string, required
  - `roster_revision` integer, required
  - `horizon` string[]
  - `horizon_end_reason` 'matchup_end' | 'projection_horizon' | 'no_projections', nullable: Why the comparison stops where it does: your matchup ends, or our projections do. They are different facts.
  - `matchup_end` string, nullable
  - `keep_total` number, required
  - `keep_days` array[]
    - unknown[]
      - unknown
  - `moves` NBAFantasyScenarioMove[]
    - `incoming` string, required
    - `outgoing` string, required
    - `incoming_team` string, nullable
    - `outgoing_team` string, nullable
    - `total` number, required
    - `delta` number, required: Points against keeping the squad, over the horizon.
    - `incoming_games` integer, required
    - `outgoing_games` integer, required
    - `protected` boolean: The outgoing player is one of the squad's three best by what he has actually done this season.
    - `protected_reason` string, nullable: Present whenever protected is true, and never to be dropped: it is what stops a short-horizon number reading as advice to sell a star.
    - `days` NBAFantasyScenarioDay[]
      - `day` string, required
      - `keep_value` number, required
      - `move_value` number, required
      - `incoming_contribution` number, required: What the incoming player adds INSIDE your slots that day. Zero on a day your slots at his positions were already full, which is why this compares lineups and not two players' totals.
      - `incoming_plays` boolean, required
      - `outgoing_plays` boolean, required
  - `protected` string[]
  - `candidates` string[]
  - `baseline` number, nullable
  - `value_sources` object: How many day values came from each source.

## Other responses

- `422`: Validation Error

---

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