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 tasks the current user has pinned
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. project_name orders by project name (case-insensitive), then project ID, so same-named projects stay separate groups; tasks without a project sort last ascending and first descending. 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_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
active_projectbooleanfalseOnly tasks without a project or in a live, non-archived, non-completed, non-template, non-draft project.
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
occurrence_window_datestringfalseRepeats of a recurring task dated after this date + occurrence_window_days are hidden; earlier ones show. Default: today (UTC).
occurrence_window_daysintegerfalseDays after occurrence_window_date, 0–31. Default: 7. Ignored with end_date or active_by_date.
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
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
ids[]integerfalseonly these tasks, up to 100; the list is still paged (default 20), so set per_page to the id count. Without occurrence_window_date or occurrence_window_days the occurrence window is off; templates and draft-project tasks the caller may see are included. Other filters and the caller's visibility still apply.
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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_entry_total_countinteger-
toggl_user_idinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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. Omitted private inherits the parent task, then project visibility, then the effective workspace default, gated by private-feature access. Project-less tasks default to private when the role requires it and the plan permits it. With the recurring_create_paths beta flag on (and repeating tasks enabled), rrule makes a repeating task the way recurring_rule does; a start date that is not one of the rule's dates moves to the rule's next date, and the task keeps its length.

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","name":"string","notes":"string","parent_task_id":"integer","pinned":"boolean","position":"integer","priority":"string","priority_at":"string","private":"boolean","project_id":"integer","recurring_rule":"string","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_datestringSend together with start_date; must be on or after start_date.
estimate_typestringValid values: daily, total.
estimated_minsinteger-
namestring-
notesstring-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
project_idinteger-
recurring_rulestringnull
rollup_enabledboolean-
rrulestringnull
start_datestringSend together with end_date; a date without the other is rejected.
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

201​

Task created successfully

400​

Invalid request; for a repeating task (recurring_rule, or rrule with the recurring_create_paths beta flag on): a rule that is not supported (error=recurring_rule_not_supported) or repeats more often than the task lasts (error=recurring_rule_too_frequent); a subtask (error=recurring_subtask), a task in a template project (error=recurring_on_template), a rolled-up task (error=task_rollup_cannot_recur) or a task in an archived project (error=recurring_archived_project)

402​

Not available on the current plan

403​

Insufficient permissions, or repeating tasks are not enabled (error=feature_not_enabled)

500​

Internal Server Error

503​

Beta features service unavailable (error=beta_features_unavailable)

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. Omitted private uses the same context, workspace default, and role rules as single-task creation.

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","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_datestringSend together with start_date; must be on or after start_date.
estimate_typestringValid values: daily, total.
estimated_minsinteger-
namestring-
notesstring-
parent_task_idinteger-
pinnedboolean-
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstring-
privateboolean-
project_idinteger-
rollup_enabledboolean-
rrulestringnull
start_datestringSend together with end_date; a date without the other is rejected.
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

201​

Tasks created successfully

400​

Invalid request

402​

Not available on the current plan

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. An occurrence of a series made with recurring_rule is deleted alone (there is no scope).

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
move_time_to_task_idintegerfalseMove the logged time the caller may edit to this task (in the project of every deleted task, live, not being deleted) instead of leaving it taskless; locked entries stay taskless

Response​

204​

No Content

400​

Invalid request, or move_time_to_task_id is in another project (error=move_time_target_project_mismatch) or is being deleted (error=move_time_target_deleted)

402​

Not available on the current plan

403​

Insufficient permissions

404​

The task in move_time_to_task_id does not exist

409​

A task's series changed while its next date was being added, try again (error=recurring_series_changed)

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. On an occurrence of a series made with recurring_rule, an item changes only that occurrence (there is no scope).

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","repeat_planned_time_entry_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_unitstringValid values: percent, flat.
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
pinnedbooleanDeprecated: use POST or DELETE .../tasks/{task_id}/pinned. Sets the current user's own pin only.
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstringnull
privateboolean-
project_idintegernull
recurring_task_idintegernull
repeat_planned_time_entry_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

402​

Not available on the current plan

403​

Insufficient permissions

409​

