---
title: "Optimize my ATP Fantasy roster for the open tournament week"
method: POST
path: "/v1/fantasy/tennis/me/optimize"
tags: ["fantasy"]
---

# Optimize my ATP Fantasy roster for the open tournament week

`POST /v1/fantasy/tennis/me/optimize`

## 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/tennis/me/optimize`
- Auth: none declared

## Headers

- `authorization` string, nullable

## Request body

- TennisFantasyRosterWrite
  - `season` string, required
  - `roster` TennisFantasyRosterPlayer[], required
    - `name` string, required
    - `credits` integer, required
    - `locked` boolean
  - `budget_remaining` integer
  - `free_switches` integer
  - `max_extra_switches` integer
  - `chip_mode` 'none' | 'triple_bounce' | 'alternates' | 'swing_switch'
  - `bank_switches` boolean

## Response `200`

Successful Response

- TennisFantasyRecommendation
  - `snapshot_id` integer, required
  - `season` string, required
  - `week_key` string, required
  - `optimizer_version` string, required
  - `switches` integer, required
  - `players_out` string[], required
  - `players_in` string[], required
  - `active` string[], required
  - `alternates` string[], required
  - `captain` string, required
  - `expected_points` number, required
  - `net_expected_points` number, required
  - `expected_gain` number, required
  - `decision_gain` number, required
  - `credits_remaining_estimate` integer, required
  - `estimated_roster` TennisFantasyRosterPlayer[], required
    - `name` string, required
    - `credits` integer, required
    - `locked` boolean
  - `lineup` TennisFantasyRecommendationPlayer[]
    - `name` string, required
    - `tournament` string, required
    - `credits_estimate` integer, required
    - `credits_as_of` string, nullable
    - `expected_points` number, required
    - `entered_this_week` boolean
    - `title_probability` number, nullable
    - `expected_wins` number, nullable
    - `expected_matches` number, nullable
    - `aces_per_match` number, nullable
    - `double_faults_per_match` number, nullable
    - `serve_profile_fallback` string, nullable
    - `advancement_points` number, required
    - `aces_points` number, nullable
    - `double_fault_points` number, nullable
    - `straight_sets_points` number, nullable
    - `straight_model_available` boolean, nullable
    - `upset_points` number, nullable
    - `role` 'captain' | 'active' | 'alternate', required
    - `projected_lineup_points` number, required
  - `switch_options` TennisFantasySwitchOption[]
    - `switches` integer, required
    - `players_in` string[], required
    - `players_out` string[], required
    - `active` string[], required
    - `alternates` string[], required
    - `captain` string, required
    - `net_expected_points` number, required
    - `points_gain` number, required
    - `penalty` number, required
    - `credits_remaining` integer, required
    - `free_switches_left` integer, required
    - `recommended` boolean, required
    - `switch_reserve_cost` number, required
  - `incoming_prices_are_estimates` boolean
  - `price_checks` TennisFantasyPriceChecks: What to verify in the game before applying (added Oct 2026). ``budget_tight`` = the plan leaves fewer than ``safety_margin_credits`` unspent on estimated prices; ``safe_alternative`` is then the best plan that keeps the margin (absent when it is the same transfer).
    - `price_mismatches` TennisFantasyPriceMismatch[]
      - `name` string, required
      - `entered_credits` integer, required
      - `estimated_credits` integer, required
      - `estimated_as_of` string, nullable
    - `incoming_prices_as_of` string, nullable
    - `credits_remaining_at_estimates` integer, nullable
    - `safety_margin_credits` integer, required
    - `budget_tight` boolean, required
    - `safe_alternative` TennisFantasySafeAlternative
      - `switches` integer, required
      - `players_in` string[], required
      - `players_out` string[], required
      - `active` string[], required
      - `alternates` string[], required
      - `captain` string, required
      - `net_expected_points` number, required
      - `points_cost` number, required
      - `credits_remaining` integer, required
  - `created_at` string, date-time, required

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