---
title: "Update an existing shift"
method: PUT
path: "/management/v2/shifts/{id}"
tags: ["Shifts"]
---

# Update an existing shift

`PUT /management/v2/shifts/{id}`

## Request

- Base URL: `https://your-subdomain.deputy.deputy.com/api`
- URL: `https://your-subdomain.deputy.deputy.com/api/management/v2/shifts/{id}`
- Auth: API key in header `OAuth`

Update an existing shift.

## Path parameters

- `id` integer, required

## Request body

- UpdateRequestUpdateData
  - `shift` Tenantschedulev2modelShift
    - `id` integer
    - `start` string
    - `end` string
    - `mealbreakDuration` number, float
    - `mealbreakSlots` ModelBreak[]
      - `slotType` 'BREAK' | 'WORK' | 'CUSTOM'
      - `start` integer
      - `end` integer
      - `state` 'NOT_START' | 'IN_PROGRESS' | 'FINISHED' | 'DURATION_ONLY' | 'DURATION_FINISHED'
      - `canStartEarly` boolean
      - `canEndEarly` boolean
      - `isMandatory` boolean
      - `type` 'MEAL_BREAK' | 'REST_BREAK'
      - `typeLabel` string
      - `startDateTime` string
      - `endDateTime` string
    - `duration` number, float
    - `cost` number, float
    - `area` integer
    - `employee` integer
    - `note` string
    - `warning` string
    - `warningOverrideComment` string
    - `isPublished` boolean
    - `timesheet` integer
    - `isOpen` boolean
    - `approvalRequired` boolean
    - `confirmationStatus` 'ROSTER_CONFIRMATION_NOT_REQUIRED' | 'ROSTER_CONFIRMATION_REQUIRED' | 'ROSTER_CONFIRMATION_DONE' | 'ROSTER_CONFIRMATION_DECLINED'
    - `confirmationNote` string
    - `confirmedByWhom` integer
    - `confirmedAt` string
    - `swapStatus` 'SWAP_STATUS_NOT_REQUIRED' | 'SWAP_STATUS_PENDING_OUT' | 'SWAP_STATUS_PENDING_IN' | 'SWAP_STATUS_PENDING_IN_OUT' | 'SWAP_STATUS_PENDING_APPROVAL' | 'SWAP_STATUS_APPROVED' | 'SWAP_STATUS_CANCELLED' | 'SWAP_STATUS_DECLINED'
    - `swapApprovedBy` integer
    - `shiftTemplate` integer
    - `children` V2modelChildShift[]
      - `id` integer
      - `start` string
      - `end` string
      - `cost` number, float
      - `area` integer
      - `canEdit` boolean
      - `parentId` integer
      - `isOpen` boolean
      - `approvalRequired` boolean
      - `isPublished` boolean
      - `confirmationStatus` 'ROSTER_CONFIRMATION_NOT_REQUIRED' | 'ROSTER_CONFIRMATION_REQUIRED' | 'ROSTER_CONFIRMATION_DONE' | 'ROSTER_CONFIRMATION_DECLINED'
      - `confirmedByWhom` integer
      - `confirmedAt` string
      - `creator` integer
      - `createdAt` string
      - `modifiedAt` string
      - `warning` string
      - `warningOverrideComment` string
      - `areaName` string
      - `location` integer
      - `locationName` string
    - `canEdit` boolean
    - `customFields` Tenantsharedv2modelCustomField[]
      - `id` string, int64
      - `booleanField` ModelBooleanField
        - `value` boolean
      - `stringField` ModelStringField
        - `value` string
      - `listField` ModelListField
        - `value` string
      - `multiListField` ModelMultiListField
        - `value` string[]
      - `fileField` ModelFileField
        - `value` integer
      - `employeeVisible` boolean
    - `customFieldData` integer
    - `creator` integer
    - `createdAt` string
    - `modifiedAt` string
    - `consentChangesets` ModelShiftConsentChangeset[]
      - `id` integer
      - `shiftId` integer
      - `consentTransactionId` string
      - `action` 'CREATE' | 'MODIFY' | 'DELETE'
      - `status` 'PENDING' | 'ACTIONED' | 'AUTO_ACTIONED'
      - `newData` ShiftConsentChangesetShiftConsentChangesetData
        - `start` string
        - `end` string
        - `approvalRequired` boolean
        - `cost` number, float
        - `date` string
        - `employee` integer
        - `mealbreakSlotsUnpaidMinutes` number, float
        - `mealbreakSlots` ModelBreak[]
          - `slotType` 'BREAK' | 'WORK' | 'CUSTOM'
          - `start` integer
          - `end` integer
          - `state` 'NOT_START' | 'IN_PROGRESS' | 'FINISHED' | 'DURATION_ONLY' | 'DURATION_FINISHED'
          - `canStartEarly` boolean
          - `canEndEarly` boolean
          - `isMandatory` boolean
          - `type` 'MEAL_BREAK' | 'REST_BREAK'
          - `typeLabel` string
          - `startDateTime` string
          - `endDateTime` string
        - `isOpen` boolean
        - `area` integer
        - `duration` number, float
        - `location` integer
      - `oldData` ShiftConsentChangesetShiftConsentChangesetData
        - `start` string
        - `end` string
        - `approvalRequired` boolean
        - `cost` number, float
        - `date` string
        - `employee` integer
        - `mealbreakSlotsUnpaidMinutes` number, float
        - `mealbreakSlots` ModelBreak[]
          - `slotType` 'BREAK' | 'WORK' | 'CUSTOM'
          - `start` integer
          - `end` integer
          - `state` 'NOT_START' | 'IN_PROGRESS' | 'FINISHED' | 'DURATION_ONLY' | 'DURATION_FINISHED'
          - `canStartEarly` boolean
          - `canEndEarly` boolean
          - `isMandatory` boolean
          - `type` 'MEAL_BREAK' | 'REST_BREAK'
          - `typeLabel` string
          - `startDateTime` string
          - `endDateTime` string
        - `isOpen` boolean
        - `area` integer
        - `duration` number, float
        - `location` integer
      - `violatedRules` ModelViolatedRules[]
        - `ruleCode` string
        - `warning` ModelViolatedRulesWarning
          - `message` string
        - `ruleConfigs` ModelViolatedRulesRuleConfig[]
          - `field` string
          - `operation` 'NOT_SPECIFIED' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_THAN_OR_EQUAL' | 'LESS_THAN_OR_EQUAL' | 'EQUAL' | 'NOT_EQUAL'
          - `value` string
          - `gap` integer
          - `space` integer
      - `creator` integer
      - `createdAt` string
      - `modifiedAt` string
      - `consents` ModelConsent[]
        - `id` string
        - `recordId` string
        - `recordType` 'SHIFT' | 'TIMESHEET' | 'REGULAR_SCHEDULE'
        - `transactionId` string
        - `employeeId` integer
        - `status` 'PENDING' | 'ACCEPTED' | 'DECLINED' | 'CANCELLED' | 'OVERRIDDEN_ACCEPTED'
        - `description` string
        - `metadata` ModelShiftTypeConsentMetadata
          - `comment` string
          - `extras` object
        - `creator` integer
        - `createdAt` string, date-time
    - `areaName` string
    - `location` integer
    - `locationName` string
  - `override` ModelShiftOverride
    - `shiftValidation` boolean
    - `publishValidation` boolean
    - `compliance` ModelCompliance
      - `reason` string
      - `type` 'ALL'

