Moves a task and its dependent tasks by a given number of working days
Changed onShifts a task and all of its blocking-dependent tasks forward or backward by a number of working days. Useful for re-baselining a Gantt schedule when an upstream task slips.
Pass days_count as a signed integer — positive shifts forward, negative shifts backward. The shift counts only working days (weekends and configured non-working days from the organization's working hours are skipped). Closed tasks, tasks without a due_date, and tasks the caller cannot access are silently excluded from the move.
The dependent graph is walked recursively via blocking dependencies (task_dependency rows of type blocking).
Set skip_root_task: true to shift only the dependents and leave the root task in place — useful when only downstream work needs to slide. Defaults to false.
Each moved task gets a Gantt - Move dependent tasks activity entry for auditability.
Returns 422 if shifting the dates would conflict with existing time bookings on any of the moved tasks (booking constraints are validated up-front, no partial moves are persisted).
{
"data": {
"type": "tasks",
"attributes": {
"days_count": 5,
"skip_root_task": false
}
}
}
Request
- Base URLhttps://developer.productive.io (the document declares no server; this is the origin it was published from)
- URLhttps://developer.productive.io/api/v2/tasks/{id}/move_dependent
- Authnone declared
Path parameters
ID
Request body
Example request
{
"data": {
"type": "tasks",
"attributes": {
"days_count": 5,
"skip_root_task": false
}
}
}Response
Single task
Example response
{
"data": {
"id": "120501",
"type": "tasks",
"attributes": {
"title": "Implement user authentication",
"description": "Set up OAuth2 authentication with Google and GitHub providers",
"number": "42",
"task_number": "42",
"private": false,
"due_date": "2026-03-31",
"start_date": "2026-03-15",
"closed_at": null,
"closed": false,
"created_at": "2026-01-15T10:00:00.000+00:00",
"updated_at": "2026-03-10T14:30:00.000+00:00",
"email_key": "7a083181e1e5f5dc5c11920d72804716",
"custom_fields": null,
"todo_count": 3,
"open_todo_count": 1,
"subtask_count": 2,
"open_subtask_count": 1,
"task_dependency_count": 0,
"type_id": 1,
"blocking_dependency_count": 0,
"waiting_on_dependency_count": 0,
"linked_dependency_count": 0,
"placement": 1000000,
"subtask_placement": null,
"tag_list": [
"backend",
"security"
],
"last_activity_at": "2026-03-10T14:30:00.000+00:00",
"initial_estimate": 480,
"remaining_time": 240,
"billable_time": 120,
"worked_time": 240,
"deleted_at": null
},
"relationships": {
"project": {
"data": {
"type": "projects",
"id": "6899"
}
},
"creator": {
"data": {
"type": "people",
"id": "12"
}
},
"assignee": {
"data": {
"type": "people",
"id": "12"
}
},
"task_list": {
"data": {
"type": "task_lists",
"id": "14308"
}
},
"workflow_status": {
"data": {
"type": "workflow_statuses",
"id": "224"
}
},
"service": {
"data": null
},
"parent_task": {
"data": null
}
}
},
"included": []
}Changes
- info
added the optional property
////to the response with the status - info
added the optional property
////to the response with the status
- info
- warning
added the new
bad_decimal_formatenum value to the//response property for the response status - warning
added the new
non_finite_numberenum value to the//response property for the response status - warning
added the new
null_bytes_in_paramsenum value to the//response property for the response status - info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- info
added the non-success response with the status
- warning