---
title: "Lists the jobs scheduled to start within a date range as calendar events."
method: GET
path: "/api/v1/schedule"
tags: ["Schedule"]
---

# Lists the jobs scheduled to start within a date range as calendar events.

`GET /api/v1/schedule`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/schedule`
- Auth: HTTP bearer

Times are the organization's local wall clock with no zone suffix
(`2026-09-08T00:00:00`); a trailing `Z` is converted to local time first.
The window may span at most 92 days. Events are not paginated — a quarter of jobs
is returned in one array. Response carries a weak `ETag`; resend it as
`If-None-Match` to get 304 when nothing changed.
Also available as CSV (`Accept: text/csv` or `?format=csv`).

## Query parameters

- `from` string, date-time
- `to` string, date-time
- `format` 'csv'

## Response `200`

Calendar events ordered as the service returns them (by job).

- ScheduleEventDto[]
  - `id` integer: Job id — fetch details with `GET /api/v1/jobs/{id}`.
  - `title` string: Event title: job number and customer, plus the description on a second line when present. Example: `J-2026-0042 - Acme Property`.
  - `start` string: Start as the organization's local wall-clock time, `yyyy-MM-ddTHH:mm:ss` with no zone suffix. Example: `2026-09-08T08:30:00`.
  - `end` string: End (start + duration), same format as `start`.
  - `url` string, nullable: Relative API path of the job. Example: `/api/v1/jobs/1042`.
  - `backgroundColor` string: Hex colour for the event body, derived from the job status. Example: `#28a745`.
  - `borderColor` string: Hex colour for the event border (currently equal to `backgroundColor`).
  - `displayTime` string: Start time formatted for display. Example: `8:30 AM`.
  - `extendedProps` ScheduleEventDetailsDto: Job facts attached to a `ScheduleEventDto`.
    - `jobNumber` string: Human-readable job number. Example: `J-2026-0042`.
    - `customerName` string: Customer display name.
    - `jobType` string, nullable: Job category. Example: `Installation`.
    - `status` string: Workflow status name (see `JobSummaryDto.Status` for the list).
    - `totalPrice` number, double: Customer price before tax (decimal currency).
    - `description` string: Job description, empty string when none.
    - `scheduledTime` string: Start time formatted for display. Example: `8:30 AM`.
    - `durationMinutes` integer: Planned duration in minutes. Example: `120`.
    - `durationText` string: Duration formatted for display. Example: `2h`.
    - `assignees` ScheduleEventAssigneeDto[]: Assigned staff, ordered by crew then name.
      - `userId` string: Identity user id (matches `/api/v1/users`).
      - `name` string: Display name. Example: `Maria Lopez`.
      - `groupId` integer, nullable: Crew the assignment falls under (explicit, or the user's primary group), or null.
      - `groupName` string, nullable: Crew display name, or null.
      - `groupColor` string, nullable: Crew hex colour, or null.
      - `groupOrder` integer: Crew sort order (lower first; `2147483647` when the user has no crew).
    - `assigneeNames` string: Comma-separated assignee names for one-line display. Empty when unassigned.
    - `groupIds` integer[]: Distinct schedule group (crew) ids of the assignees.
    - `groupColor` string, nullable: Hex colour of the first assignee's crew, used as the event accent; null when no crew colour applies.

## Other responses

- `304`: Unchanged since the `If-None-Match` ETag.
- `400`: Missing parameter, `to` before `from`, or a window longer than 92 days (field listed in `errors`).
- `401`: Unauthorized
- `403`: Key lacks `ViewJobs` or the Scheduling module is not active.
- `429`: Too Many Requests

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
