What's New

Purpose of this story is to create a pretty common project scenario and test if all details that we need for What's New are present. Lets start by creating a new project:

Response: HTTP 200, application/json (Hide)
POST /users

Payload:

1
2
3
4
5
6
{
    "type": "Member",
    "email": "member@activecollab.com",
    "password": "123",
    "company_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
{
    "single": {
        "id": 2,
        "class": "Member",
        "url_path": "\/users\/2",
        "is_archived": false,
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "created_on": 1430164530,
        "created_by_id": 1,
        "updated_on": 1430164530,
        "updated_by_id": 1,
        "language_id": 0,
        "first_name": "Member",
        "last_name": null,
        "display_name": "member",
        "short_display_name": "member",
        "email": "member@activecollab.com",
        "additional_email_addresses": [],
        "is_pending_activation": false,
        "avatar_url": "http:\/\/feather.dev\/proxy.php?proxy=avatar&module=system&v=current&b=DEV&user_id=2&size=--SIZE--&timestamp=1430164530",
        "custom_permissions": [],
        "company_id": 1,
        "title": null,
        "phone": null,
        "im_type": null,
        "im_handle": null,
        "note": null
    }
}
Response: HTTP 200, application/json (Hide)
POST /projects

Payload:

1
2
3
4
5
6
7
8
9
{
    "name": "New projct",
    "company_id": 2,
    "leader_id": 1,
    "members": [
        1,
        2
    ]
}

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": "Project",
        "url_path": "\/projects\/1",
        "name": "New projct",
        "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": 1430164530,
        "created_by_id": 1,
        "updated_on": 1430164530,
        "updated_by_id": 1,
        "body": null,
        "body_formatted": "",
        "company_id": 2,
        "leader_id": 1,
        "currency_id": 2,
        "template_id": 0,
        "based_on_type": null,
        "based_on_id": null,
        "email": "notifications+m2p-nkgi5Pg@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
    },
    "category": null,
    "hourly_rates": {
        "1": 100
    },
    "label_ids": [],
    "task_lists": null
}

We made a spelling error there, so lets correct it:

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

Payload:

1
2
3
{
    "name": "New Project"
}

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": "Project",
        "url_path": "\/projects\/1",
        "name": "New 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": 1430164530,
        "created_by_id": 1,
        "updated_on": 1430164530,
        "updated_by_id": 1,
        "body": null,
        "body_formatted": "",
        "company_id": 2,
        "leader_id": 1,
        "currency_id": 2,
        "template_id": 0,
        "based_on_type": null,
        "based_on_id": null,
        "email": "notifications+m2p-nkgi5Pg@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
    },
    "category": null,
    "hourly_rates": {
        "1": 100
    },
    "label_ids": [],
    "task_lists": null
}

Now, we'll create a a couple of task lists:

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

Payload:

1
2
3
{
    "name": "First task list"
}

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": "First task list",
        "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": 1430164530,
        "created_by_id": 1,
        "updated_on": 1430164530,
        "updated_by_id": 1,
        "start_on": null,
        "due_on": null,
        "position": 1,
        "open_tasks": 0,
        "completed_tasks": 0
    }
}
Response: HTTP 200, application/json (Hide)
POST /projects/1/task-lists

Payload:

1
2
3
{
    "name": "Second task list"
}

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": 2,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/2",
        "name": "Second task list",
        "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": 1430164531,
        "created_by_id": 1,
        "updated_on": 1430164531,
        "updated_by_id": 1,
        "start_on": null,
        "due_on": null,
        "position": 2,
        "open_tasks": 0,
        "completed_tasks": 0
    }
}

and a task with one commend and one subtask:

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

Payload:

1
2
3
4
{
    "name": "Test Task",
    "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": "Test Task",
        "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": 1430164531,
        "created_by_id": 1,
        "updated_on": 1430164531,
        "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": "First task list",
        "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": 1430164530,
        "created_by_id": 1,
        "updated_on": 1430164530,
        "updated_by_id": 1,
        "start_on": null,
        "due_on": null,
        "position": 1,
        "open_tasks": 1,
        "completed_tasks": 0
    },
    "tracked_time": 0,
    "tracked_expenses": 0
}
Response: HTTP 200, application/json (Hide)
PUT /projects/1/tasks/1

