Time Off
Public API

Update Time Off Policy

Changed on

Partially updates a time off policy using JSON Merge Patch semantics. A supplied version replaces the complete accrual schedule by archiving overlapping versions and creating a new version, matching admin Edit Schedule.

OAuth Scopes: time_off:policies.write

patch/api/v1/time-off/policies/{id}

Request

Path parameters

idinteger required

The time off policy ID.

Request body

namestring

The policy name. Must be unique among active policies in the category.

Example request

{
  "name": "Standard Vacation",
  "version": {
    "effectiveDate": "2026-01-01",
    "rateTransitions": "IMMEDIATELY",
    "firstAccrual": "PRORATE",
    "carryOverYmd": "01-01",
    "milestones": [
      {
        "accrualBeginsType": "IMMEDIATELY",
        "accrualHours": 6.67,
        "accrualInterval": "MONTHLY",
        "maximumHours": 240,
        "maximumCarryOver": 40
      }
    ]
  }
}

Response

The updated time off policy.

idinteger

The unique identifier for the time off policy.

namestring

The name of the time off policy.

categoryIdinteger

The id of the time off category this policy belongs to.

type'ACCRUING' | 'UNLIMITED' | 'MANUAL'

The type of the time off policy.

assignedEmployeeCountinteger

The number of active employees currently assigned to this policy.

createdAtstring date-time

UTC timestamp when the policy was created.

updatedAtstring date-time nullable

UTC timestamp when the policy was last updated. Null when the policy has never been updated.

deletedAtstring date-time nullable

UTC timestamp when the policy was deleted. Always null because deleted policies are excluded from the API.

Example response

{
  "id": 1,
  "name": "Standard Vacation",
  "categoryId": 22,
  "type": "ACCRUING",
  "currentVersion": {
    "id": 1,
    "policyId": 15,
    "effectiveDate": "2026-01-01",
    "status": "ACTIVE",
    "rateTransitions": "IMMEDIATELY",
    "firstAccrual": "PRORATE",
    "carryOverYmd": "01-01",
    "milestones": [
      {
        "id": 1,
        "accrualBeginsType": "IMMEDIATELY",
        "accrualHours": 6.67,
        "accrualInterval": "MONTHLY",
        "maximumHours": 240,
        "maximumCarryOver": 40
      }
    ],
    "createdAt": "2026-01-01T06:00:00Z",
    "updatedAt": "2026-01-02T17:00:00Z"
  },
  "assignedEmployeeCount": 42,
  "createdAt": "2026-01-01T06:00:00Z",
  "updatedAt": "2026-01-02T17:00:00Z"
}

Changes