Skip to main content

Tasks

GET List tasks​

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

Returns a list of tasks based on the workspace ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
pageintegerfalsepage number
per_pageintegerfalseresults per page
with_entriesbooleanfalseinclude time entries
pinnedbooleanfalsefilter by pinned state
order_by[]stringfalseorder by. tag_ids and assignees order by the canonicalized (sorted) array, so tasks with the same set of tags or assignees cluster together regardless of storage order. Also accepts pcf_<id> / -pcf_<id> to sort tasks by the named custom field on the task's parent project, and cf_<id> / -cf_<id> to sort by the task's own custom field. Multi_select and users CF types use the same canonicalized-array semantics. sub_tasks_grouped orders top-level tasks by name (direction applies) with each task's subtasks directly after it in position order; it cannot be combined with other order_by values.
status_id[]integerfalsefilter in tasks by status' IDs
toggl_user_idintegerfalsefilter in tasks by user
namestringfalsefilter tasks by task name, project name, or client name
has_time_entriesbooleanfalsefilter tasks if it has time entries
has_time_blocksbooleanfalsefilter tasks if it has time blocks
has_datesbooleanfalsefilter tasks by date presence: true returns tasks with start_date or end_date, false returns tasks with both dates NULL
privatebooleanfalsefilter tasks by private state
archivedbooleanfalsefilter in/out archived tasks
include_project_completedbooleanfalseinclude tasks whose parent project is completed (default false hides them; tasks without a project are always returned)
include_draftsbooleanfalseinclude tasks belonging to draft projects (default false hides them; requires view_draft_projects permission; tasks without a project are always returned)
project_id[]integerfalsefilter by project ids. ?project_id= will include tasks with no project.
parent_task_id[]integerfalsefilter by parent task ids. ?parent_task_id= will include tasks with no parent.
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
active_by_datestringfalsefilter tasks active by a date (today_and_overdue preset): returns tasks that have at least one date and whose start_date is null or on or before the date; end_date is not upper-bounded so overdue tasks remain included
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
dates_overlap_startstringfalse[LEGACY] use start_date instead
dates_overlap_endstringfalse[LEGACY] use end_date instead
estimated_mins_minintegerfalsefilter by estimated mins min
estimated_mins_maxintegerfalsefilter by estimated mins max
source[]stringfalsefilter by sources
priority[]stringfalsefilter by priority
is_prioritybooleanfalsefilter by whether task is a user priority
state[]stringfalsefilter by state
timeblock_start_fromstringfalsefilter by a task's timeblock start date (from)
timeblock_start_untilstringfalsefilter by a task's timeblock start date (until)
time_block_id[]integerfalsefilter in tasks by timeblock' IDs
time_block_completedbooleanfalsefilter in tasks by completed timeblocks
team_id[]integerfalsefilter tasks by team IDs
assignee_team_id[]integerfalsefilter in tasks assigned to these teams, without expanding the teams to their members
assignee_user_id[]integerfalsefilter in tasks by assignee's user IDs
tag_id[]integerfalsefilter in tasks by tag IDs
recurringbooleanfalsefilter by recurring tasks
recurring_task_ids[]integerfalsefilter by recurring task ids
client_id[]integerfalsefilter by client ids. ?client_id= will include tasks with no client.
include_ratesbooleanfalseincludes the parent projects' rate data
include_assigneesbooleanfalseincludes the unified user and team assignees
include_parent_matchesbooleanfalsewhen true, the name filter also matches the parent task's name, returning subtasks whose parent matches
disable_aggregationsbooleanfalsewhen true, skips computing aggregations and parent task hydration for faster response
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). Predicate vocabulary mirrors the project list cf_filter.

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
totalinteger-
data​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
sub_task_done_countinteger-
sub_task_total_countinteger-
tag_idsArray of integer-
tagsArray of object-
time_block_completed_countinteger-
time_block_scheduled_completed_countinteger-
time_block_scheduled_total_countinteger-
time_block_total_countinteger-
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
parent​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

