---
title: "Calculate a driver schedule"
method: POST
path: "/v1/activities/calculate-schedule"
tags: ["Driver Scheduling"]
---

# Calculate a driver schedule

`POST /v1/activities/calculate-schedule`

## Request

- Base URL: `https://api.sandbox.usenash.com`
- URL: `https://api.sandbox.usenash.com/v1/activities/calculate-schedule`
- Auth: none declared

Queues a driver-scheduling run (DSP) and returns its activity id. DSP assigns the org's drivers (from their shifts) to fixed multi-stop loads (orders grouped by delivery day and optimization_parameters.sequence_group) over `days` delivery days from `plan_from`, under US DOT hours of service, at the lowest cost, sending what own drivers can't cover to the request's fallbacks. The first `commit_days` days are saved as routes with planned drivers, replacing that day's earlier DSP routes; `commit_days=0` is a dry run that saves nothing. `driver_clocks` injects drivers' hours-of-service state; clocks from earlier committed runs persist. Result load IDs are `<delivery-date>:<sequence-group>`, using the planning time zone. Poll GET /v1/activities/{id} until status is SUCCESS or FAILED; the schedule is in `result`.

## Request body

- CalculateScheduleRequest
  - `plan_from` string, date, required
  - `days` integer
  - `commit_days` integer
  - `now` string, date-time, nullable
  - `tags` string[]
  - `params` DspParams
    - `timezone` string
    - `speed_table` SpeedBand[]
      - `min_miles` number
      - `mph` number, required
    - `departure_grid_minutes` integer
    - `earliest_departure` DayTime: A local time relative to a load's delivery day, e.g. noon the day before.
      - `day_offset` integer, required
      - `time` string, time, required
    - `latest_departure` DayTime: A local time relative to a load's delivery day, e.g. noon the day before.
      - `day_offset` integer, required
      - `time` string, time, required
    - `service_minutes` number: Default unload duration; explicitly setting this on a dry run overrides per-order service times
    - `pretrip_minutes` number
    - `posttrip_minutes` number
    - `turn_minutes` number
    - `stop_pay_per_hour` number
    - `fairness_weight` number
    - `fairness_week_start` 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday'
    - `span_cost_per_hour` number
    - `max_pairs_per_load` integer
    - `unload_counts_as_break` boolean
    - `mip_gap` number
    - `time_limit_seconds` number
  - `fallbacks` Fallback[]
    - `name` string, required
    - `unit` 'duty' | 'load', required
    - `cost_per_use` number
    - `cost_per_calendar_day` number
    - `daily_cap` integer, nullable
  - `driver_clocks` DriverClocks[]
    - `driver_id` string, required
    - `as_of` string, date-time, required
    - `status` 'off_duty' | 'sleeper' | 'on_duty' | 'driving', required
    - `drive_remaining_minutes` number, required
    - `shift_remaining_minutes` number, required
    - `break_remaining_minutes` number
    - `cycle_remaining_minutes` number, required
    - `cycle_by_day` number[], nullable
    - `off_duty_since` string, date-time, nullable
    - `available_from` string, date-time, nullable

## Response `200`

OK

- CalculateScheduleResponse
  - `activity_id` 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)