Payload:

1
2
3
{
    "assignee_id": 2
}

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
68
{
    "single": {
        "id": 1,
        "class": "Task",
        "url_path": "\/projects\/1\/tasks\/1",
        "name": "Test Task",
        "assignee_id": 2,
        "delegated_by_id": 1,
        "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": 1430164531,
        "created_by_id": 1,
        "updated_on": 1430164531,
        "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,
        2
    ],
    "comments": [],
    "reminders": [],
    "subtasks": [],
    "task_list": {
        "id": 1,
        "class": "TaskList",
        "url_path": "\/projects\/1\/task-lists\/1",
        "name": "First task list",
        "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": 1430164530,
        "created_by_id": 1,
        "updated_on": 1430164530,
        "updated_by_id": 1,
        "start_on": null,
        "due_on": null,
        "position": 1,
        "open_tasks": 1,
        "completed_tasks": 0
    },
    "tracked_time": 0,
    "tracked_expenses": 0
}
Response: HTTP 200, application/json (Hide)
POST /projects/1/tasks/1/subtasks

Payload:

1
2
3
{
    "body": "Subtask #1"
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "single": {
        "id": 1,
        "class": "Subtask",
        "url_path": "\/projects\/1\/tasks\/1\/subtasks\/1",
        "assignee_id": 0,
        "delegated_by_id": 0,
        "completed_on": null,
        "completed_by_id": null,
        "is_completed": false,
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "created_on": 1430164531,
        "created_by_id": 1,
        "updated_on": 1430164531,
        "name": "Subtask #1",
        "task_id": 1,
        "project_id": 1,
        "due_on": null
    }
}
Response: HTTP 200, application/json (Hide)
POST /comments/task/1

Payload:

1
2
3
{
    "body": "Comment body"
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
    "single": {
        "id": 1,
        "class": "Comment",
        "url_path": "\/comments\/1",
        "attachments": [],
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "parent_type": "Task",
        "parent_id": 1,
        "body": "Comment body",
        "body_formatted": "Comment body",
        "body_plain_text": "Comment body",
        "created_on": 1430164532,
        "created_by_id": 1,
        "updated_on": 1430164532,
        "updated_by_id": 1
    }
}

Now we'll upload a file:

Response: HTTP 200, application/json (Hide)
POST /upload-files

Files:

1
2
3
4
5
6
[
    [
        "ac.png",
        "image\/png"
    ]
]

Response:

1
2
3
4
5
6
7
8
9
[
    {
        "code": "uaPlmVk5sPa7zHoYOKJQoQRRB0LhGkCH1BSbl36D",
        "name": "ac.png",
        "mime_type": "image\/png",
        "size": 1927,
        "thumbnail_url": "http:\/\/feather.dev\/proxy.php?proxy=forward_thumbnail&module=system&v=current&b=DEV&context=upload&name=2015-04%2FtwXPqC6rQPCfPlHW0SHEhOVGtzhwVbPhbCWr5QIK&original_file_name=ac.png&width=--WIDTH--&height=--HEIGHT--&ver=1927&scale=--SCALE--"
    }
]
Response: HTTP 200, application/json (Hide)
POST /projects/1/files

Payload:

1
2
3
{
    "uploaded_file_code": "uaPlmVk5sPa7zHoYOKJQoQRRB0LhGkCH1BSbl36D"
}

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
{
    "single": {
        "id": 1,
        "class": "File",
        "url_path": "\/projects\/1\/files\/1",
        "name": "ac.png",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "project_id": 1,
        "is_hidden_from_clients": false,
        "mime_type": "image\/png",
        "size": 1927,
        "md5": null,
        "download_url": "http:\/\/feather.dev\/projects\/1\/files\/1\/download",
        "thumbnail_url": "http:\/\/feather.dev\/proxy.php?proxy=forward_thumbnail&module=system&v=current&b=DEV&context=upload&name=2015-04%2FtwXPqC6rQPCfPlHW0SHEhOVGtzhwVbPhbCWr5QIK&original_file_name=ac.png&width=--WIDTH--&height=--HEIGHT--&ver=1927&scale=--SCALE--",
        "file_meta": {
            "kind": "image",
            "dimensions": {
                "width": 50,
                "height": 50
            }
        },
        "created_on": 1430164532,
        "created_by_id": 1,
        "updated_on": 1430164532,
        "updated_by_id": 1
    }
}

