Skip to content
ShiftlyDevelopers
Documentation menu

Shift swaps

Staff offering a shift to a named colleague, who accepts or declines in Shiftly. A cancelled offer is removed, not kept.

Needs the roster:read permission, depending on the operation. The business sees it as "Rosters and shifts".

Fields

ShiftSwap fields
FieldTypeAccessMeaning
idstringRead-onlyThe swap.
shift_idstringRead-onlyThe shift being handed over.
location_idstringRead-onlyWhere the shift is.
from_employee_idstringRead-onlyWho offered the shift.
to_employee_idstringRead-onlyWho was asked to work it.
status"pending", "accepted", "rejected"Read-onlyThe colleague's answer. Who works the shift is the shift's own employee_id, not this status.
requested_attimestampRead-onlyWhen the shift was offered.
created_attimestampRead-onlyWhen the record was created.
updated_attimestampRead-onlyWhen the record last changed.

Operations

List shift swaps

GET/v1/shift-swaps

Permission: roster:read

Query parameters
ParameterTypeMeaning
limitinteger, default 50, up to 200OptionalHow many records per page. Up to 200.
afterstringOptionalThe next_cursor from the previous page.
updated_sincetimestampOptionalOnly records changed at or after this moment. Pair it with include_archived to see removals.
include_archived"true", "false"OptionalInclude records that have been archived.
location_idstringOptionalOnly this location.
status"pending", "accepted", "rejected"OptionalOnly records in this status.
shift_idstringOptional
employee_idstringOptionalOnly this person.
200 response
{
  "data": [
    {
      "id": "66f1c2a4b3d9e8f7a6b5c4d3",
      "shift_id": "66f1c2a4b3d9e8f7a6b5c4d3",
      "location_id": "66f1c2a4b3d9e8f7a6b5c4d3",
      "from_employee_id": "66f1c2a4b3d9e8f7a6b5c4d3",
      "to_employee_id": "66f1c2a4b3d9e8f7a6b5c4d3",
      "status": "pending",
      "requested_at": "2026-10-06T09:00:00+11:00",
      "created_at": "2026-10-06T09:00:00+11:00",
      "updated_at": "2026-10-06T09:00:00+11:00"
    }
  ],
  "has_more": true,
  "next_cursor": "text"
}
Refusals
StatusWhen
400The error's code is invalid_request or range_too_long. The Errors page describes each code.
401The error's code is invalid_token or token_expired. The Errors page describes each code.
403The error's code is origin_not_allowed, permission_denied, not_available, connection_disconnected, connection_suspended or app_suspended. The Errors page describes each code.
404There is nothing at this address, or no such record in this business.
429Too many requests. Retry-After says when to try again.
500Something went wrong at Shiftly. Quote the request id.
503This environment is not set up for partner apps yet.

Get one shift swap

GET/v1/shift-swaps/{id}

Permission: roster:read

200 response
{
  "id": "66f1c2a4b3d9e8f7a6b5c4d3",
  "shift_id": "66f1c2a4b3d9e8f7a6b5c4d3",
  "location_id": "66f1c2a4b3d9e8f7a6b5c4d3",
  "from_employee_id": "66f1c2a4b3d9e8f7a6b5c4d3",
  "to_employee_id": "66f1c2a4b3d9e8f7a6b5c4d3",
  "status": "pending",
  "requested_at": "2026-10-06T09:00:00+11:00",
  "created_at": "2026-10-06T09:00:00+11:00",
  "updated_at": "2026-10-06T09:00:00+11:00"
}
Refusals
StatusWhen
400The error's code is invalid_request or range_too_long. The Errors page describes each code.
401The error's code is invalid_token or token_expired. The Errors page describes each code.
403The error's code is origin_not_allowed, permission_denied, not_available, connection_disconnected, connection_suspended or app_suspended. The Errors page describes each code.
404There is nothing at this address, or no such record in this business.
429Too many requests. Retry-After says when to try again.
500Something went wrong at Shiftly. Quote the request id.
503This environment is not set up for partner apps yet.