Scheduling API
Endpoints for managing schedules, shifts, and templates.
Shift Templates
List Templates
GET
/api/scheduling/templatesAuth: SessionGet all shift templates.
Response (200):
json
{ "templates": [ { "id": "uuid", "name": "Morning Shift", "startTime": "08:00", "endTime": "16:00", "durationMinutes": 480, "breakRules": [ { "startOffset": 240, "duration": 60, "type": "lunch" } ], "daysOfWeek": [1, 2, 3, 4, 5], "color": "#3b82f6" } ]}Create Template
POST
/api/scheduling/templatesAuth: SessionCreate a new shift template.
Request Body:
json
{ "name": "Morning Shift", "startTime": "08:00", "endTime": "16:00", "breakRules": [ { "startOffset": 120, "duration": 15, "type": "break" }, { "startOffset": 240, "duration": 60, "type": "lunch" } ], "daysOfWeek": [1, 2, 3, 4, 5], "color": "#3b82f6"}| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Required | Template name (1-100 chars) |
startTime | string | Required | Start time (HH:MM) |
endTime | string | Required | End time (HH:MM) |
breakRules | array | Optional | Break definitions |
daysOfWeek | array | Optional | Days (0=Sun, 6=Sat) |
color | string | Optional | Hex color code |
Update Template
PUT
/api/scheduling/templates/:idAuth: SessionUpdate an existing template.
Delete Template
DELETE
/api/scheduling/templates/:idAuth: SessionDelete a template.
Schedules
List Schedules
GET
/api/scheduling/schedulesAuth: SessionGet schedules with optional filters.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Optional | Filter: "draft", "published", "locked" |
startDate | string | Optional | Filter by start date |
endDate | string | Optional | Filter by end date |
Response (200):
json
{ "schedules": [ { "id": "uuid", "name": "Week of Feb 1", "startDate": "2026-02-01", "endDate": "2026-02-07", "status": "draft", "shiftCount": 45, "employeeCount": 12 } ]}Create Schedule
POST
/api/scheduling/schedulesAuth: SessionCreate a new schedule.
Request Body:
json
{ "name": "Week of Feb 1", "startDate": "2026-02-01", "endDate": "2026-02-07"}Get Schedule Details
GET
/api/scheduling/schedules/:idAuth: SessionGet schedule with all shifts.
Response (200):
json
{ "schedule": { "id": "uuid", "name": "Week of Feb 1", "status": "draft", "startDate": "2026-02-01", "endDate": "2026-02-07" }, "shifts": [ { "shift": { "id": "uuid", "date": "2026-02-01", "startTime": "08:00", "endTime": "16:00" }, "employee": { "id": "uuid", "firstName": "John", "lastName": "Doe" }, "template": { "name": "Morning Shift", "color": "#3b82f6" } } ]}Update Schedule
PATCH
/api/scheduling/schedules/:idAuth: SessionUpdate schedule (e.g., publish).
Request Body:
json
{ "status": "published"}Delete Schedule
DELETE
/api/scheduling/schedules/:idAuth: SessionDelete a schedule.
Shifts
List Shifts
GET
/api/scheduling/shiftsAuth: SessionGet shifts with filters.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
scheduleId | string | Optional | Filter by schedule |
employeeId | string | Optional | Filter by employee |
date | string | Optional | Filter by date |
Create Shifts
POST
/api/scheduling/shiftsAuth: SessionCreate one or more shifts.
Request Body (Single Shift):
json
{ "scheduleId": "uuid", "employeeId": "uuid", "templateId": "uuid", "date": "2026-02-01", "startTime": "08:00", "endTime": "16:00"}Request Body (Bulk):
json
{ "shifts": [ { "scheduleId": "uuid", "employeeId": "uuid", "date": "2026-02-01", "startTime": "08:00", "endTime": "16:00" } ]}Update Shift
PUT
/api/scheduling/shifts/:idAuth: SessionUpdate a shift.
Delete Shift
DELETE
/api/scheduling/shifts/:idAuth: SessionDelete a shift.
Auto-Generate Schedule
POST
/api/scheduling/generateAuth: SessionAuto-generate an optimal schedule.
Request Body:
json
{ "name": "Auto-Generated Week", "startDate": "2026-02-01", "endDate": "2026-02-07", "employeeIds": ["uuid1", "uuid2"], "templateIds": ["uuid1"], "options": { "coverageTarget": 10, "respectAvailability": true, "balanceHours": true }}| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Required | Schedule name |
startDate | string | Required | Start date |
endDate | string | Required | End date |
employeeIds | array | Required | Employees to schedule |
templateIds | array | Optional | Templates to use |
options | object | Optional | Generation options |
Response (201):
json
{ "success": true, "schedule": { "id": "uuid", "name": "Auto-Generated Week", "shiftCount": 35 }}