Tags are required, and removing the tags would leave time entries without tags (error=would_leave_time_entries_without_tags); a task's series changed while its next date was being added, try again (error=recurring_series_changed); rrule or recurring_task_id sent for an occurrence of a series made with recurring_rule, from an app that needs an update or a reload (error=recurring_client_outdated)

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. An ID with no task behind it is skipped rather than failing the batch; archive a single task if you need a missing one reported. An occurrence of a series made with recurring_rule is archived alone (there is no scope).

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

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. Pass skip_provider_refresh=true to skip the live calendar provider refresh before syncing (e.g. for a caller that knows the CalendarsEvents cache already has current provider data).

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
skip_provider_refreshbooleanfalseskip the live calendar provider refresh before syncing (default false: refresh happens)

Response​

200​

NameTypeDescription
changedinteger-
degraded_integrationsArray of integer-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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 tasks the current user has pinned
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. project_name orders by project name (case-insensitive), then project ID, so same-named projects stay separate groups; tasks without a project sort last ascending and first descending. 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_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
active_projectbooleanfalseOnly tasks without a project or in a live, non-archived, non-completed, non-template, non-draft project.
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
occurrence_window_datestringfalseRepeats of a recurring task dated after this date + occurrence_window_days are hidden; earlier ones show. Default: today (UTC).
occurrence_window_daysintegerfalseDays after occurrence_window_date, 0–31. Default: 7. Ignored with end_date or active_by_date.
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
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
ids[]integerfalseonly these tasks, up to 100. Without occurrence_window_date or occurrence_window_days the occurrence window is off; templates and draft-project tasks the caller may see are included. Other filters and the caller's visibility still apply.
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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_entry_total_countinteger-
toggl_user_idinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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_entry_total_countinteger-
toggl_user_idinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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. On an occurrence of a series made with recurring_rule, it changes only that occurrence (there is no scope).

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_datestringSend together with start_date; must be on or after start_date.
estimate_typestringValid values: daily, total.
estimated_minsinteger-
namestring-
notesstring-
outbound_syncboolean-
parent_task_idinteger-
pinnedbooleanDeprecated: use POST or DELETE .../tasks/{task_id}/pinned. Sets the current user's own pin only.
positionintegernull
prioritystringValid values: none, low, medium, high.
privateboolean-
project_idinteger-
recurring_task_idinteger-
rollup_enabledboolean-
rrulestringnull
start_datestringSend together with end_date; a date without the other is rejected.
status_idinteger-
tag_idsArray of integer-
team_assignee_idsArray of integer-
custom_fields​

Response​

204​

Task updated successfully

400​

Invalid request

402​

Not available on the current plan

403​

Insufficient permissions

409​

Tags are required, and removing the tags would leave time entries without tags (error=would_leave_time_entries_without_tags); the task's series changed while its next date was being added, try again (error=recurring_series_changed); rrule or recurring_task_id sent for an occurrence of a series made with recurring_rule, from an app that needs an update or a reload (error=recurring_client_outdated)

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. On an occurrence of a series made with recurring_rule, scope=following or all deletes this occurrence and the following ones, or all of them, with their time entries, except the ones someone worked on (done, with tracked or planned time, or with attachments), which stay; following ends the series' rule and all deletes the series. outbound_sync is ignored with following or all.

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
scopestringfalseFor a series made with recurring_rule: delete this occurrence (the default), this and the following ones, or all
outbound_syncbooleanfalseConduct outbound sync or not
move_time_to_task_idintegerfalseMove the logged time the caller may edit to this task (same project, live, not being deleted) instead of leaving it taskless; locked entries stay taskless

Response​

204​

No Content

400​

Invalid request, or a scope of following or all, or from_recurring_task_id, for a task it doesn't apply to (error=recurring_scope_not_supported); a scope of following or all for an occurrence of a deleted series (error=recurring_series_deleted); a delete over the size limit for a series (error=recurring_series_too_large); move_time_to_task_id in another project (error=move_time_target_project_mismatch) or being deleted (error=move_time_target_deleted)

402​

Not available on the current plan

403​

Insufficient permissions

404​

The task, or the task in move_time_to_task_id, does not exist

409​

