Self-Service API
Employee-facing endpoints for schedules, shift swaps, and availability.
My Shifts
GET
/api/self-service/my-shiftsAuth: SessionGet authenticated user's scheduled shifts.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
startDate | string | Required | Start date (YYYY-MM-DD) |
endDate | string | Required | End date (YYYY-MM-DD) |
Response (200):
json
{ "shifts": [ { "id": "uuid", "date": "2026-02-01", "startTime": "08:00", "endTime": "16:00", "template": { "name": "Morning Shift", "color": "#3b82f6" }, "breaks": [ { "startTime": "12:00", "endTime": "13:00", "type": "lunch" } ] } ]}Shift Swaps
List Swaps
GET
/api/self-service/shift-swapsAuth: SessionGet shift swap requests.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Optional | Filter: "pending", "approved", "rejected", "cancelled" |
Response (200):
json
{ "swaps": [ { "id": "uuid", "offeringShift": { "id": "uuid", "date": "2026-02-01", "startTime": "08:00" }, "offeringEmployee": { "id": "uuid", "name": "John Doe" }, "requestingEmployee": { "id": "uuid", "name": "Jane Smith" }, "status": "pending", "createdAt": "2026-01-25T10:00:00Z" } ]}Request Swap
POST
/api/self-service/shift-swapsAuth: SessionRequest a shift swap.
Request Body:
json
{ "offeringShiftId": "uuid"}Accept/Decline Swap
PATCH
/api/self-service/shift-swaps/:idAuth: SessionAccept or decline a swap request.
Request Body:
json
{ "action": "accept"}Available Shifts
GET
/api/self-service/available-shiftsAuth: SessionGet shifts available for pickup.
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
startDate | string | Optional | Start date filter |
endDate | string | Optional | End date filter |
Response (200):
json
{ "shifts": [ { "id": "uuid", "date": "2026-02-05", "startTime": "14:00", "endTime": "22:00", "template": { "name": "Evening Shift", "color": "#f59e0b" }, "isBiddable": true, "biddingEndsAt": "2026-02-03T00:00:00Z" } ]}Availability Preferences
Get Availability
GET
/api/self-service/availabilityAuth: SessionGet availability preferences.
Response (200):
json
{ "preferences": { "monday": { "available": true, "preferredStart": "08:00", "preferredEnd": "16:00" }, "tuesday": { "available": true, "preferredStart": "08:00", "preferredEnd": "16:00" }, "wednesday": { "available": true, "preferredStart": "08:00", "preferredEnd": "16:00" }, "thursday": { "available": true, "preferredStart": "08:00", "preferredEnd": "16:00" }, "friday": { "available": true, "preferredStart": "08:00", "preferredEnd": "16:00" }, "saturday": { "available": false }, "sunday": { "available": false } }, "unavailableDates": ["2026-02-14", "2026-02-15"], "maxHoursPerWeek": 40}Update Availability
PUT
/api/self-service/availabilityAuth: SessionUpdate availability preferences.
Request Body:
json
{ "preferences": { "monday": { "available": true, "preferredStart": "10:00", "preferredEnd": "18:00" }, "saturday": { "available": false } }, "maxHoursPerWeek": 32}My Bids
List Bids
GET
/api/self-service/my-bidsAuth: SessionGet your shift bids.
Submit Bid
POST
/api/self-service/my-bidsAuth: SessionSubmit a bid for a shift.
Request Body:
json
{ "shiftId": "uuid", "priority": 1}Withdraw Bid
DELETE
/api/self-service/my-bids/:idAuth: SessionWithdraw a bid.
My Metrics
GET
/api/self-service/my-metricsAuth: SessionGet your personal performance metrics.
Response (200):
json
{ "metrics": { "adherence": 94.2, "hoursWorked": 38.5, "shiftsWorked": 5, "contactsHandled": 245, "avgHandleTime": 175 }, "period": "current_week", "comparison": { "adherence": { "previous": 92.1, "change": 2.1 }, "hoursWorked": { "previous": 40, "change": -1.5 } }}