move_tasks
Moves tasks between projects and automatically cascades to child tasks to prevent orphaned subtasks.
Instructions
Move tasks between projects via V2 batch.
[Category: Tasks — Batch] [Auth: V2]
[Related: batch_update_tasks, list_projects, set_subtask_parent]
⚠️ ORPHAN TRAP — The V2 API moves tasks individually, never cascading to children.
Moving a parent task leaves its subtasks stranded in the old project.
The parent-child relationship (parentId/childIds) is preserved in the metadata,
but TickTick won't display subtasks correctly if they're in a different project.
This tool automatically detects and cascades to children:
For each unique source project, it fetches the full project data once via
/project/{id}/data (which correctly returns childIds, unlike /project/{id}/task/{id}).
A {task_id: childIds} index is built per source project — O(1) API calls per project,
not per task. Children are appended to the move batch automatically (same destination).
The returned dict includes `cascaded_children` listing any auto-added child moves.
Args:
moves: List of {"taskId": "...", "fromProjectId": "...", "toProjectId": "..."}.
Only provide parent tasks — children are fetched and moved automatically.Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| moves | Yes |