Scheduling
Public API

Claims a shift for the authenticated employee. There is no employee parameter: the claimant is always the caller, and a caller with no employee record gets claimant_not_an_employee. When the shift requires approval the claim is created pending and the employee is not assigned. Otherwise the claim is approved and the employee is assigned in the same request. A recurring occurrence is identified by a composite ID, <definitionUuid>_<Ymd\THis>, and can be claimed once it has a row; an occurrence that has no row yet is not claimable and returns shift_not_claimable. A success body carries the claim only, with no evaluation data. Claiming fails with open_shifts_disabled while Open Shifts is off.

OAuth Scopes: scheduling:shifts.write

post/api/v1/scheduling/shift-claims

Request

Request body

shiftIdstring required

The ID of the shift to claim. A recurring occurrence has a composite ID, <definitionUuid>_<Ymd\THis>, which resolves to the occurrence once it has a row. A projected occurrence that has no row yet is not claimable.

Example request

{
  "shiftId": "019aa09f-0712-74cb-9186-8ad0eb6038dc_20300601T150000"
}

Response

The claim was created.

idstring uuid required

The unique ID of this claim.

shiftIdstring uuid required

The ID of the shift being claimed.

employeeIdinteger required

The ID of the employee who claimed the shift.

status'pending' | 'approved' | 'declined' | 'withdrawn' required

Where the claim stands. Only a pending claim can be withdrawn. A first-come-first-served claim is never pending because it is approved when it is created.

resolutionReason'manager_denied' | 'shift_filled' | 'shift_deleted' | 'claiming_disabled' | 'assignment_blocked' nullable required

Why the claim was declined. Kept separate from status so that being denied and the shift filling are distinguishable.

createdAtstring date-time required

UTC timestamp when the claim was received. This is the single source of truth for queue order.

updatedAtstring date-time nullable required

UTC timestamp when the claim was last updated.

Example response

{
  "id": "019aa0a1-1c44-7b2e-9f10-2ad0eb6038aa",
  "shiftId": "019aa09f-0712-74cb-9186-8ad0eb6038dc",
  "employeeId": 49283,
  "status": "pending",
  "createdAt": "2026-08-25T16:04:12Z",
  "updatedAt": "2026-08-25T16:04:12Z"
}

Changes