Update work package
update_work_packageChange any writable work package field—assign, unassign, move status, reschedule, re-parent, set progress, or write custom fields—with lock_version to prevent conflicting edits.
Instructions
Change any writable field of a work package, with optimistic locking done properly.
Use it to assign or unassign, move a status forward, re-schedule, re-parent, set progress, or write custom fields — one tool instead of many.
Returns the updated work package in full detail, including the new lock_version to use
for a follow-up edit.
Pitfalls: omitted parameters are left alone, while passing null clears a field
(assignee, responsible, version, sprint, parent, dates, description). A 409 error means
somebody else changed the work package first — the error carries the fresh lock_version
and the conflicting fields, so re-read and retry deliberately.
Ids come from get_work_package / list_work_packages; status, priority, type and
version values come from get_project_metadata; sprint ids come from list_sprints.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Work package id to change (#1234). | |
| date | No | Milestone date (YYYY-MM-DD); only valid on milestone types. | __unchanged__ |
| type | No | New type as a name or numeric id. Cannot be cleared. | |
| notify | No | Email notifications for this change. | |
| sprint | No | Numeric sprint id from list_sprints; null removes it. | __unchanged__ |
| status | No | New status as a name or id; invalid transitions list the reachable statuses. | |
| subject | No | New title. Omit to leave unchanged; cannot be cleared. | |
| version | No | Numeric version id; null removes it. | __unchanged__ |
| assignee | No | Numeric user id; omit to leave unchanged, null (or 'none') to unassign. | __unchanged__ |
| due_date | No | ISO date (YYYY-MM-DD); null clears it. | __unchanged__ |
| priority | No | New priority as a name or numeric id. | |
| parent_id | No | Re-parent under another id; null detaches to top level (the only hierarchy tool). | __unchanged__ |
| start_date | No | ISO date (YYYY-MM-DD); null clears it. | __unchanged__ |
| description | No | New markdown body; omit to leave unchanged, null to empty it. Replaces the whole text; read it first to append instead. | __unchanged__ |
| responsible | No | Numeric id of the accountable person; null clears it. | __unchanged__ |
| lock_version | No | The `lock_version` from get_work_package. Passing it makes a concurrent edit fail loudly (409); omitting it fetches and echoes the current version — safe, but a wider conflict window. | |
| story_points | No | Story points as a non-negative integer. | |
| custom_fields | No | Custom field writes keyed by wire key or display name, e.g. {'Severity': 'High'}. Unknown or non-writable keys fail listing the valid ones. Only passed keys are touched. | |
| estimated_hours | No | Estimate in hours, decimal. | |
| percentage_done | No | Progress 0-100. | |
| remaining_hours | No | Remaining work in hours, decimal. | |
| target_versions | No | Target version ids; [] clears, omit leaves unchanged. Multiple values need instance support. Mutually exclusive with version. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Work package id. | |
| date | No | Milestone date (ISO YYYY-MM-DD); null for non-milestones. | |
| type | No | Work package type. | |
| notes | No | Degradation notes for this result. | |
| author | No | Creating user. | |
| parent | No | Parent work package. | |
| sprint | No | The sprint the work package is planned in; null when unassigned. | |
| status | No | Status. | |
| project | No | Owning project. | |
| subject | No | Subject line. | |
| version | No | Legacy alias: the sole target version, or null for zero/multiple. | |
| assignee | No | Assigned user or group. | |
| category | No | Category. | |
| due_date | No | ISO date (YYYY-MM-DD). | |
| priority | No | Priority. | |
| available | No | Feature availability for this WP: dev links, meetings, files. | |
| created_at | No | ISO 8601 UTC timestamp. | |
| display_id | No | Human-facing id as the instance renders it. Matches the numeric id unless the instance uses semantic identifiers (17.x, e.g. 'PROJ-42'); null when the instance predates it. | |
| start_date | No | ISO date (YYYY-MM-DD). | |
| updated_at | No | ISO 8601 UTC timestamp. | |
| description | No | Description as markdown (raw); html is dropped. | |
| responsible | No | Accountable user. | |
| spent_hours | No | Logged time in hours. | |
| lock_version | No | Optimistic-locking version; pass to update_work_package. | |
| story_points | No | Story points. | |
| custom_fields | No | Always a list; empty when none are set. | |
| project_phase | No | Project phase this work package sits in (16.1+, only when phases are active in the project and visible to this user); details via get_project_phase. | |
| estimated_hours | No | Estimate in hours. | |
| percentage_done | No | Progress, 0-100. | |
| remaining_hours | No | Remaining work in hours. | |
| target_versions | No | All target versions; legacy instances yield zero or one. |