POST Create a new task​

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

Creates a new task with the provided details.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks \
-H "Content-Type: application/json" \
-d '\{"allocation_unit":"string","assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","custom_fields":\{\},"description":"string","end_date":"string","estimate_type":"string","estimated_mins":"integer","integration_ext_id":"integer","integration_source":"string","name":"string","notes":"string","parent_task_id":"integer","pinned":"boolean","position":"integer","priority":"string","priority_at":"string","private":"boolean","project_id":"integer","rollup_enabled":"boolean","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}],"team_assignee_ids":[\{\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
allocation_unitstringValid values: percent, flat.
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
colorstring-
custom_fieldsobject-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
integration_ext_idinteger-
integration_sourcestring-
namestring-
notesstring-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
project_idinteger-
rollup_enabledboolean-
rrulestringnull
start_datestring-
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

201​

Task created successfully

400​

Invalid request

500​

Internal Server Error

POST Creates tasks in bulk​

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

Creates tasks in bulk with the provided details.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/bulk \
-H "Content-Type: application/json" \
-d '\{"tasks":[\{"allocation_unit":"string","assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","custom_fields":\{\},"description":"string","end_date":"string","estimate_type":"string","estimated_mins":"integer","integration_ext_id":"integer","integration_source":"string","name":"string","notes":"string","parent_task_id":"integer","pinned":"boolean","position":"integer","priority":"string","priority_at":"string","private":"boolean","project_id":"integer","rollup_enabled":"boolean","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}],"team_assignee_ids":[\{\}]\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
tasksArray of object-
tasks​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
colorstring-
custom_fieldsobject-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
integration_ext_idinteger-
integration_sourcestring-
namestring-
notesstring-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
project_idinteger-
rollup_enabledboolean-
rrulestringnull
start_datestring-
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

201​

Tasks created successfully

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

DELETE Delete tasks by ID​

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

Deletes tasks by the provided IDs.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
ids[]integertruetask IDs
outbound_syncbooleanfalseConduct outbound sync or not

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

PATCH Partially update tasks in bulk​

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

Partially update existing tasks in bulk. position and after_task_id are mutually exclusive, and after_task_id may not name another task updated in the same request: items are applied in ascending task id and each anchor resolves against committed state.

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/bulk \
-H "Content-Type: application/json" \
-d '[\{"after_task_id":"integer","allocation_unit":"string","assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","custom_fields":\{\},"description":"string","end_date":"string","estimate_type":"string","estimated_mins":"integer","id":"integer","name":"string","notes":"string","outbound_sync":"boolean","parent_task_id":"integer","pinned":"boolean","position":"integer","priority":"string","priority_at":"string","private":"boolean","project_id":"integer","recurring_task_id":"integer","rollup_enabled":"boolean","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}],"team_assignee_ids":[\{\}]\}]'

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
after_task_idintegernull
allocation_unitstringnull
assignee_user_idsArray of integer-
auto_log_timebooleannull
billablebooleannull
colorstringnull
custom_fieldsobject-
descriptionstringnull
end_datestringnull
estimate_typestringValid values: daily, total.
estimated_minsintegernull
idinteger-
namestring-
notesstringnull
outbound_syncboolean-
parent_task_idintegernull
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstringnull
privateboolean-
project_idintegernull
recurring_task_idintegernull
rollup_enabledboolean-
rrulestringnull
start_datestringnull
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

POST Bulk archives tasks given their IDs​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/bulk/archive

Bulk archives tasks, and their children given their IDs

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/bulk/archive \
-H "Content-Type: application/json" \
-d '\{"task_ids":[\{\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
task_idsArray of integer-

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Task not found

500​

Internal Server Error

PUT Sync tasks by calendar range​

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

