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. Multi_select and users CF types use the same canonicalized-array semantics.
status_id[]integerfalsefilter in tasks by status' IDs
toggl_user_idintegerfalsefilter in tasks by user
creator_idintegerfalsefilter tasks by creator user ID; unlike toggl_user_id this does not match assignees
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)
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
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
sourcestringfalsefilter by source
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_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_ghost_assigneesbooleanfalseincludes the ghost assignees
assignee_ghost_id[]integerfalsefilter in tasks by assignee's ghost IDs
disable_aggregationsbooleanfalsewhen true, skips computing aggregations and parent task hydration for faster response

Response

200

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
totalinteger-
data
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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_countintegerTODO: Set as required after FE adjusts things on their end
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
parent
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
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 '\{"assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","description":"string","end_date":"string","estimated_mins":"integer","ghost_assignee_ids":[\{\}],"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","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}]\}' \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body

NameTypeDescription
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
colorstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
integration_ext_idinteger-
integration_sourcestring-
namestring-
notesstring-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystring-
priority_atstring-
privateboolean-
project_idinteger-
rrulestringnull
start_datestring-
status_idinteger-
tag_idsArray of integer-

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":[\{"assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","description":"string","end_date":"string","estimated_mins":"integer","ghost_assignee_ids":[\{\}],"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","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}]\}]\}' \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body

NameTypeDescription
tasksArray of object-
tasks
NameTypeDescription
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
colorstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
integration_ext_idinteger-
integration_sourcestring-
namestring-
notesstring-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystring-
priority_atstring-
privateboolean-
project_idinteger-
rrulestringnull
start_datestring-
status_idinteger-
tag_idsArray of integer-

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

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/bulk \
-H "Content-Type: application/json" \
-d '[\{"assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","description":"string","end_date":"string","estimated_mins":"integer","ghost_assignee_ids":[\{\}],"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","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}]\}]'

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
assignee_user_idsArray of integer-
auto_log_timebooleannull
billableboolean-
colorstringnull
descriptionstringnull
end_datestringnull
estimated_minsintegernull
ghost_assignee_idsArray of integer-
idinteger-
namestring-
notesstringnull
outbound_syncboolean-
parent_task_idintegernull
pinnedboolean-
positionintegernull
prioritystring-
priority_atstringnull
privateboolean-
project_idintegernull
recurring_task_idintegernull
rrulestringnull
start_datestringnull
status_idinteger-
tag_idsArray of integer-

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

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
timezonestringfalsetimezone

Response

204

No Content

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_user_id[]integerfalsefilter recurring task instances by assignee's user IDs
tag_id[]integerfalsefilter in tasks by tag IDs
include_ghost_assigneesbooleanfalseincludes the ghost assignees

Response

200

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
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. Multi_select and users CF types use the same canonicalized-array semantics.
status_id[]integerfalsefilter in tasks by their status' ID
toggl_user_idintegerfalsefilter in tasks by user
creator_idintegerfalsefilter tasks by creator user ID; unlike toggl_user_id this does not match assignees
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
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)
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
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
sourcestringfalsefilter by source
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_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_ghost_assigneesbooleanfalseincludes the ghost assignees
assignee_ghost_id[]integerfalsefilter in tasks by assignee's ghost IDs

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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_countintegerTODO: Set as required after FE adjusts things on their end
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
parent
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
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_ghost_assigneesbooleanfalseincludes the ghost assignees

Response

200

NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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_countintegerTODO: Set as required after FE adjusts things on their end
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
parent
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
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 '\{"assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","description":"string","end_date":"string","estimated_mins":"integer","ghost_assignee_ids":[\{\}],"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","rrule":"string","start_date":"string","status_id":"integer","tag_ids":[\{\}]\}'

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertrueTask ID

Body

NameTypeDescription
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
colorstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
namestring-
notesstring-
outbound_syncboolean-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystring-
privateboolean-
project_idinteger-
recurring_task_idinteger-
rrulestringnull
start_datestring-
status_idinteger-
tag_idsArray of integer-

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

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id} \
-H "Content-Type: application/json" \
-d '\{"assignee_user_ids":[\{\}],"auto_log_time":"boolean","billable":"boolean","color":"string","description":"string","end_date":"string","estimated_mins":"integer","ghost_assignee_ids":[\{\}],"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","rrule":"string","start_date":"string","status_id":"integer","tag_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
assignee_user_idsArray of integer-
auto_log_timebooleannull
billableboolean-
colorstringnull
descriptionstringnull
end_datestringnull
estimated_minsintegernull
ghost_assignee_idsArray of integer-
namestring-
notesstringnull
outbound_syncboolean-
parent_task_idintegernull
pinnedboolean-
positionintegernull
prioritystring-
priority_atstringnull
privateboolean-
project_idintegernull
recurring_task_idintegernull
rrulestringnull
start_datestringnull
status_idinteger-
tag_idsArray of integer-

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
sourcestringfalsefilter by source
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_ghost_assigneesbooleanfalseincludes the ghost assignees

Response

200

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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_countintegerTODO: Set as required after FE adjusts things on their end
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
parent
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
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
sourcestringfalsefilter by source
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_ghost_assigneesbooleanfalseincludes the ghost assignees

Response

200

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parentobject-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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_countintegerTODO: Set as required after FE adjusts things on their end
time_entry_total_countinteger-
toggl_user_idinteger-
total_blocked_timeinteger-
total_scheduled_blocked_timeinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
parent
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
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
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-

400

Invalid request

500

Internal Server Error

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
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-

400

Invalid request

500

Internal Server Error

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
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
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-
client
NameTypeDescription
idinteger-
namestring-
metadata
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project
NameTypeDescription
archived_atstring-
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.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
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-
typestring-
tags
NameTypeDescription
colorstring-
idinteger-
namestring-

400

Invalid request

500

Internal Server Error

© 2026 Toggl. All rights reserved.