---
title: "Set user custom working hours"
method: PUT
path: "/company-policies/v1/users/{userId}/working-hours"
tags: ["Company Policies:v1:UserWorkingHours"]
---

# Set user custom working hours

`PUT /company-policies/v1/users/{userId}/working-hours`

## Request

- Base URL: `https://api.connecteam.com`
- URL: `https://api.connecteam.com/company-policies/v1/users/{userId}/working-hours`
- Auth: one of:
  - API key in header `X-API-KEY`
  - OAuth 2
    - Client credentials
    - Token URL: `/oauth/v1/token` scopes: `company_policies.write`

Create or replace custom working hours for a user. Any shared working hours assignment is replaced

## Path parameters

- `userId` integer, required: The unique identifier of the user

## Request body

- UserCustomWorkingHoursRequest
  - `workSchedule` WorkScheduleModelInput, required
    - `sunday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
    - `monday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
    - `tuesday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
    - `wednesday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
    - `thursday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
    - `friday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
    - `saturday` WorkDayModel, required
      - `isWorkDay` boolean, required: Whether this day is a working day
      - `timeRanges` TimeRangeModel[]: Working windows for this day
        - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
        - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
      - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
  - `timezone` string, nullable: IANA timezone used to interpret the work schedule. Defaults to the company timezone when omitted

## Response `200`

Successful Response

- APIResponseV2UserWorkingHoursResponse
  - `requestId` string
  - `data` UserWorkingHoursResponse, required
    - `userId` integer, nullable: Integer with minimum value of 1
    - `workingHoursPolicyId` integer, nullable: The unique identifier of the assigned shared working hours policy. Omitted for custom hours
    - `name` string, nullable: The name of the assigned shared working hours policy. Omitted for custom hours
    - `isCustomPolicy` boolean, nullable: Whether these hours are a user-specific custom policy
    - `timezone` string, nullable: IANA timezone used to interpret the work schedule
    - `workSchedule` WorkScheduleModelOutput
      - `sunday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
      - `monday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
      - `tuesday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
      - `wednesday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
      - `thursday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
      - `friday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)
      - `saturday` WorkDayModel, required
        - `isWorkDay` boolean, required: Whether this day is a working day
        - `timeRanges` TimeRangeModel[]: Working windows for this day
          - `startTimeSecs` integer, required: Start of the working window in seconds from midnight (0–86400)
          - `endTimeSecs` integer, required: End of the working window in seconds from midnight (0–86400). Must be after startTimeSecs; overnight windows are not supported
        - `standardWorkHoursSecs` integer, nullable: Expected working duration for this day in seconds (60–86400)

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-03** `a01dde7c27fb`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/connecteam/apis/connecteam-api-documentation/changes/company-policies/v1/users/:userId/working-hours/put.md)

---

[API](https://skmtc.dev/connecteam/apis/connecteam-api-documentation.md) - [All operations](https://skmtc.dev/connecteam/apis/connecteam-api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/connecteam/apis/connecteam-api-documentation/revisions/a01dde7c27fb?raw)