Deprecated: use POST /organizations/\{organization_id\}/workspaces/\{workspace_id\}/calendar/sync, which is identical. This path is retained only for clients that cannot be updated, and will be removed once its traffic reaches zero. Sync a list of tasks based on calendar events.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
date_fromstringtruefrom timestamp
date_tostringtrueto timestamp

Response​

200​

NameTypeDescription
changedinteger-
degraded_integrationsArray of integer-
time_blocks_completedinteger-
time_entries_createdinteger-
time_entries_materializedinteger-
time_entries_relinkedinteger-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

GET List recurring task instances​

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

Returns a list of tasks based on the workspace ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
pageintegerfalsepage number
per_pageintegerfalseresults per page
archivedbooleanfalsefilter in/out archived tasks
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
dates_overlap_startstringfalse[LEGACY] use start_date instead
dates_overlap_endstringfalse[LEGACY] use end_date instead
recurring_task_ids[]integerfalsefilter by recurring task ids
team_id[]integerfalsefilter recurring task instances by team IDs
assignee_team_id[]integerfalsefilter in recurring task instances assigned to these teams, without expanding the teams to their members
assignee_user_id[]integerfalsefilter recurring task instances by assignee's user IDs
tag_id[]integerfalsefilter in tasks by tag IDs
include_assigneesbooleanfalseincludes the unified user and team assignees

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

GET List tasks, streaming the response​

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

Returns a list of tasks based on the workspace ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
with_entriesbooleanfalseinclude time entries
pinnedbooleanfalsefilter by pinned state
order_by[]stringfalseorder by. tag_ids and assignees order by the canonicalized (sorted) array, so tasks with the same set of tags or assignees cluster together regardless of storage order. Also accepts pcf_<id> / -pcf_<id> to sort tasks by the named custom field on the task's parent project, and cf_<id> / -cf_<id> to sort by the task's own custom field. Multi_select and users CF types use the same canonicalized-array semantics. sub_tasks_grouped orders top-level tasks by name (direction applies) with each task's subtasks directly after it in position order; it cannot be combined with other order_by values.
status_id[]integerfalsefilter in tasks by their status' ID
toggl_user_idintegerfalsefilter in tasks by user
namestringfalsefilter tasks by task name, project name, or client name
include_parent_matchesbooleanfalsewhen true, the name filter also matches the parent task's name, returning subtasks whose parent matches
has_time_entriesbooleanfalsefilter tasks if it has time entries
has_time_blocksbooleanfalsefilter tasks if it has time blocks
has_datesbooleanfalsefilter tasks by date presence: true returns tasks with start_date or end_date, false returns tasks with both dates NULL
privatebooleanfalsefilter tasks by private state
archivedbooleanfalsefilter in/out archived tasks
include_project_completedbooleanfalseinclude tasks whose parent project is completed (default false hides them; tasks without a project are always returned)
include_draftsbooleanfalseinclude tasks belonging to draft projects (default false hides them; requires view_draft_projects permission; tasks without a project are always returned)
project_id[]integerfalsefilter by project ids. ?project_id= will include tasks with no project.
parent_task_id[]integerfalsefilter by parent task ids. ?parent_task_id= will include tasks with no parent.
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
active_by_datestringfalsefilter tasks active by a date (today_and_overdue preset): returns tasks that have at least one date and whose start_date is null or on or before the date; end_date is not upper-bounded so overdue tasks remain included
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
dates_overlap_startstringfalse[LEGACY] use start_date instead
dates_overlap_endstringfalse[LEGACY] use end_date instead
estimated_mins_minintegerfalsefilter by estimated mins min
estimated_mins_maxintegerfalsefilter by estimated mins max
source[]stringfalsefilter by sources
priority[]stringfalsefilter by priority
is_prioritybooleanfalsefilter by whether task is a user priority
state[]stringfalsefilter by state
time_block_id[]integerfalsefilter in tasks by timeblock' IDs
time_block_completedbooleanfalsefilter in/out tasks by completed timeblocks
team_id[]integerfalsefilter tasks by team IDs
assignee_team_id[]integerfalsefilter in tasks assigned to these teams, without expanding the teams to their members
assignee_user_id[]integerfalsefilter in tasks by assignee's user IDs
tag_id[]integerfalsefilter in tasks by tag IDs
recurringbooleanfalsefilter by recurring tasks
recurring_task_ids[]integerfalsefilter by recurring task ids
client_id[]integerfalsefilter by client ids. ?client_id= will include tasks with no client.
include_assigneesbooleanfalseincludes the unified user and team assignees
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). Predicate vocabulary mirrors the project list cf_filter.

