Skip to main content

Tasks

The Task entity (internally ApiTask / TaskItem) represents tasks within a project. Via the OData API, you can create, update, delete tasks and use batch processing, contributors, stopwatch features, and calendar synchronization.

OData Endpoint Base

All endpoints use the base path /odata/Task. For the dynamic list view including custom fields, /odata/DynamicTaskItem is available.


Data Model

PropertyTypeDescription
TaskItemIdGuid (UUID)Unique identifier of the task (primary key).
Namestring?Name of the task.
TaskItemStatusIdGuid?Status of the task (foreign key to status definition).
ContactIdGuid?Assigned contact (responsible person).
ProjectIdGuid?Associated project.
PlanningIdGuid?Linked planning element.
GroupIdGuidTask group.
StartDateTimeDateTimeOffset?Start date and time.
EndDateTimeDateTimeOffset?End date and time.
IsDonebooleanIndicates whether the task is completed.
DoneDateDateTimeOffset?Completion date (read-only, automatically set when IsDone changes).
WorkAmountdoubleWork effort (hours).
CustomColorint32?Custom color (as integer value).
CardPositionNumberint32Position on the Kanban board.
DescriptionHTMLstring?Task description as HTML.
IsBillablebooleanIndicates whether the task is billable.
Recurrenceint32Recurrence pattern. Values: 0 = No recurrence, 1 = Daily, 2 = Monday to Friday, 3 = Weekly, 4 = Monthly, 5 = Yearly, 6 = Biweekly, 7 = Quarterly.
AssignedByContactIdGuid?Contact who assigned the task.
CreatedByContactIdGuidContact who created the task.
ContactDisplayNamestring?Display name of the assigned contact (read-only).
ContactImageIdGuid?Image ID of the assigned contact (read-only).
RiskIdGuid?Linked risk.
RiskNamestring?Name of the linked risk (read-only).
ChecklistItemsCountint32Total number of checklist items.
CheckListItemsDoneCountint32Number of completed checklist items.
CheckListItemsOpenCountint32Number of open checklist items.
ContributorsCountint32Number of contributors.
ContributorsWorkAmountdoubleWork effort of all contributors.
WorkAmountOwnerdoubleWork effort of the responsible person.

Endpoints

CRUD Operations

Retrieve all tasks

GET/odata/Task

Supports OData query parameters.


Retrieve a single task by its ID

GET/odata/Task({key})
ParameterTypeRequiredDescription
keyGuidThe TaskItemId of the task.

Create a new task

POST/odata/Task
ParameterTypeRequiredDescription
BodyDelta<ApiTask>JSON object with the task properties.

Update a task

PATCH/odata/Task({key})
ParameterTypeRequiredDescription
keyGuidThe TaskItemId of the task.
BodyDelta<ApiTask>JSON object with the fields to update.

Delete a task

DELETE/odata/Task({key})
ParameterTypeRequiredDescription
keyGuidThe TaskItemId of the task to delete.
warning

Deleting a task cannot be undone.


Batch Processing

Create multiple tasks at once

POST/odata/Task/BatchInsert
ParameterTypeRequiredDescription
BodyobjectJSON object with an array of task data.

Delete multiple tasks at once

POST/odata/Task/BatchDelete
ParameterTypeRequiredDescription
BodyobjectJSON object with an array of TaskItemIds.
warning

Batch deletion permanently removes all specified tasks. This action cannot be undone.

Performance

Batch processing is significantly more efficient than creating or deleting tasks individually. Use BatchInsert and BatchDelete when working with large volumes.


Task Management

Move a task within the Kanban

POST/odata/Task({key})/MoveTaskItem
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

taskItemStatusId (Guid, required) — The ID of the target TaskItemStatus.
afterTaskItemId (Guid?, optional) — The ID of the task to place this one after. If omitted or null, the default position is used.

Update a project-defined field of the task

POST/odata/Task({key})/UpdateProjectDefinedField
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

fieldName (string, required) — The name of the project-defined field (e.g. "pf_dt0_xxxxxxxx_SomeField").
value (string?, optional) — The value to set, or null to clear.

Duplicate a task

POST/odata/Task({key})/Copy
ParameterTypeRequiredDescription
keyGuidThe TaskItemId of the task to copy.
BodyobjectJSON object with the following fields:

projectId (Guid?, optional) — Target project ID. If omitted or null, the copy remains in the same project as the source task.

