---
title: "Create Time Tracking Shift Differential"
method: POST
path: "/api/v1/time-tracking/shift-differentials"
tags: ["Time Tracking", "Public API"]
---

# Create Time Tracking Shift Differential

`POST /api/v1/time-tracking/shift-differentials`

Creates a new time tracking shift differential.

OAuth Scopes: time_tracking:shift_differentials.write

## Request body

- ShiftDifferentialCreateTimeTrackingShiftDifferentialV1 — Request body for creating a time tracking shift differential.
  - `name` string, required
  - `rate` string, required — Non-negative decimal string with at most two decimal places.
  - `rateType` 'AMOUNT' | 'PERCENT', required
  - `allowAllEmployees` boolean — If true, every time-tracked employee is assigned. Ignored when `employeeIds` is provided.
  - `employeeIds` integer[] — Specific internal employee IDs to assign. Minimum 1 entry required when provided. Takes precedence over `allowAllEmployees`.
  - `times` object[], required — Time windows when this differential applies. Minimum 1 entry required.
    - `startDay` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required
    - `endDay` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required
    - `start` string, required
    - `end` string, required

## Response `201`

Shift differential created successfully.

- ShiftDifferentialTimeTrackingShiftDifferentialV1 — A shift differential rule with time windows and employee assignments.
  - `id` integer — The ID of the shift differential.
  - `name` string — The name of the shift differential rule.
  - `rate` string — The differential pay rate as a decimal string.
  - `rateType` 'AMOUNT' | 'PERCENT' — How the rate is applied.
  - `allowAllEmployees` boolean — Whether all time & attendance employees are assigned.
  - `times` ShiftDifferentialTimeTrackingShiftDifferentialTimeV1[] — Time windows when this differential applies.
    - `id` integer — The ID of the time window.
    - `startDay` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY' — Start day of the time window.
    - `endDay` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY' — End day of the time window.
    - `start` string — Start time in HH:MM format (24-hour).
    - `end` string — End time in HH:MM format (24-hour).
  - `employeeIds` integer[] — Employee IDs assigned to this shift differential.
  - `createdAt` string, date-time, nullable — ISO 8601 timestamp when the shift differential was created.
  - `updatedAt` string, date-time, nullable — ISO 8601 timestamp when the shift differential was last updated.
  - `archivedAt` string, date-time, nullable — ISO 8601 timestamp when the shift differential was archived.
  - `deletedAt` string, date-time, nullable — ISO 8601 timestamp when the shift differential was deleted.

## Other responses

- `400` — Malformed request body.
- `401` — Unauthorized. Missing or invalid authentication.
- `403` — Forbidden. Insufficient permissions.
- `409` — Conflict. A shift differential with the provided name already exists.
- `422` — Validation error (e.g., missing `name`, invalid `rate`, empty `times` array).

---

[API](https://skmtc.net/bamboohr/apis/bamboohr-api.md) · [All operations](https://skmtc.net/bamboohr/apis/bamboohr-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bamboohr/bamboohr-api/revisions/19ebf391a399/schema)
