---
title: "DFS lineup optimizer (Growth+)"
method: POST
path: "/v1/lineup/optimize"
tags: ["Multi"]
---

# DFS lineup optimizer (Growth+)

`POST /v1/lineup/optimize`

## Request

- Base URL: `https://api.playcallerapp.com`
- URL: `https://api.playcallerapp.com/v1/lineup/optimize`
- Auth: API key in header `X-PlayCaller-Key`

Generates an optimized DFS lineup for a slate using a greedy knapsack algorithm, boosted by alpha metrics (opportunity_ceiling) as a value-score adjustment.

**Tier access:** Growth, Pro Insights, Syndicate Alpha

## Request body

- object
  - `slate_id` integer, required: The DFS slate's DB id (from /v1/{sport}/dfs/slates)
  - `site` string, required: DFS site the lineup is being built for
  - `locked_players` string[]: Player IDs to force into the lineup
  - `excluded_players` string[]: Player IDs to exclude
  - `captain_player` string, nullable: Player ID to force into the captain/MVP slot, if the site format has one

## Response `200`

Optimized lineup

- object
  - `success` boolean
  - `endpoint` string
  - `slate` object
    - `id` integer
    - `sport` string
    - `platform` string
    - `game_date` string, date
  - `lineup` object[]
    - `player_id` string
    - `name` string
    - `position` string
    - `team` string
    - `slot` string
    - `salary` integer
    - `projected_points` number
    - `alpha_score` integer, nullable
  - `total_salary` integer
  - `salary_remaining` integer
  - `projected_points` number
  - `optimization_method` string
  - `confidence` string, nullable

## Other responses

- `400`: Missing slate_id or site
- `401`: Missing or invalid API key
- `402`: Growth tier or higher required
- `404`: Slate not found or has no salary data
- `429`: Rate limit or monthly quota exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/playcallerapp/apis/playcaller-data-api.md) · [All operations](https://skmtc.dev/playcallerapp/apis/playcaller-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/playcallerapp/apis/playcaller-data-api/revisions/100c0a3ffbfe?raw)
