Self-Service API

Employee-facing endpoints for schedules, shift swaps, and availability.

My Shifts

GET/api/self-service/my-shiftsAuth: Session

Get authenticated user's scheduled shifts.

Query Parameters:

ParameterTypeRequiredDescription
startDatestringRequiredStart date (YYYY-MM-DD)
endDatestringRequiredEnd 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: Session

Get shift swap requests.

Query Parameters:

ParameterTypeRequiredDescription
statusstringOptionalFilter: "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: Session

Request a shift swap.

Request Body:

json
{
"offeringShiftId": "uuid"
}

Accept/Decline Swap

PATCH/api/self-service/shift-swaps/:idAuth: Session

Accept or decline a swap request.

Request Body:

json
{
"action": "accept"
}

Available Shifts

GET/api/self-service/available-shiftsAuth: Session

Get shifts available for pickup.

Query Parameters:

ParameterTypeRequiredDescription
startDatestringOptionalStart date filter
endDatestringOptionalEnd 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: Session

Get 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: Session

Update 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: Session

Get your shift bids.

Submit Bid

POST/api/self-service/my-bidsAuth: Session

Submit a bid for a shift.

Request Body:

json
{
"shiftId": "uuid",
"priority": 1
}

Withdraw Bid

DELETE/api/self-service/my-bids/:idAuth: Session

Withdraw a bid.


My Metrics

GET/api/self-service/my-metricsAuth: Session

Get 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 }
}
}