Update Employee Time Off Policy Assignment
Changed onUpdates one of an employee's time off policy assignments using JSON Merge Patch semantics: a field left out of the body keeps its current value, and at least one of policyId and effectiveDate must be present. policyId reassigns the employee to another policy in the same time off category; reassigning to a policy in a different category is rejected, since that is an assignment for the other category and is created with POST. effectiveDate moves the date the assignment takes effect (the accrual basis date for accruing policies); it must not precede the employee's hire date, and on an assignment that has already ended it must not pass the end date. endDate is server managed and not accepted. The change is recorded the way the admin UI records it: the addressed assignment is kept as an audit copy with status SUPERSEDED and a new assignment carrying the requested policy and effective date takes its place, so the response's id differs from assignmentId whenever something changed. The superseded assignment keeps its own dates; it is an audit copy. The employee holds at most one assignment per category at any point in time and this call keeps that true: an assignment in the category that starts on or after the new effective date and no later than this assignment's end date is archived (no longer in effect, kept as history, whether or not it had already taken effect), and the assignment that preceded this one is re-ended at the day before the new effective date. Assignments that start after this one ends are not affected. Everything the call changed, the superseded assignment included, is returned in supersededAssignments in its post-write state; archived assignments are not listed anywhere else. Accruals for the category are recalculated from the earliest date the change affects. A body whose values equal the assignment's current values would change nothing and is refused with 409, as on assign. Accepts both application/merge-patch+json and application/json.
OAuth Scopes: time_off:policies.write
Request
- Base URLhttps://companySubDomain.bamboohr.com
- Auth
- HTTP basic
- or OAuth 2Authorization code/authorize.phpToken URL/token.phpScopestime_off:policies.write
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Path parameters
The employee ID.
The ID of the active policy assignment to update, as returned by the list endpoint.
Request body
Example request
{
"policyId": 15,
"effectiveDate": "2026-10-01"
}Response
The assignment as it is after the update, under a new id, with supersededAssignments listing every assignment in the same category the write changed: the addressed assignment with status SUPERSEDED and its original dates, any re-ended preceding assignment with status ACTIVE and its new endDate, and any archived scheduled assignment with status ARCHIVED. Never empty: it always carries at least the superseded addressed assignment.
Example response
{
"id": 821,
"employeeId": 40341,
"policyId": 15,
"categoryId": 64,
"effectiveDate": "2022-05-02",
"createdAt": "2025-05-27T22:34:07Z",
"updatedAt": "2025-05-27T22:34:07Z",
"status": "ACTIVE",
"supersededAssignments": [
{
"id": 821,
"employeeId": 40341,
"policyId": 15,
"categoryId": 64,
"effectiveDate": "2022-05-02",
"createdAt": "2025-05-27T22:34:07Z",
"updatedAt": "2025-05-27T22:34:07Z",
"status": "ACTIVE"
}
]
}Changes
- info
endpoint added
- info