Response​

200​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
sub_task_done_countinteger-
sub_task_total_countinteger-
tag_idsArray of integer-
tagsArray of object-
time_block_completed_countinteger-
time_block_scheduled_completed_countinteger-
time_block_scheduled_total_countinteger-
time_block_total_countinteger-
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
parent​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

GET Get a task by ID​

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

Returns a task by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Query​

nametyperequireddescription
include_assigneesbooleanfalseincludes the unified user and team assignees

Response​

200​

NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
sub_task_done_countinteger-
sub_task_total_countinteger-
tag_idsArray of integer-
tagsArray of object-
time_block_completed_countinteger-
time_block_scheduled_completed_countinteger-
time_block_scheduled_total_countinteger-
time_block_total_countinteger-
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
parent​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

PUT Update task​

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

Update an existing task

curl -X PUT https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id} \
-H "Content-Type: application/json" \
-d '\{"allocation_unit":"string","assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","custom_fields":\{\},"description":"string","end_date":"string","estimate_type":"string","estimated_mins":"integer","name":"string","notes":"string","outbound_sync":"boolean","parent_task_id":"integer","pinned":"boolean","position":"integer","priority":"string","private":"boolean","project_id":"integer","recurring_task_id":"integer","rollup_enabled":"boolean","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}],"team_assignee_ids":[\{\}]\}'

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertrueTask ID

Body​

NameTypeDescription
allocation_unitstringnull
assignee_user_idsArray of integer-
auto_log_timeboolean-
billablebooleannull
colorstring-
custom_fieldsobject-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
namestring-
notesstring-
outbound_syncboolean-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
privateboolean-
project_idinteger-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestringnull
start_datestring-
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

204​

Task updated successfully

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

DELETE Delete a task by ID​

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

Deletes a task by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Query​

nametyperequireddescription
from_recurring_task_idintegerfalsedelete recurring tasks starting from this recurring task instance
outbound_syncbooleanfalseConduct outbound sync or not

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

PATCH Partially update a task​

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

Partially update an existing task. position (an ordinal rank) and after_task_id (the neighbour to land behind) are mutually exclusive.

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id} \
-H "Content-Type: application/json" \
-d '\{"after_task_id":"integer","allocation_unit":"string","assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","custom_fields":\{\},"description":"string","end_date":"string","estimate_type":"string","estimated_mins":"integer","name":"string","notes":"string","outbound_sync":"boolean","parent_task_id":"integer","pinned":"boolean","position":"integer","priority":"string","priority_at":"string","private":"boolean","project_id":"integer","recurring_task_id":"integer","rollup_enabled":"boolean","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}],"team_assignee_ids":[\{\}]\}'

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertrueTask ID

Query​

nametyperequireddescription
from_recurring_task_idintegerfalseupdate recurring tasks starting from this recurring instance id

Body​

NameTypeDescription
after_task_idintegernull
allocation_unitstringnull
assignee_user_idsArray of integer-
auto_log_timebooleannull
billablebooleannull
colorstringnull
custom_fieldsobject-
descriptionstringnull
end_datestringnull
estimate_typestringValid values: daily, total.
estimated_minsintegernull
namestring-
notesstringnull
outbound_syncboolean-
parent_task_idintegernull
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstringnull
privateboolean-
project_idintegernull
recurring_task_idintegernull
rollup_enabledboolean-
rrulestringnull
start_datestringnull
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

