Move Shift
Move a shift to a different date, time, or staff member in a single call. Runs the same overlap and time-off validation as the schedule UI.
Endpointโ
POST /v1/staff/shifts/{id}/move
Authenticationโ
Requires an API key with the staff:write scope.
Path Parametersโ
| Parameter | Type | Description |
|---|---|---|
id | integer | ID of the shift to move |
Request Bodyโ
| Parameter | Type | Required | Description |
|---|---|---|---|
shift_date | string | Yes | New shift date (YYYY-MM-DD) |
start_time | string | Yes | New start time (HH:MM) |
end_time | string | Yes | New end time (HH:MM) |
staff_id | integer | No | Reassign to this staff member. Pass null to make open. |
Responseโ
Success (200 OK)โ
Returns the updated shift object (same shape as Get Shift).
{
"data": {
"id": 42,
"staff": { "id": 5, "first_name": "Jane", "last_name": "Smith" },
"staff_id": 5,
"location": null,
"location_id": null,
"shift_date": "2026-04-10",
"start_time": "10:00:00",
"end_time": "18:00:00",
"duration_calculation": "8 hours",
"break_setting": false,
"break_type": null,
"break_time": null,
"break_payment": null,
"shift_notes": null,
"status": "Unpublished",
"publish_type": null,
"created_at": "2026-03-15T08:00:00+00:00",
"updated_at": "2026-04-01T09:30:00+00:00"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-04-01T09:30:00+00:00"
}
}
Errorsโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | No API key provided |
| 401 | invalid_api_key | Invalid API key |
| 403 | insufficient_scope | API key lacks staff:write scope |
| 404 | not_found | Shift not found or belongs to another supplier |
| 422 | validation_error | Missing or invalid fields |
| 422 | shift_conflict | Overlap or time-off conflict detected |
Example Requestโ
curl -X POST "https://app.equipdash.com/api/v1/staff/shifts/42/move" \
-H "Authorization: Bearer eqd_live_abc123xyz789..." \
-H "Content-Type: application/json" \
-d '{
"staff_id": 5,
"shift_date": "2026-04-10",
"start_time": "10:00",
"end_time": "18:00"
}'