The task's series changed while its next date was being added, try again (error=recurring_series_changed)

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. On an occurrence of a series made with recurring_rule, scope=following or all changes name, description, notes, estimated_mins, estimate_type, allocation_unit, auto_log_time, priority, color, tag_ids, custom_fields, assignee_user_ids, team_assignee_ids, private, project_id and billable on this occurrence and the following ones, or on all of them; deleted occurrences keep their values, except that a series move moves their dates too; send other fields with scope=this. start_date and end_date with scope=following or all and no other field (outbound_sync is taken and ignored) move or resize the series. N is the new start minus this occurrence's scheduled date (recurrence_date), and L the change in its length. This occurrence takes the dates sent. Every other occurrence from it (following) or from today (all), done and archived ones too, moves its start by N and its end by N + L; deleted ones move by N and keep their length. The rule and the dates still to come move by N, so a changed end alone on an occurrence on its scheduled date changes only the end dates. Occurrences before today never move, and time entries stay where they are. With following or all, assignees the user may not set are refused, not changed to the user, to none or to the first one as with scope=this. A project_id or billable change with following or all moves the occurrences' time entries as with scope=this, and is refused when an entry it changes belongs to another user whose time entries the user may not change, or is in a submitted or approved timesheet period, unless the user approves that timesheet. recurring_rule null, sent alone with scope=following or all, stops the series: the rule ends, and the occurrences from today (or from this one, if later, with following) that nobody worked on are deleted with their time entries. A recurring_rule sent alone with scope=following or all changes the series' rule from that day on, and starts a stopped series again: the occurrences on dates the new rule doesn't give that nobody worked on are deleted with their time entries, deleted occurrences on its dates come back, each as the same task with the values a new occurrence gets and without its time entries, and its other dates get new occurrences. New and brought-back occurrences take this occurrence's length. The rule is stored in the parser's normal form, and a DTSTART after that day moves back in whole periods, so the rule runs in step from that day; such a rule is refused when moving it would change its dates, or when it ends after a number of times. DTSTART must be one of the rule's dates, in UTC. The stored rule sent again changes nothing when its DTSTART is on or before that day.

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_rule":"string","recurring_task_id":"integer","repeat_planned_time_entry_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
scopestringfalseFor a series made with recurring_rule: change this occurrence (the default), this and the following ones, or all

Body​

NameTypeDescription
after_task_idintegernull
allocation_unitstringValid values: percent, flat.
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
pinnedbooleanDeprecated: use POST or DELETE .../tasks/{task_id}/pinned. Sets the current user's own pin only.
positionintegernull
prioritystringValid values: none, low, medium, high.
priority_atstringnull
privateboolean-
project_idintegernull
recurring_rulestringnull
recurring_task_idintegernull
repeat_planned_time_entry_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; a scope of following or all for a task it doesn't apply to, or a recurring_rule, or start_date and end_date, with it for an occurrence of an archived series (error=recurring_scope_not_supported); a scope of following or all for an occurrence of a deleted series (error=recurring_series_deleted); a recurring_rule that is not supported, or with following or all has no date from the change's start, or has a DTSTART after that start and either COUNT or dates that moving it back would change (error=recurring_rule_not_supported); a recurring_rule that repeats more often than this task or occurrence lasts (error=recurring_rule_too_frequent); a recurring_rule with following or all while the series' farthest occurrence is in an archived project (error=recurring_archived_project) or a deleted one (error=invalid_task); a project_id with following or all for an archived project (error=recurring_archived_project), or one that is deleted or doesn't exist (error=invalid_task); a field that following and all don't change, to send with scope=this (error=recurring_scope_field_not_supported); start_date and end_date with following or all that can't move the series: sent with fields other than outbound_sync, or null, for an occurrence before today, for an ended series, by days the rule can't move by, with following for an occurrence past the dates the series has made so far, moving an occurrence before today or onto or before an earlier one (deleted ones count), making an occurrence end before it starts, or making the rule repeat more often than this occurrence lasts (error=recurring_series_move_not_supported); a change over the size limit for a series (error=recurring_series_too_large); recurring_rule null without scope=following or all (error=recurring_rule_null_not_supported)

402​

Not available on the current plan

403​

Insufficient permissions, or repeating tasks are not enabled (error=feature_not_enabled)

404​

Task not found

409​

Tags are required, and removing the tags would leave time entries without tags (error=would_leave_time_entries_without_tags); the task already repeats, also for recurring_rule on an occurrence without scope=following or all (error=task_already_repeats); the task's series changed while its next date was being added, or while following or all occurrences were being changed, try again (error=recurring_series_changed); a project_id or billable change with following or all would change a time entry in a submitted or approved timesheet period, unless the user approves that timesheet (error=time_entry_locked), or a time entry of another user whose time entries the user may not change (error=recurring_others_time_entries); rrule or recurring_task_id sent for an occurrence of a series made with recurring_rule, from an app that needs an update or a reload (error=recurring_client_outdated)

