Tasks
The Task entity represents work items within a project. Tasks can be organized on Kanban boards or in list views, assigned to contacts, tracked with stopwatches, and linked to documents and other entities.
To access custom fields on tasks, query the DynamicTaskItem endpoint. It returns all standard properties plus any user-defined fields.
Data Model
| Property | Type | Description |
|---|---|---|
TaskItemId | guid | Unique identifier of the task. |
Name | string | Display name / title of the task. |
TaskItemStatusId | guid? | ID of the task status (e.g., Open, In Progress, Done). |
ContactId | guid? | ID of the contact the task is assigned to. |
ProjectId | guid? | ID of the project this task belongs to. |
PlanningId | guid? | ID of the linked planning element (work package). |
GroupId | guid? | ID of the task group (Kanban column / category). |
StartDateTime | datetime? | Scheduled start date and time. |
EndDateTime | datetime? | Scheduled end date and time. |
IsDone | bool | Whether the task is marked as completed. |
DoneDate | datetime? | Date and time when the task was completed. |
WorkAmount | double? | Total effort estimate in hours. |
CustomColor | string | Hex color code for visual highlighting (e.g., '#FF5733'). |
CardPositionNumber | int? | Sort order position within a Kanban column. |
RiskName | string | Name of the associated risk. |
RiskId | guid? | ID of the associated risk entity. |
AssignedByContactId | guid? | ID of the contact who assigned this task. |
CreatedByContactId | guid? | ID of the contact who created this task. |
ContactDisplayName | string | Display name of the assigned contact (read-only). |
ContactImageId | guid? | Image ID of the assigned contact (read-only). |
DescriptionHTML | string | HTML-formatted task description. |
Recurrence | string | Recurrence rule string (iCal RRULE format) if the task repeats. |
IsBillable | bool | Whether work on this task is billable. |
ChecklistItemsCount | int | Total number of checklist items (read-only). |
CheckListItemsDoneCount | int | Number of completed checklist items (read-only). |
CheckListItemsOpenCount | int | Number of open checklist items (read-only). |
ContributorsCount | int | Number of contributors assigned to this task (read-only). |
ContributorsWorkAmount | double? | Combined effort of all contributors in hours (read-only). |
WorkAmountOwner | double? | Effort assigned to the primary owner in hours. |
Endpoints
CRUD Operations
/odata/TaskList all tasks
Returns all tasks the authenticated user has access to. Supports OData query options.
/odata/Task({key})Get a single task by ID
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The unique task ID. |
/odata/TaskCreate a new task
{
"Name": "Design mockups",
"ProjectId": "project-guid",
"ContactId": "assignee-contact-guid",
"StartDateTime": "2025-04-01T09:00:00Z",
"EndDateTime": "2025-04-05T17:00:00Z",
"IsBillable": true
}
/odata/Task({key})Update an existing task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID to update. |
Send only the properties you want to change:
{
"IsDone": true,
"DoneDate": "2025-04-04T16:30:00Z"
}
/odata/Task({key})Delete a task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID to delete. |
/odata/Task/$countGet total number of tasks
Returns the count as a plain integer. Supports $filter.
Batch Operations
/odata/Task/BatchInsertCreate multiple tasks in a single request
{
"Tasks": [
{ "Name": "Task A", "ProjectId": "project-guid" },
{ "Name": "Task B", "ProjectId": "project-guid" }
]
}
Use batch operations to reduce round-trips when creating or deleting many tasks at once.
/odata/Task/BatchDeleteDelete multiple tasks in a single request
{
"TaskItemIds": ["task-id-1", "task-id-2", "task-id-3"]
}
Batch delete permanently removes all specified tasks. This action cannot be undone.
Task Management
/odata/Task({key})/MoveTaskItemMove a task to a different group or position
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID to move. |
{
"GroupId": "target-group-guid",
"CardPositionNumber": 2
}
/odata/Task({key})/UpdateProjectDefinedFieldUpdate a project-defined field on the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
/odata/Task({key})/CopyCreate a copy of the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The source task ID to copy. |
Returns the newly created task.
Notes
/odata/Task({key})/AddNoteAdd a note to the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"Text": "Waiting for design approval before proceeding."
}
/odata/Task/DeleteNote(noteRelationId={noteRelationId})Delete a note from a task
| Parameter | Type | Required | Description |
|---|---|---|---|
noteRelationId | guid | ✅ | The note relation ID to delete. |
Contributors
Contributors are additional contacts assigned to work on a task alongside the primary owner.
/odata/Task({key})/GetContributors()Get all contributors for a task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
/odata/Task({key})/AddContributorAdd a contributor to the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"ContactId": "contributor-contact-guid",
"WorkAmount": 8.0
}
/odata/Task({key})/UpdateContributorUpdate a contributor's details
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"ContactId": "contributor-contact-guid",
"WorkAmount": 12.0
}
/odata/Task({key})/RemoveContributorRemove a contributor from the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"ContactId": "contributor-contact-guid"
}
Stopwatch
The stopwatch feature allows time tracking directly from a task.
/odata/Task({key})/GetStopwatch()Get the current stopwatch state
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
Returns the current stopwatch status, elapsed time, and state (running, paused, stopped).
/odata/Task({key})/StartStopwatchStart the stopwatch
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
/odata/Task({key})/PauseStopwatchPause the stopwatch
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
/odata/Task({key})/StopStopwatchStop the stopwatch and create a time entry
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
Stopping the stopwatch automatically creates a time entry with the recorded duration.
Documents
/odata/Task({key})/AddDocumentToTaskItemLink a document to the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"DocumentId": "document-guid"
}
/odata/Task({key})/RemoveDocumentFromTaskItemRemove a document link from the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"DocumentId": "document-guid"
}
Relations
/odata/Task({key})/AddRelationAdd a relation to another entity
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"TargetId": "target-entity-guid",
"RelationType": "RelatedTo"
}
/odata/Task({key})/RemoveRelationRemove an existing relation
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"RelationId": "relation-guid"
}
Calendar Sync
Synchronize tasks with external calendar systems.
/odata/Task({key})/GetCalendarSyncStatus()Get the calendar sync status
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
/odata/Task({key})/EnableCalendarSyncEnable calendar synchronization for the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
/odata/Task({key})/DisableCalendarSyncDisable calendar synchronization for the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
Notification Followers
/odata/Task({key})/AddNotificationFollowersAdd notification followers to the task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"ContactIds": ["contact-id-1", "contact-id-2"]
}
/odata/Task({key})/RemoveNotificationFollowerRemove a notification follower
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
{
"ContactId": "contact-guid"
}
/odata/Task({key})/GetNotificationFollowerContacts()Get all notification followers for a task
| Parameter | Type | Required | Description |
|---|---|---|---|
key | guid | ✅ | The task ID. |
Custom Fields — DynamicTaskItem
Use the DynamicTaskItem endpoint to access tasks with custom fields:
GET /odata/DynamicTaskItem
GET /odata/DynamicTaskItem({key})
Custom field names follow the pattern CF_<FieldName>.
DynamicTaskItem only supports GET requests. To create or update tasks, use the regular /odata/Task endpoints.
OData Query Examples
Filter Tasks by Project
curl -X GET "https://{tenant}.inloox.app/odata/Task?\
$filter=ProjectId eq {project-guid}\
&$select=TaskItemId,Name,IsDone,ContactDisplayName\
&$orderby=CardPositionNumber asc" \
-H "Authorization: Bearer {token}"
Open Tasks Assigned to a Specific Contact
curl -X GET "https://{tenant}.inloox.app/odata/Task?\
$filter=ContactId eq {contact-guid} and IsDone eq false\
&$orderby=EndDateTime asc" \
-H "Authorization: Bearer {token}"
Paging
curl -X GET "https://{tenant}.inloox.app/odata/Task?\
$top=25&$skip=0&$orderby=Name asc" \
-H "Authorization: Bearer {token}"
C# Example
using System.Net.Http;
using System.Net.Http.Headers;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
// Get open tasks for a project
var response = await client.GetAsync(
"https://{tenant}.inloox.app/odata/Task?" +
$"$filter=ProjectId eq {projectId} and IsDone eq false" +
"&$select=TaskItemId,Name,ContactDisplayName,EndDateTime" +
"&$orderby=EndDateTime asc");
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
// Create a task
var payload = new StringContent(
"""
{
"Name": "Review documentation",
"ProjectId": "{project-guid}",
"ContactId": "{contact-guid}",
"IsBillable": true
}
""",
System.Text.Encoding.UTF8,
"application/json");
var createResponse = await client.PostAsync(
"https://{tenant}.inloox.app/odata/Task", payload);
Combine $filter with $select to minimize payload size. For tasks, filtering by ProjectId and IsDone is the most common pattern.