## Response `200`

A successful response.

- ScheduleShiftUpdateResponse: Response after updating a shift. Synchronous API - shift update completes immediately. Cost recalculation for affected shifts runs asynchronously in the background. If cost recalculation is triggered, metadata.operation contains the operation ID for polling status.
  - `success` boolean
  - `data` Tenantschedulev2modelShift
    - `id` integer
    - `start` string
    - `end` string
    - `mealbreakDuration` number, float
    - `mealbreakSlots` ModelBreak[]
      - `slotType` 'BREAK' | 'WORK' | 'CUSTOM'
      - `start` integer
      - `end` integer
      - `state` 'NOT_START' | 'IN_PROGRESS' | 'FINISHED' | 'DURATION_ONLY' | 'DURATION_FINISHED'
      - `canStartEarly` boolean
      - `canEndEarly` boolean
      - `isMandatory` boolean
      - `type` 'MEAL_BREAK' | 'REST_BREAK'
      - `typeLabel` string
      - `startDateTime` string
      - `endDateTime` string
    - `duration` number, float
    - `cost` number, float
    - `area` integer
    - `employee` integer
    - `note` string
    - `warning` string
    - `warningOverrideComment` string
    - `isPublished` boolean
    - `timesheet` integer
    - `isOpen` boolean
    - `approvalRequired` boolean
    - `confirmationStatus` 'ROSTER_CONFIRMATION_NOT_REQUIRED' | 'ROSTER_CONFIRMATION_REQUIRED' | 'ROSTER_CONFIRMATION_DONE' | 'ROSTER_CONFIRMATION_DECLINED'
    - `confirmationNote` string
    - `confirmedByWhom` integer
    - `confirmedAt` string
    - `swapStatus` 'SWAP_STATUS_NOT_REQUIRED' | 'SWAP_STATUS_PENDING_OUT' | 'SWAP_STATUS_PENDING_IN' | 'SWAP_STATUS_PENDING_IN_OUT' | 'SWAP_STATUS_PENDING_APPROVAL' | 'SWAP_STATUS_APPROVED' | 'SWAP_STATUS_CANCELLED' | 'SWAP_STATUS_DECLINED'
    - `swapApprovedBy` integer
    - `shiftTemplate` integer
    - `children` V2modelChildShift[]
      - `id` integer
      - `start` string
      - `end` string
      - `cost` number, float
      - `area` integer
      - `canEdit` boolean
      - `parentId` integer
      - `isOpen` boolean
      - `approvalRequired` boolean
      - `isPublished` boolean
      - `confirmationStatus` 'ROSTER_CONFIRMATION_NOT_REQUIRED' | 'ROSTER_CONFIRMATION_REQUIRED' | 'ROSTER_CONFIRMATION_DONE' | 'ROSTER_CONFIRMATION_DECLINED'
      - `confirmedByWhom` integer
      - `confirmedAt` string
      - `creator` integer
      - `createdAt` string
      - `modifiedAt` string
      - `warning` string
      - `warningOverrideComment` string
      - `areaName` string
      - `location` integer
      - `locationName` string
    - `canEdit` boolean
    - `customFields` Tenantsharedv2modelCustomField[]
      - `id` string, int64
      - `booleanField` ModelBooleanField
        - `value` boolean
      - `stringField` ModelStringField
        - `value` string
      - `listField` ModelListField
        - `value` string
      - `multiListField` ModelMultiListField
        - `value` string[]
      - `fileField` ModelFileField
        - `value` integer
      - `employeeVisible` boolean
    - `customFieldData` integer
    - `creator` integer
    - `createdAt` string
    - `modifiedAt` string
    - `consentChangesets` ModelShiftConsentChangeset[]
      - `id` integer
      - `shiftId` integer
      - `consentTransactionId` string
      - `action` 'CREATE' | 'MODIFY' | 'DELETE'
      - `status` 'PENDING' | 'ACTIONED' | 'AUTO_ACTIONED'
      - `newData` ShiftConsentChangesetShiftConsentChangesetData
        - `start` string
        - `end` string
        - `approvalRequired` boolean
        - `cost` number, float
        - `date` string
        - `employee` integer
        - `mealbreakSlotsUnpaidMinutes` number, float
        - `mealbreakSlots` ModelBreak[]
          - `slotType` 'BREAK' | 'WORK' | 'CUSTOM'
          - `start` integer
          - `end` integer
          - `state` 'NOT_START' | 'IN_PROGRESS' | 'FINISHED' | 'DURATION_ONLY' | 'DURATION_FINISHED'
          - `canStartEarly` boolean
          - `canEndEarly` boolean
          - `isMandatory` boolean
          - `type` 'MEAL_BREAK' | 'REST_BREAK'
          - `typeLabel` string
          - `startDateTime` string
          - `endDateTime` string
        - `isOpen` boolean
        - `area` integer
        - `duration` number, float
        - `location` integer
      - `oldData` ShiftConsentChangesetShiftConsentChangesetData
        - `start` string
        - `end` string
        - `approvalRequired` boolean
        - `cost` number, float
        - `date` string
        - `employee` integer
        - `mealbreakSlotsUnpaidMinutes` number, float
        - `mealbreakSlots` ModelBreak[]
          - `slotType` 'BREAK' | 'WORK' | 'CUSTOM'
          - `start` integer
          - `end` integer
          - `state` 'NOT_START' | 'IN_PROGRESS' | 'FINISHED' | 'DURATION_ONLY' | 'DURATION_FINISHED'
          - `canStartEarly` boolean
          - `canEndEarly` boolean
          - `isMandatory` boolean
          - `type` 'MEAL_BREAK' | 'REST_BREAK'
          - `typeLabel` string
          - `startDateTime` string
          - `endDateTime` string
        - `isOpen` boolean
        - `area` integer
        - `duration` number, float
        - `location` integer
      - `violatedRules` ModelViolatedRules[]
        - `ruleCode` string
        - `warning` ModelViolatedRulesWarning
          - `message` string
        - `ruleConfigs` ModelViolatedRulesRuleConfig[]
          - `field` string
          - `operation` 'NOT_SPECIFIED' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_THAN_OR_EQUAL' | 'LESS_THAN_OR_EQUAL' | 'EQUAL' | 'NOT_EQUAL'
          - `value` string
          - `gap` integer
          - `space` integer
      - `creator` integer
      - `createdAt` string
      - `modifiedAt` string
      - `consents` ModelConsent[]
        - `id` string
        - `recordId` string
        - `recordType` 'SHIFT' | 'TIMESHEET' | 'REGULAR_SCHEDULE'
        - `transactionId` string
        - `employeeId` integer
        - `status` 'PENDING' | 'ACCEPTED' | 'DECLINED' | 'CANCELLED' | 'OVERRIDDEN_ACCEPTED'
        - `description` string
        - `metadata` ModelShiftTypeConsentMetadata
          - `comment` string
          - `extras` object
        - `creator` integer
        - `createdAt` string, date-time
    - `areaName` string
    - `location` integer
    - `locationName` string
  - `metadata` ScheduleShiftUpdateResponseMetadata
    - `operation` ScheduleShiftOperation: Operation tracking information for asynchronous APIs.
      - `operationId` string: Unique identifier for the operation. Use this to poll /operations/v2/operations/{id} for status updates.
      - `locks` OperationLock[]: Virtual Locks held by this operation that prevent conflicting operations.
        - `kind` string
        - `ids` object

---

[API](https://skmtc.dev/deputy/apis/deputy-v2-api.md) - [All operations](https://skmtc.dev/deputy/apis/deputy-v2-api/llms.txt) - [OpenAPI document](https://skmtc.dev/deputy/apis/deputy-v2-api/revisions/78f0278f4608?raw)