204​

Task updated successfully

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

POST Archive a task by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/archive

Archives a task, and all its time blocks & TEs with the provided task ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Query​

nametyperequireddescription
from_recurring_task_idintegerfalsearchive recurring tasks starting from this recurring task instance

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Task not found

500​

Internal Server Error

GET Get a task with its children sub-tasks by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/children

Returns a task and its children sub-tasks by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Query​

nametyperequireddescription
pageintegerfalsepage number
per_pageintegerfalseresults per page
order_by[]stringfalseorder by. tag_ids and assignees order by the canonicalized (sorted) array, so tasks with the same set of tags or assignees cluster together regardless of storage order.
status_idintegerfalsefilter children tasks by status ID
archivedbooleanfalsefilter in/out archived tasks
source[]stringfalsefilter by sources
team_id[]integerfalsefilter children tasks by team IDs
assignee_user_id[]integerfalsefilter in tasks by assignee's user IDs
tag_id[]integerfalsefilter in tasks by tag IDs
include_assigneesbooleanfalseincludes the unified user and team assignees

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
sub_task_done_countinteger-
sub_task_total_countinteger-
tag_idsArray of integer-
tagsArray of object-
time_block_completed_countinteger-
time_block_scheduled_completed_countinteger-
time_block_scheduled_total_countinteger-
time_block_total_countinteger-
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
parent​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

GET Get a task with its parent tasks by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/parents

Returns a task and its parent tasks by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Query​

nametyperequireddescription
pageintegerfalsepage number
per_pageintegerfalseresults per page
order_by[]stringfalseorder by. tag_ids and assignees order by the canonicalized (sorted) array, so tasks with the same set of tags or assignees cluster together regardless of storage order.
status_idintegerfalsefilter parent tasks by status ID
archivedbooleanfalsefilter in/out archived tasks
source[]stringfalsefilter by sources
team_id[]integerfalsefilter parent tasks by team IDs
assignee_user_id[]integerfalsefilter in tasks by assignee's user IDs
tag_id[]integerfalsefilter in tasks by tag IDs
include_assigneesbooleanfalseincludes the unified user and team assignees

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
sub_task_done_countinteger-
sub_task_total_countinteger-
tag_idsArray of integer-
tagsArray of object-
time_block_completed_countinteger-
time_block_scheduled_completed_countinteger-
time_block_scheduled_total_countinteger-
time_block_total_countinteger-
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
parent​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

PATCH Restore a task by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/restore

Restores a task by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Task not found

500​

Internal Server Error

POST Unarchive a task by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/unarchive

Unarchives a task, and all its time blocks & TEs with the provided task ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Task not found

500​

Internal Server Error

POST Parse image and retrieve tasks​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/workflows/tasks/extract

Parses the provided image and returns a list of tasks.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
filefiletrueattachment file

Response​

200​

Image parsed successfully

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

503​

Task generation failed

POST Parse text list and retrieve tasks​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/workflows/tasks/from-list

Parses the provided text list and returns a list of tasks.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/workflows/tasks/from-list \
-H "Content-Type: application/json" \
-d '\{"prompt":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
promptstring-

Response​

200​

List parsed successfully

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

503​

Task generation failed

POST Generates tasks from prompt​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/workflows/tasks/prompt

Generates tasks from prompt

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/workflows/tasks/prompt \
-H "Content-Type: application/json" \
-d '\{"prompt":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
promptstring-

Response​

200​

Prompt parsed successfully

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
allocation_unitstringValid values: percent, flat.
archived_atstring-
assignee_user_idsArray of integer-
assigneesArray of objectA unified column for all task entity assignments
auto_log_timeboolean-
billablebooleannull
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimate_typestringValid values: daily, total.
estimated_minsinteger-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
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-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
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-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

503​

Task generation failed

© 2026 Toggl. All rights reserved.