Finally, lets track some time, and make a correction:

Response: HTTP 200, application/json (Hide)
POST /projects/1/time-records

Payload:

1
2
3
4
5
6
{
    "value": "3:30",
    "user_id": 1,
    "job_type_id": 1,
    "record_date": "2014-05-14"
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "single": {
        "id": 1,
        "class": "TimeRecord",
        "url_path": "\/projects\/1\/time-records\/1",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "billable_status": 1,
        "value": 3.5,
        "record_date": 1400025600,
        "summary": null,
        "user_id": 1,
        "parent_type": "Project",
        "parent_id": 1,
        "created_on": 1430164532,
        "created_by_id": 1,
        "updated_on": 1430164532,
        "updated_by_id": 1,
        "job_type_id": 1
    }
}
Response: HTTP 200, application/json (Hide)
PUT /projects/1/time-records/1

Payload:

1
2
3
{
    "value": 4
}

Response:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
    "single": {
        "id": 1,
        "class": "TimeRecord",
        "url_path": "\/projects\/1\/time-records\/1",
        "is_trashed": false,
        "trashed_on": null,
        "trashed_by_id": 0,
        "billable_status": 1,
        "value": 4,
        "record_date": 1400025600,
        "summary": null,
        "user_id": 1,
        "parent_type": "Project",
        "parent_id": 1,
        "created_on": 1430164532,
        "created_by_id": 1,
        "updated_on": 1430164533,
        "updated_by_id": 1,
        "job_type_id": 1
    }
}

Lets check What's New (Timeline) page for the project. It should return all activities in reverse chronological order, plus all related objects:

