---
title: "Save my current NBA Fantasy roster"
method: PUT
path: "/v1/fantasy/nba/me/roster"
tags: ["fantasy"]
---

# Save my current NBA Fantasy roster

`PUT /v1/fantasy/nba/me/roster`

## 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/roster`
- Auth: none declared

Saves the squad you own, which of the two games you play it in, the scoring system, the season-long league contract, an optional court override per player and the day you spent the Captain chip. The league contract is versioned with the squad, so editing a slot moves the revision exactly like a transfer does. Names are resolved against the season player index with the same accent-insensitive matcher the website uses, and a name that cannot be placed with certainty is refused with that name in the message rather than guessed at. The response carries a revision that moves only when the stored content changes, so a retry is safe. This changes Predixsport private state only: it never signs in to ESPN, Yahoo, Sleeper or the NBA game and never submits a lineup anywhere. 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

- NBAFantasyRosterWrite
  - `season` string, required
  - `preset` 'espn_points' | 'yahoo_9cat' | 'sleeper_points' | 'nba_salary_cap': The scoring system this squad is played in. Omitted on an update = the saved one is kept (nba_salary_cap for a first save).
  - `mode` 'salary_cap' | 'season_long', nullable: Which game this squad is played in: 'salary_cap' is the official NBA game, 'season_long' an ESPN-like points league. Omitted on an update = the saved one is kept; on a first save the scoring system decides.
  - `roster` NBAFantasyRosterPlayer[]
    - `name` string, required
    - `court` 'BC' | 'FC', nullable: Owner override of the listed position: BC for backcourt, FC for frontcourt. Null means the listed position decides.
  - `league_rules` NBAFantasyLeagueRules: The contract a season-long league is played under. No two season-long leagues are the same: the active slots, what a platform lets a player fill and when the matchup ends all differ, and a lineup computed from a default would be right for one owner and wrong for the next with nothing in the response to say so.
    - `version` integer
    - `preset` 'espn_points' | 'yahoo_9cat' | 'sleeper_points' | 'nba_salary_cap', nullable
    - `slots` NBAFantasySlot[], nullable: Omit for the ESPN default: PG, SG, SF, PF, C, G, F and three UTIL.
      - `slot` string, required
      - `count` integer, required
      - `eligible` string[], nullable: Which positions this slot accepts. Omitted for the slots every platform names the same way (PG, SG, SF, PF, C, G, F, UTIL).
    - `bench` integer
    - `matchup_end` string, date, nullable: Last day of the current matchup, in the owner's own time zone.
    - `timezone` string, nullable
    - `lock` 'per_game': The only lineup lock served today. Weekly-lock leagues, waivers and acquisition limits are out of scope.
    - `eligibility` object
  - `chip_used_on` string, date, nullable: The day the owner spent the Captain chip this Gameweek. Null means it is still available. Omitted on an update = the saved day is kept, so resending the squad never revives a spent chip.

## Response `200`

Successful Response

- NBAFantasySavedRoster
  - `season` string, required
  - `preset` 'espn_points' | 'yahoo_9cat' | 'sleeper_points' | 'nba_salary_cap': The scoring system this squad is played in. Omitted on an update = the saved one is kept (nba_salary_cap for a first save).
  - `mode` 'salary_cap' | 'season_long', nullable: Which game this squad is played in: 'salary_cap' is the official NBA game, 'season_long' an ESPN-like points league. Omitted on an update = the saved one is kept; on a first save the scoring system decides.
  - `roster` NBAFantasyRosterPlayer[]
    - `name` string, required
    - `court` 'BC' | 'FC', nullable: Owner override of the listed position: BC for backcourt, FC for frontcourt. Null means the listed position decides.
  - `league_rules` NBAFantasyLeagueRules: The contract a season-long league is played under. No two season-long leagues are the same: the active slots, what a platform lets a player fill and when the matchup ends all differ, and a lineup computed from a default would be right for one owner and wrong for the next with nothing in the response to say so.
    - `version` integer
    - `preset` 'espn_points' | 'yahoo_9cat' | 'sleeper_points' | 'nba_salary_cap', nullable
    - `slots` NBAFantasySlot[], nullable: Omit for the ESPN default: PG, SG, SF, PF, C, G, F and three UTIL.
      - `slot` string, required
      - `count` integer, required
      - `eligible` string[], nullable: Which positions this slot accepts. Omitted for the slots every platform names the same way (PG, SG, SF, PF, C, G, F, UTIL).
    - `bench` integer
    - `matchup_end` string, date, nullable: Last day of the current matchup, in the owner's own time zone.
    - `timezone` string, nullable
    - `lock` 'per_game': The only lineup lock served today. Weekly-lock leagues, waivers and acquisition limits are out of scope.
    - `eligibility` object
  - `chip_used_on` string, date, nullable: The day the owner spent the Captain chip this Gameweek. Null means it is still available. Omitted on an update = the saved day is kept, so resending the squad never revives a spent chip.
  - `revision` integer, required: Increments only when the saved content changes, so an identical save is idempotent and does not move it.
  - `updated_at` string, date-time, nullable
  - `changed` boolean, nullable: Whether this write changed the stored squad.

## 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)
