Task Lists

Here we have a sample project with two users involved:

Response: HTTP 200, application/json (Hide)
GET /projects

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[
    {
        "id": 1,
        "class": "Project",
        "url_path": "\/projects\/1",
        "name": "Test Project",
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "members": [
            1,
            2
        ],
        "category_id": 0,
        "label_id": 0,
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164282,
        "updated_by_id": 1,
        "body": null,
        "body_formatted": "",
        "company_id": 1,
        "leader_id": 1,
        "currency_id": 2,
        "template_id": 0,
        "based_on_type": null,
        "based_on_id": null,
        "email": "notifications+m2p-xVVumij@mail.manageprojects.com",
        "is_tracking_enabled": true,
        "is_client_reporting_enabled": false,
        "budget": null,
        "count_tasks": 0,
        "count_discussions": 0,
        "count_files": 0,
        "count_notes": 0
    }
]

Lets check if there are any task lists in this project:

Response: HTTP 200, application/json (Hide)
GET /projects/1/task-lists

Response:

1
[]

This project has no task lists yet, so lets create one:

Response: HTTP 200, application/json (Hide)
POST /projects/1/task-lists

Payload:

1
2
3
4
5
{
    "name": "Task List #1",
    "start_on": "2014-05-16",
    "due_on": "2014-05-18"
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "single": {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "Task List #1",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "project_id": 1,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164282,
        "updated_by_id": 1,
        "start_on": 1400198400,
        "due_on": 1400371200,
        "position": 1,
        "open_tasks": 0,
        "completed_tasks": 0
    }
}

Now lets check project task lists listing:

Response: HTTP 200, application/json (Hide)
GET /projects/1/task-lists

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[
    {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "Task List #1",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "project_id": 1,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164282,
        "updated_by_id": 1,
        "start_on": 1400198400,
        "due_on": 1400371200,
        "position": 1,
        "open_tasks": 0,
        "completed_tasks": 0
    }
]

To change task list properties, simply send a PUT request to /projects/:project_id/task-lists/:task_list_id path:

Response: HTTP 200, application/json (Hide)
PUT /projects/1/task-lists/1

Payload:

1
2
3
{
    "name": "Updated Task List Name"
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "single": {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "Updated Task List Name",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "project_id": 1,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164282,
        "updated_by_id": 1,
        "start_on": 1400198400,
        "due_on": 1400371200,
        "position": 1,
        "open_tasks": 0,
        "completed_tasks": 0
    }
}

Tasks are added task lists via task_list_id parameter:

Response: HTTP 200, application/json (Hide)
POST /projects/1/tasks

Payload:

1
2
3
4
{
    "name": "Task #1",
    "task_list_id": 1
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
{
    "single": {
        "id": 1,
        "class": "Task",
        "url_path": "\/projects\/1\/tasks\/1",
        "name": "Task #1",
        "assignee_id": 0,
        "delegated_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "comments_count": 0,
        "attachments": [],
        "labels": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "",
        "body_formatted": "",
        "created_on": 1430164283,
        "created_by_id": 1,
        "updated_on": 1430164283,
        "updated_by_id": 1,
        "task_number": 1,
        "task_list_id": 1,
        "position": 1,
        "is_important": false,
        "due_on": null,
        "estimate": 0,
        "job_type_id": 0,
        "total_subtasks": 0,
        "completed_subtasks": 0,
        "open_subtasks": 0
    },
    "subscribers": [
        1
    ],
    "comments": [],
    "reminders": [],
    "subtasks": [],
    "task_list": {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "Updated Task List Name",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "project_id": 1,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164282,
        "updated_by_id": 1,
        "start_on": 1400198400,
        "due_on": 1400371200,
        "position": 1,
        "open_tasks": 1,
        "completed_tasks": 0
    },
    "tracked_time": 0,
    "tracked_expenses": 0
}

To release a task and unhook it from a list, set task_list_id to an empty value:

Response: HTTP 200, application/json (Hide)
PUT /projects/1/tasks/1

Payload:

1
2
3
{
    "task_list_id": null
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
    "single": {
        "id": 1,
        "class": "Task",
        "url_path": "\/projects\/1\/tasks\/1",
        "name": "Task #1",
        "assignee_id": 0,
        "delegated_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "comments_count": 0,
        "attachments": [],
        "labels": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "body": "",
        "body_formatted": "",
        "created_on": 1430164283,
        "created_by_id": 1,
        "updated_on": 1430164283,
        "updated_by_id": 1,
        "task_number": 1,
        "task_list_id": 0,
        "position": 1,
        "is_important": false,
        "due_on": null,
        "estimate": 0,
        "job_type_id": 0,
        "total_subtasks": 0,
        "completed_subtasks": 0,
        "open_subtasks": 0
    },
    "subscribers": [
        1
    ],
    "comments": [],
    "reminders": [],
    "subtasks": [],
    "task_list": null,
    "tracked_time": 0,
    "tracked_expenses": 0
}

Now that we learned how to create and update ilestones, lets see how we can move them to trash:

Response: HTTP 200, application/json (Hide)
DELETE /projects/1/task-lists/1

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "single": {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "Updated Task List Name",
        "is_trashed": true,
        "trashed_on": 1430164283,
        "trashed_by_id": 1,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "project_id": 1,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164283,
        "updated_by_id": 1,
        "start_on": 1400198400,
        "due_on": 1400371200,
        "position": 1,
        "open_tasks": 0,
        "completed_tasks": 0
    }
}

To confirm that the task list is actually moved to trash, we can check is_trashed flag:

Response: HTTP 200, application/json (Hide)
GET /projects/1/task-lists/1

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "single": {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "Updated Task List Name",
        "is_trashed": true,
        "trashed_on": 1430164283,
        "trashed_by_id": 1,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "project_id": 1,
        "created_on": 1430164282,
        "created_by_id": 1,
        "updated_on": 1430164283,
        "updated_by_id": 1,
        "start_on": 1400198400,
        "due_on": 1400371200,
        "position": 1,
        "open_tasks": 0,
        "completed_tasks": 0
    }
}