Response: HTTP 200, application/json (Hide)
GET /projects/1/whats-new

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
{
    "activity_logs": [
        {
            "id": 12,
            "class": "TrackingObjectUpdatedActivityLog",
            "url_path": "\/activity-logs\/12",
            "parent_type": "TimeRecord",
            "parent_id": 1,
            "created_on": 1430164533,
            "created_by_id": 1,
            "updated_on": 1430164533,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/hidden-from-clients\/time-records\/1",
            "modifications": {
                "value": [
                    3.5,
                    4
                ]
            }
        },
        {
            "id": 11,
            "class": "TrackingObjectCreatedActivityLog",
            "url_path": "\/activity-logs\/11",
            "parent_type": "TimeRecord",
            "parent_id": 1,
            "created_on": 1430164532,
            "created_by_id": 1,
            "updated_on": 1430164532,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/hidden-from-clients\/time-records\/1"
        },
        {
            "id": 10,
            "class": "InstanceCreatedActivityLog",
            "url_path": "\/activity-logs\/10",
            "parent_type": "File",
            "parent_id": 1,
            "created_on": 1430164532,
            "created_by_id": 1,
            "updated_on": 1430164532,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/files\/1"
        },
        {
            "id": 9,
            "class": "CommentCreatedActivityLog",
            "url_path": "\/activity-logs\/9",
            "parent_type": "Task",
            "parent_id": 1,
            "created_on": 1430164532,
            "created_by_id": 1,
            "updated_on": 1430164532,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/tasks\/1",
            "comment_id": 1
        },
        {
            "id": 8,
            "class": "SubtaskCreatedActivityLog",
            "url_path": "\/activity-logs\/8",
            "parent_type": "Task",
            "parent_id": 1,
            "created_on": 1430164531,
            "created_by_id": 1,
            "updated_on": 1430164531,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/tasks\/1",
            "subtask_id": 1
        },
        {
            "id": 7,
            "class": "InstanceUpdatedActivityLog",
            "url_path": "\/activity-logs\/7",
            "parent_type": "Task",
            "parent_id": 1,
            "created_on": 1430164531,
            "created_by_id": 1,
            "updated_on": 1430164531,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/tasks\/1",
            "modifications": {
                "assignee_id": [
                    0,
                    2
                ]
            }
        },
        {
            "id": 6,
            "class": "InstanceCreatedActivityLog",
            "url_path": "\/activity-logs\/6",
            "parent_type": "Task",
            "parent_id": 1,
            "created_on": 1430164531,
            "created_by_id": 1,
            "updated_on": 1430164531,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/tasks\/1"
        },
        {
            "id": 5,
            "class": "InstanceCreatedActivityLog",
            "url_path": "\/activity-logs\/5",
            "parent_type": "TaskList",
            "parent_id": 2,
            "created_on": 1430164531,
            "created_by_id": 1,
            "updated_on": 1430164531,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/task-lists\/2"
        },
        {
            "id": 4,
            "class": "InstanceCreatedActivityLog",
            "url_path": "\/activity-logs\/4",
            "parent_type": "TaskList",
            "parent_id": 1,
            "created_on": 1430164530,
            "created_by_id": 1,
            "updated_on": 1430164530,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1\/visible-to-clients\/task-lists\/1"
        },
        {
            "id": 3,
            "class": "InstanceUpdatedActivityLog",
            "url_path": "\/activity-logs\/3",
            "parent_type": "Project",
            "parent_id": 1,
            "created_on": 1430164530,
            "created_by_id": 1,
            "updated_on": 1430164530,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1",
            "modifications": {
                "name": [
                    "New projct",
                    "New Project"
                ]
            }
        },
        {
            "id": 2,
            "class": "InstanceCreatedActivityLog",
            "url_path": "\/activity-logs\/2",
            "parent_type": "Project",
            "parent_id": 1,
            "created_on": 1430164530,
            "created_by_id": 1,
            "updated_on": 1430164530,
            "created_by_name": "ilija.studen",
            "created_by_email": "ilija.studen@activecollab.com",
            "parent_path": "projects\/1"
        }
    ],
    "related": {
        "TimeRecord": {
            "1": {
                "id": 1,
                "class": "TimeRecord",
                "url_path": "\/projects\/1\/time-records\/1",
                "is_trashed": false,
                "trashed_on": null,
                "trashed_by_id": 0,
                "billable_status": 1,
                "value": 4,
                "record_date": 1400025600,
                "summary": null,
                "user_id": 1,
                "parent_type": "Project",
                "parent_id": 1,
                "created_on": 1430164532,
                "created_by_id": 1,
                "updated_on": 1430164533,
                "updated_by_id": 1,
                "job_type_id": 1
            }
        },
        "Project": {
            "1": {
                "id": 1,
                "class": "Project",
                "url_path": "\/projects\/1",
                "name": "New 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": 1430164530,
                "created_by_id": 1,
                "updated_on": 1430164533,
                "updated_by_id": 1,
                "body": null,
                "body_formatted": "",
                "company_id": 2,
                "leader_id": 1,
                "currency_id": 2,
                "template_id": 0,
                "based_on_type": null,
                "based_on_id": null,
                "email": "notifications+m2p-nkgi5Pg@mail.manageprojects.com",
                "is_tracking_enabled": true,
                "is_client_reporting_enabled": false,
                "budget": null,
                "count_tasks": 1,
                "count_discussions": 0,
                "count_files": 1,
                "count_notes": 0
            }
        },
        "File": {
            "1": {
                "id": 1,
                "class": "File",
                "url_path": "\/projects\/1\/files\/1",
                "name": "ac.png",
                "is_trashed": false,
                "trashed_on": null,
                "trashed_by_id": 0,
                "project_id": 1,
                "is_hidden_from_clients": false,
                "mime_type": "image\/png",
                "size": 1927,
                "md5": null,
                "download_url": "http:\/\/feather.dev\/projects\/1\/files\/1\/download",
                "thumbnail_url": "http:\/\/feather.dev\/proxy.php?proxy=forward_thumbnail&module=system&v=current&b=DEV&context=upload&name=2015-04%2FtwXPqC6rQPCfPlHW0SHEhOVGtzhwVbPhbCWr5QIK&original_file_name=ac.png&width=--WIDTH--&height=--HEIGHT--&ver=1927&scale=--SCALE--",
                "file_meta": {
                    "kind": "image",
                    "dimensions": {
                        "width": 50,
                        "height": 50
                    }
                },
                "created_on": 1430164532,
                "created_by_id": 1,
                "updated_on": 1430164532,
                "updated_by_id": 1
            }
        },
        "Task": {
            "1": {
                "id": 1,
                "class": "Task",
                "url_path": "\/projects\/1\/tasks\/1",
                "name": "Test Task",
                "assignee_id": 2,
                "delegated_by_id": 1,
                "completed_on": null,
                "completed_by_id": null,
                "is_completed": false,
                "comments_count": "1",
                "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": 1430164531,
                "created_by_id": 1,
                "updated_on": 1430164532,
                "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
            }
        },
        "Comment": {
            "1": {
                "id": 1,
                "class": "Comment",
                "url_path": "\/comments\/1",
                "attachments": [],
                "is_trashed": false,
                "trashed_on": null,
                "trashed_by_id": 0,
                "parent_type": "Task",
                "parent_id": 1,
                "body": "Comment body",
                "body_formatted": "Comment body",
                "body_plain_text": "Comment body",
                "created_on": 1430164532,
                "created_by_id": 1,
                "updated_on": 1430164532,
                "updated_by_id": 1
            }
        },
        "Subtask": {
            "1": {
                "id": 1,
                "class": "Subtask",
                "url_path": "\/projects\/1\/tasks\/1\/subtasks\/1",
                "assignee_id": 0,
                "delegated_by_id": 0,
                "completed_on": null,
                "completed_by_id": null,
                "is_completed": false,
                "is_trashed": false,
                "trashed_on": null,
                "trashed_by_id": 0,
                "created_on": 1430164531,
                "created_by_id": 1,
                "updated_on": 1430164531,
                "name": "Subtask #1",
                "task_id": 1,
                "project_id": 1,
                "due_on": null
            }
        },
        "User": {
            "2": {
                "id": 2,
                "class": "Member",
                "url_path": "\/users\/2",
                "is_archived": false,
                "is_trashed": false,
                "trashed_on": null,
                "trashed_by_id": 0,
                "created_on": 1430164530,
                "created_by_id": 1,
                "updated_on": 1430164530,
                "updated_by_id": 1,
                "language_id": 0,
                "first_name": "Member",
                "last_name": null,
                "display_name": "member",
                "short_display_name": "member",
                "email": "member@activecollab.com",
                "additional_email_addresses": [],
                "is_pending_activation": false,
                "avatar_url": "http:\/\/feather.dev\/proxy.php?proxy=avatar&module=system&v=current&b=DEV&user_id=2&size=--SIZE--&timestamp=1430164530",
                "custom_permissions": [],
                "company_id": 1,
                "title": null,
                "phone": null,
                "im_type": null,
                "im_handle": null,
                "note": null
            }
        },
        "TaskList": {
            "1": {
                "id": 1,
                "class": "TaskList",
                "url_path": "\/projects\/1\/task-lists\/1",
                "name": "First task list",
                "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": 1430164530,
                "created_by_id": 1,
                "updated_on": 1430164530,
                "updated_by_id": 1,
                "start_on": null,
                "due_on": null,
                "position": 1,
                "open_tasks": 1,
                "completed_tasks": 0
            },
            "2": {
                "id": 2,
                "class": "TaskList",
                "url_path": "\/projects\/1\/task-lists\/2",
                "name": "Second task list",
                "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": 1430164531,
                "created_by_id": 1,
                "updated_on": 1430164531,
                "updated_by_id": 1,
                "start_on": null,
                "due_on": null,
                "position": 2,
                "open_tasks": 0,
                "completed_tasks": 0
            }
        }
    }
}