Comments

The TaskItemNote entity is the underlying data model for task comments. Each comment is stored as a TaskItemNote and linked to a specific task.

PropertyTypeDescription
TaskItemNoteIdguidUnique ID of the note.
TaskItemIdguidID of the associated task.
NotestringNote text (plain text).
NoteHtmlstringNote text (HTML-formatted).
ShortDescriptionstringShort description.
CreateDateTimeDateTimeOffsetCreation timestamp.
CreatedByContactIdguidID of the creator.

Retrieve all task comments across all tasks in the system

GET/odata/TaskItemNote

Supports OData query parameters.

Filter by a task:

GET /odata/TaskItemNote?$filter=TaskItemId eq xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&$orderby=CreateDateTime desc

Retrieve a task comment by ID

GET/odata/TaskItemNote({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemNoteId.

Add a comment to the task

POST/odata/Task({key})/AddNote
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

htmlText (string, required) — HTML-formatted comment content.
notificationContactIds (Guid[], required) — Contact IDs to be notified (can be empty []).

Delete a comment from the task

GET/odata/Task/DeleteNote(noteRelationId={noteRelationId})
ParameterTypeRequiredDescription
noteRelationIdGuidThe ID of the comment relation.
warning

Deleting a comment cannot be undone.


Contributors

Retrieve all contributors of a task

GET/odata/Task({key})/GetContributors()
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Add a contributor

POST/odata/Task({key})/AddContributor
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

contactId (Guid, required) — The contact to add.
workAmount (double, optional) — Work effort in hours.
isDone (boolean, optional) — Completion status.

Update a contributor

POST/odata/Task({key})/UpdateContributor
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

id (Guid, required) — The ID of the contributor.
workAmount (double, optional) — Work effort in hours.
isDone (boolean, optional) — Completion status.

Remove a contributor

POST/odata/Task({key})/RemoveContributor
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

id (Guid, required) — The ID of the contributor to remove.

Stopwatch

Retrieve the current stopwatch status of a task

GET/odata/Task({key})/GetStopwatch()
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Start the stopwatch

POST/odata/Task({key})/StartStopwatch
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Pause the stopwatch

POST/odata/Task({key})/PauseStopwatch
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Stop the stopwatch

POST/odata/Task({key})/StopStopwatch
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
Stopwatch Workflow

The typical workflow is: StartStopwatchPauseStopwatch (optional) → StopStopwatch. When stopped, a time entry is automatically created.


Documents

Link a document to the task

POST/odata/Task({key})/AddDocumentToTaskItem
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

documentIds (Guid[], required) — Array of document IDs to link.

Remove a document from the task

POST/odata/Task({key})/RemoveDocumentFromTaskItem
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

documentId (Guid, required) — The document ID whose link should be removed.

Relations

Add a relation to the task

POST/odata/Task({key})/AddRelation
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

itemId (Guid, required) — The ID of the element to link.

Remove a relation from the task

POST/odata/Task({key})/RemoveRelation
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

itemId (Guid, required) — The ID of the element to remove.

Calendar Synchronization

Retrieve the calendar sync status of the task

GET/odata/Task({key})/GetCalendarSyncStatus()
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Enable calendar sync for the task

POST/odata/Task({key})/EnableCalendarSync
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Disable calendar sync for the task

POST/odata/Task({key})/DisableCalendarSync
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Notifications / Followers

Retrieve all notification subscribers of the task

GET/odata/Task({key})/GetNotificationFollowerContacts()
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.

Add notification subscribers to the task

POST/odata/Task({key})/AddNotificationFollowers
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

contactIds (Guid[], required) — Contact IDs to add as subscribers.
projectId (Guid?, optional) — The project context.

Remove a notification subscriber

POST/odata/Task({key})/RemoveNotificationFollower
ParameterTypeRequiredDescription
keyGuidThe TaskItemId.
BodyobjectJSON object with the following fields:

contactId (Guid, required) — The contact ID of the subscriber to remove.

TaskStatus

The TaskStatus entity defines the Kanban task status of a project. Each status can have a color and a sort position.

info

TaskStatus entries are project-specific. Each project can define its own set of task statuses.

Data Model

PropertyTypeDescription
TaskItemStatusIdguidUnique ID of the task status.
NamestringName of the status.
ProjectIdguidID of the associated project.
OrdinalPositionintSort position.
Colorint?Color value (as integer).

Endpoints

Retrieve all task statuses

GET/odata/TaskStatus

To filter by the statuses of a project in the order of the Kanban board:

GET /odata/TaskStatus?$filter=ProjectId eq xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&$orderby=OrdinalPosition

Retrieve a task status by ID

GET/odata/TaskStatus({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemStatusId.

Create a new task status

POST/odata/TaskStatus
ParameterTypeRequiredDescription
BodyDelta<ApiTaskStatus>JSON object with the properties from the data model.

Update a task status

PATCH/odata/TaskStatus({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemStatusId.
BodyDelta<ApiTaskStatus>JSON object with the fields to update.

Delete a task status

DELETE/odata/TaskStatus({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemStatusId.
warning

Deleting a task status affects all tasks in the project that use it. This action cannot be undone.

Returns 204 No Content on success.


TaskItemTemplate

The TaskItemTemplate entity allows saving and loading task templates. Templates can capture task structures from existing projects and load them into other projects.

Data Model

PropertyTypeDescription
TaskItemTemplateIdguidUnique ID of the template.
NamestringName of the template.

Endpoints

CRUD Operations

Retrieve all task templates

GET/odata/TaskItemTemplate

Retrieve a task template by ID

GET/odata/TaskItemTemplate({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemTemplateId.

Create a new task template

POST/odata/TaskItemTemplate
ParameterTypeRequiredDescription
BodyDelta<ApiTaskItemTemplate>JSON object with the properties from the data model.

Update a task template

PATCH/odata/TaskItemTemplate({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemTemplateId.
BodyDelta<ApiTaskItemTemplate>JSON object with the fields to update.

Delete a task template

DELETE/odata/TaskItemTemplate({key})
ParameterTypeRequiredDescription
keyguidThe TaskItemTemplateId.
warning

Deleting a task template cannot be undone.

Returns 204 No Content on success.

Save a template from the tasks of a project

POST/odata/TaskItemTemplate/SaveTemplateForProject
ParameterTypeRequiredDescription
BodyobjectJSON object with the following fields:

ProjectId (guid, required) — The project whose task structure should be saved.
Name (string, required) — Name of the new template.

Saves the tasks of an existing project as a reusable template.


Load a template into a project

POST/odata/TaskItemTemplate({key})/LoadTemplateForProject
ParameterTypeRequiredDescription
keyguidThe TaskItemTemplateId.
BodyobjectJSON object with the following fields:

ProjectId (guid, required) — The target project.

Creates tasks in the specified project based on the template.

tip

When loading a template, the tasks are transferred into the target project.


Download a template

GET/odata/TaskItemTemplate({key})/DownloadTemplate()
ParameterTypeRequiredDescription
keyguidThe TaskItemTemplateId.

Returns a file with content type application/xml and the filename {TemplateName}.json.


DynamicTaskItem

The /odata/DynamicTaskItem endpoint provides a read-only, flattened view that merges data from task, project, planning, portfolio, and permissions. All properties are prefixed (e.g. TaskItem_Name, Project_Name, Planning_DisplayName). Custom fields follow the pattern CF_<FieldName>.

Retrieve flattened task list with project, planning, and permission data

GET/odata/DynamicTaskItem
Read-Only Access

DynamicTaskItem supports GET requests only. To create or edit, use the regular /odata/Task endpoints.


OData Query Examples

Retrieve open tasks of a project

GET /odata/Task?$filter=ProjectId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' and IsDone eq false

Tasks of a specific contact

GET /odata/Task?$filter=ContactId eq 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

Overdue tasks

GET /odata/Task?$filter=EndDateTime lt 2025-01-01T00:00:00Z and IsDone eq false

Create a task

POST /odata/Task
Content-Type: application/json

{
"Name": "Test API integration",
"ProjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ContactId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"StartDateTime": "2025-02-01T09:00:00Z",
"EndDateTime": "2025-02-15T17:00:00Z",
"WorkAmount": 16.0
}

Mark a task as done

PATCH /odata/Task('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx')
Content-Type: application/json

{
"IsDone": true
}

Create multiple tasks at once

POST /odata/Task/BatchInsert
Content-Type: application/json

{
"items": [
{ "Name": "Task 1", "ProjectId": "..." },
{ "Name": "Task 2", "ProjectId": "..." }
]
}
tip

Combine $filter with $select to minimize the payload size. For tasks, filtering by ProjectId and IsDone is the most common pattern.