Skip to main content

Task-groups

GET Gets tasks in groups

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/groups/{group}

Gets tasks in groups depending on name

curl  https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/groups/{group} \
-H "Content-Type: application/json" \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
groupstringtruegroup name

Query

nametyperequireddescription
source[]stringfalsefilter by sources
prioritystringfalsefilter by priority
status_id[]integerfalsefilter by statuses
project_id[]integerfalsefilter by project IDs
client_id[]integerfalsefilter by client IDs
assignee_user_id[]integerfalsefilter by assignee user IDs
tag_id[]integerfalsefilter by tag IDs
team_id[]integerfalsefilter by team IDs (resolves to member user IDs)
user_tag_id[]integerfalsefilter by assignee member-tag IDs (resolves to member user IDs)
group_id[]integerfalsefilter by group IDs
creator_id[]integerfalsefilter in by creator IDs
namestringfalsefilter in by task name
start_datestringfalsefilter tasks overlapping date range (start). Used with end_date to find tasks where task.start_date <= end_date AND task.end_date >= start_date
end_datestringfalsefilter tasks overlapping date range (end). Used with start_date to find tasks where task.start_date <= end_date AND task.end_date >= start_date
start_date_fromstringfalse[LEGACY] use start_date instead
start_date_tostringfalse[LEGACY] use start_date instead
end_date_fromstringfalse[LEGACY] use end_date instead
end_date_tostringfalse[LEGACY] use end_date instead
privatebooleanfalsefilter by project privacy (true for private, false for public)
exclude_emptybooleanfalsefilter groups with no tasks
include_unassignedbooleanfalseappend the id=0 no-assignee group without restricting results to unassigned tasks, available for /users only. The group accompanies every non-empty page (it is outside the user pagination), so paginating clients must dedupe it
include_unmaterializedbooleanfalseinclude projected tasks from unmaterialized recurring periods; available for /users only; requires start_date and end_date
include_assigneesbooleanfalseinclude the unified user and team assignees list on each task
min_daysintegerfalsefilters tasks with a minimum number of days. based on start_date and end_date
include_draftsbooleanfalseinclude tasks belonging to draft projects (default false hides them; requires view_draft_projects permission)
cf_filter[]stringfalsefilter by the task's own custom field values. Repeatable; each entry is 'fieldID:value1,value2' (values within an entry are OR, separate entries AND). Trailing colon 'fieldID:' selects the no-value bucket (select/multi_select only).
pageintegerfalsepage number
per_pageintegerfalseresults per page
order_by[]stringfalseorder by

Response

200

Tasks grouped by type

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data
NameTypeDescription
idintegerThe ID of one of the entities: projects/users/tags determined by Type.
namestringDisplay name of the group entity. Null for the users dimension, where the consumer resolves the name from ID via Accounts.
tasksArray of objectThe tasks that belong to the group.
typestringType determines what kind of group this is, and what table to look for based on ID. Valid values: projects, users, tags.
tasks
NameTypeDescription
allocation_unitstringHow the task's estimate allocations express their value. Valid values: percent, flat.
assignee_user_idsArray of integer-
assigneesArray of objectAssignees is the read-only unified user/team assignment list, only populated when include_assignees is requested. Mirrors the task endpoint.
clientobject-
colorstring-
created_atstringCreatedAt is omitted for virtual entries.
end_datestringWhen a task ends
estimate_typestringType of EstimatedMins. Total is spread throughout the task date range, and daily is a per day estimate. Valid values: daily, total.
estimated_minsintegerEstimated minutes of the task
idintegerThe task's ID
maskedbooleanMasked indicates the task belongs to a private project the user doesn't have access to. When true, sensitive fields (Name, Client) are nulled.
namestringName of the task
parent_taskobject-
period_endstringPeriodEnd is the recurring project period's last day.
period_startstringPeriodStart is the recurring project period's first day.
privateboolean-
projectobject-
project_idintegerProject ID fo the task
projection_revisionstringProjectionRevision identifies the projected period version.
sourcestring-
source_template_task_idintegerSourceTemplateTaskID identifies the task template used for this entry.
start_datestringWhen a task starts
status_idintegerStatus ID of the task
template_project_idintegerTemplateProjectID identifies the recurring project template.
virtualbooleanVirtual indicates the entry is an unmaterialized recurring task.
weightintegerThe weight of a task in the timeline. This is not unique, and one or more tasks may have the same weight as long as their dates do not conflict.
assignees
NameTypeDescription
idinteger-
typestringValid values: user, team.
client
NameTypeDescription
idinteger-
namestring-
parent_task
NameTypeDescription
idinteger-
namestring-
project
NameTypeDescription
archived_atstring-
clientobject-
colorstring-
custom_field_valuesArray of objectCustomFieldValues are the parent project's CF values, hydrated by callers that surface them (currently the task list, via task.service.hydrateTaskProjectCustomFieldValues which routes through customfield.Service.GetFieldsByIDs and respects the PermissionViewWorkspaceProjectCustomFields gate). Producers that don't hydrate (e.g. timeentry) leave the slice empty; omitempty hides it on those responses.
draftboolean-
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
client
NameTypeDescription
idinteger-
namestring-
custom_field_values
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
rate
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-

400

Invalid request

403

Insufficient permissions

500

Internal Server Error

PATCH Updates task groups and their entries' weights/parent group

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/groups/{group}

Updates task groups and their entries' weights/parent group. On the users dimension a move with an explicit null target_group_id lands the task in the no-assignee bucket (the id=0 group on reads); OMITTING the property on a move is rejected, so a forgotten field can never read as an unassign. The bucket move enforces its invariant regardless of the source. The dates follow the move, direct user assignees and team assignments are cleared (a no-op for a task already inside the bucket, so repositions work the same way). The task takes the given weight in the bucket, which persists ordering like any other group.

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/groups/{group} \
-H "Content-Type: application/json" \
-d '[\{"end_date":"string","id":"integer","op":"string","source_group_id":"integer","start_date":"string","target_group_id":"integer","weight":"integer"\}]' \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
groupstringtruegroup type

Body

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
end_datestring-
idinteger-
opstringValid values: move, remove.
source_group_idintegernull
start_datestring-
target_group_idintegernull
weightinteger-

Response

200

OK

400

Invalid request

403

Insufficient permissions

500

Internal Server Error

© 2026 Toggl. All rights reserved.