Tasks

Moves a task and its dependent tasks by a given number of working days

Changed on

Shifts 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
    }
  }
}
patch/api/v2/tasks/{id}/move_dependent

Request

  • Base URL
    https://developer.productive.io (the document declares no server; this is the origin it was published from)
  • URL
    https://developer.productive.io/api/v2/tasks/{id}/move_dependent
  • Auth
    none declared

Path parameters

idstring required

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

    • warning

      added the new bad_decimal_format enum value to the // response property for the response status

    • warning

      added the new non_finite_number enum value to the // response property for the response status

    • warning

      added the new null_bytes_in_params enum 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