---
title: "Reads all Shifts"
method: GET
path: "/api/2026-10-01/resources/shift_management/shifts"
tags: ["ShiftManagement > Shift"]
---

# Reads all Shifts

`GET /api/2026-10-01/resources/shift_management/shifts`

## Request

- Base URL: `https://api.factorialhr.com`
- URL: `https://api.factorialhr.com/api/2026-10-01/resources/shift_management/shifts`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://id.factorialhr.com/oauth/authorize`
    - Token URL: `https://id.factorialhr.com/api/oauth/token` scopes: `shift_management`
  - API key in header `x-api-key`

Reads all Shifts

## Query parameters

- `ids[]` string[]: Filter shifts by their unique identifiers. Returns only shifts matching the provided IDs. If an empty array is provided, returns no results
- `without_ids[]` string[]: Exclude shifts with these identifiers from the results. Useful for filtering out specific shifts while keeping others
- `employee_ids[]` string[]: Filter shifts by employee identifiers. Returns only shifts assigned to the specified employees. If not provided, returns shifts for all accessible employees
- `location_ids[]` string[]: Filter shifts by location identifiers. Returns shifts that occur at the specified locations. Can be combined with employee_ids for more precise filtering
- `start_at` string: Filter shifts that end on or after this date. Only the date (calendar day) is used; the time part is ignored (treated as start of day, 00:00:00). Shifts are included if their end time is at or after the start of the specified day
- `end_at` string: Filter shifts that start before this date. Only the date (calendar day) is used; the time part is ignored (treated as end of day, 23:59:59). Shifts are included if their start time is before the end of the specified day
- `only_published` boolean: When true, returns only shifts with state 'published' (visible to employees). When false, returns shifts in all states (draft, published, backup) based on your permissions
- `only_states[]` string[]: Filter shifts by their state. Provide an array of states ('draft', 'published', 'backup') to include. Can be combined with other filters for precise control
- `split_overnight_shifts` boolean: When true, shifts that span across midnight (overnight shifts) are split into two separate shift objects - one for each calendar day. This makes it easier to display shifts in day-based views

## Response `200`

OK

- object
  - `data` ShiftManagementShift[]
    - `id` string, required: Unique identifier for the shift
    - `company_id` string, required: Identifier of the company that owns this shift
    - `name` string: Display name of the shift. If not explicitly set, falls back to the default shift title or template week name
    - `state` 'draft' | 'published' | 'backup', required: Current state of the shift. 'draft' means the shift is not yet visible to employees, 'published' means it's visible and confirmed, 'backup' indicates a backup shift that can be replaced
    - `location_id` string: Identifier of the location where the shift takes place. Can be null if the shift uses the employee's default location
    - `locations_work_area_id` string: Identifier of the specific work area within the location where the shift occurs. Work areas allow further subdivision of locations
    - `employee_id` string, required: Identifier of the employee assigned to this shift
    - `start_at` string, required: Timestamp indicating when the shift starts
    - `end_at` string, required: Timestamp indicating when the shift ends
    - `notes` string: Optional notes or comments about the shift, visible to managers and schedulers
    - `extra_hours` boolean, required: Indicates whether this shift counts as extra hours beyond the employee's regular schedule. Used for overtime calculations
    - `default_shift_title` string: Title from the default shift template that was used to create this shift, if applicable
    - `timezone` string, required: IANA timezone identifier (e.g., 'Europe/Madrid', 'America/New_York') used to display the shift times in the local timezone
    - `local_start_at` string, required: Start time of the shift converted to the local timezone. This is what employees see in their schedule
    - `local_end_at` string, required: End time of the shift converted to the local timezone. This is what employees see in their schedule
  - `meta` PagedIndexMeta
    - `start_cursor` string
    - `end_cursor` string
    - `has_previous_page` boolean, required
    - `has_next_page` boolean, required
    - `limit` integer, required
    - `total` integer, required

## Changes

- **2026-11-03** `83ac9aa1de50`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/factorialhr/apis/factorial-api/changes/api/2026-10-01/resources/shift_management/shifts/get.md)

---

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