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
keyGuid✅The TaskItemId of the task.

Create a new task

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

To create a task in a specific Kanban column, include TaskItemStatusId in the request body. Use CardPositionNumber to control the position within that column.


Update a task

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

Delete a task

DELETE/odata/Task({key})
ParameterTypeRequiredDescription
keyGuid✅The 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
Bodyobject✅JSON object with an array of task data.

Delete multiple tasks at once

POST/odata/Task/BatchDelete
ParameterTypeRequiredDescription
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId of the task to copy.
Bodyobject✅JSON 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
keyguid✅The TaskItemNoteId.

Add a comment to the task

POST/odata/Task({key})/AddNote
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
noteRelationIdGuid✅The 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
keyGuid✅The TaskItemId.

Add a contributor

POST/odata/Task({key})/AddContributor
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.

Start the stopwatch

POST/odata/Task({key})/StartStopwatch
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.

Pause the stopwatch

POST/odata/Task({key})/PauseStopwatch
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.

Stop the stopwatch

POST/odata/Task({key})/StopStopwatch
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.
Stopwatch Workflow

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


Documents​

Link a document to the task

POST/odata/Task({key})/AddDocumentToTaskItem
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.

Enable calendar sync for the task

POST/odata/Task({key})/EnableCalendarSync
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.

Disable calendar sync for the task

POST/odata/Task({key})/DisableCalendarSync
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.

Notifications / Followers​

Retrieve all notification subscribers of the task

GET/odata/Task({key})/GetNotificationFollowerContacts()
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.

Add notification subscribers to the task

POST/odata/Task({key})/AddNotificationFollowers
ParameterTypeRequiredDescription
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyGuid✅The TaskItemId.
Bodyobject✅JSON 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
keyguid✅The 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
keyguid✅The TaskItemStatusId.
BodyDelta<ApiTaskStatus>✅JSON object with the fields to update.

Delete a task status

DELETE/odata/TaskStatus({key})
ParameterTypeRequiredDescription
keyguid✅The 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
keyguid✅The 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
keyguid✅The TaskItemTemplateId.
BodyDelta<ApiTaskItemTemplate>✅JSON object with the fields to update.

Delete a task template

DELETE/odata/TaskItemTemplate({key})
ParameterTypeRequiredDescription
keyguid✅The 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
Bodyobject✅JSON 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
keyguid✅The TaskItemTemplateId.
Bodyobject✅JSON object with the following fields:

ProjectId (guid, required) — The target project.

Creates tasks in the specified project based on the template.

Prerequisite

Loading a template requires the target project's folder structure to be initialized. If the document store cannot be created automatically, the request fails — initialize the folder structure in the project's Documents tab, then retry.

tip

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


Download a template

GET/odata/TaskItemTemplate({key})/DownloadTemplate()
ParameterTypeRequiredDescription
keyguid✅The 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.