500​

Internal Server Error

503​

Beta features service unavailable (error=beta_features_unavailable)

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 TEs with the provided task ID. On an occurrence of a series made with recurring_rule, scope=following or all archives this occurrence and the following ones, or all of them, done ones included, with their time entries, and archives the series, which then adds no new occurrences.

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
scopestringfalseFor a series made with recurring_rule: archive this occurrence (the default), this and the following ones, or all

Response​

204​

No Content

400​

Invalid request, or a scope of following or all, or from_recurring_task_id, for a task it doesn't apply to (error=recurring_scope_not_supported); a scope of following or all for an occurrence of a deleted series (error=recurring_series_deleted); an archive over the size limit for a series (error=recurring_series_too_large)

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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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_entry_total_countinteger-
toggl_user_idinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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_entry_total_countinteger-
toggl_user_idinteger-
total_tracked_timeinteger-
updated_atstring-
workspace_idinteger-
assignees​
NameTypeDescription
idinteger-
typestringValid values: user, team.
client​
NameTypeDescription
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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. On a deleted occurrence of a series made with recurring_rule, scope=all restores every occurrence deleted when this one was or later, with their time entries, and the series if it was deleted then or later; the series adds its missing occurrences again from the next night. A series whose rule a following delete ended stays ended. Occurrences in a draft project come back without their time entries.

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

Query​

nametyperequireddescription
scopestringfalseFor a series made with recurring_rule: restore this occurrence (the default) or all; following is refused

Response​

204​

No Content

400​

Invalid request, or a scope of following, or all for a task it doesn't apply to (error=recurring_scope_not_supported); a restore over the size limit for a series (error=recurring_series_too_large)

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 TEs with the provided task ID. On an archived occurrence of a series made with recurring_rule, scope=all unarchives every occurrence archived when this one was or later, with their time entries, and the series if it was archived then or later; the series adds its missing occurrences again from the next night. Occurrences in a draft project come back without their time entries.

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

Query​

nametyperequireddescription
scopestringfalseFor a series made with recurring_rule: unarchive this occurrence (the default) or all; following is refused

Response​

204​

No Content

400​

Invalid request, or a scope of following, or all for a task it doesn't apply to (error=recurring_scope_not_supported); all for an occurrence of a deleted series (error=recurring_series_deleted); an unarchive over the size limit for a series (error=recurring_series_too_large)

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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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​

AI is turned off for the organization (ai_disabled)

429​

The caller's weekly Toggl AI allowance is used up (usage_exhausted); error_values.resets_at says when it resets

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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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​

AI is turned off for the organization (ai_disabled)

429​

The caller's weekly Toggl AI allowance is used up (usage_exhausted); error_values.resets_at says when it resets

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_recurring_seriesbooleanIsRecurringSeries marks a canonical series root (S). Server-owned and read-only: no current API path can set it, and the response only exposes the marker while series behavior stays disabled.
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_rulestringThe rule of the task's series (RRULE with DTSTART); omitted for a normal task and once the series has stopped.
recurring_series_idintegerThe series this task is an occurrence of; omitted for a normal task. Only the server sets it.
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
activeboolean-
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-
event_classificationstringEventClassification is the calendar provider's own classification of the event behind this task, normalised by the calendar service — see calmodels.EventClassification for the values. Absent when the provider reported no classification.
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.
last_integration_datesobjectLastIntegrationDates are the start and end dates the task's integration last sent. Integration sync overwrites the task's dates only when the source's dates differ from these, so dates set in Focus survive unrelated source edits. Internal sync state; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
last_integration_dates​
NameTypeDescription
endstring-
startstring-
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-
billableboolean-
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-
estimate_sourcestringValid values: manual, tasks, designation.
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
activeboolean-
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​

AI is turned off for the organization (ai_disabled)

429​

The caller's weekly Toggl AI allowance is used up (usage_exhausted); error_values.resets_at says when it resets

500​

Internal Server Error

503​

Task generation failed

© 2026 Toggl. All rights reserved.