---
title: "Project the optimizer's effective fleet"
method: POST
path: "/v1/optimization/fleet-projection"
tags: ["Optimization Fleet Projection"]
---

# Project the optimizer's effective fleet

`POST /v1/optimization/fleet-projection`

## Request

- Base URL: `https://api.sandbox.usenash.com`
- URL: `https://api.sandbox.usenash.com/v1/optimization/fleet-projection`
- Auth: none declared

Project fleet membership, counts, dispatch settings, configured capabilities and depot IDs for a single-store LOS VRP solve without shifts. TSP, on-demand, locked-route and engine solves are refused when a digest is supplied. The versioned digest binds these fields at approval and checks them after scenario overrides when expectedFleetDigest is supplied on the optimize action. Order-derived eligibility capability tokens are checked separately and excluded from the digest. Profile, capacity, route limits, speed, costs, parking, breaks, timing, depot attributes and renewal parameters are not covered. Requested contract IDs are informational; resolved version IDs are bound. Recompute the digest by removing digest and each contract's requested_contract_ids, then SHA-256 hashing UTF-8 JSON with recursively sorted keys, compact separators and unescaped Unicode. Accepts 1–100 contract IDs, each 1–255 characters. Read-only. Returns 400 for shift-selection knobs, 404 for an unreadable store or contract, and 409 for incomplete conversion or fleet drift.

## Request body

- FleetProjectionRequest: Body for ``POST /v1/optimization/fleet-projection``. ``store_location_id`` and ``contract_ids`` are the plain single-store solve. The three fleet-selection knobs are accepted only so a caller can hand over exactly what it intends to send to the solver: any of them present moves the solver onto a Shift-built fleet, which this projection does not cover, so the request is refused rather than projected wrongly.
  - `store_location_id` string, required
  - `contract_ids` string[], required
  - `shift_ids` string[], nullable
  - `pick_shift_name` string, nullable
  - `shift_contract_id` string, nullable

## Response `200`

OK

- FleetProjection: Digest covers this body except ``digest`` and each contract's ``requested_contract_ids``.
  - `projection_version` integer
  - `organization_id` string, required
  - `store_location_id` string, required
  - `contracts` ProjectedContractFleet[], required
    - `requested_contract_ids` string[], required
    - `contract_id` string, required
    - `first_version_contract_id` string, required
    - `uses_physical_vehicles` boolean, required
    - `vehicles` ProjectedVehicle[], required
      - `id` string, required
      - `contract_id` string, required
      - `source` 'contract' | 'vehicle', required
      - `vehicle_count` integer, required
      - `use_all_vehicles` boolean, required
      - `multi_dispatch` boolean, required
      - `max_num_dispatches` integer, nullable, required
      - `capabilities` string[], required
      - `start_depot_store_location_ids` string[], required
      - `end_depot_store_location_ids` string[], required
  - `digest` string, required

## Other responses

- `422`: Unprocessable Content

---

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