Skip to main content

Time-entries

GET List task time entries​

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

Returns a list of time-entries based on the provided workspace ID, task ID and filter params. With include_subtasks=true, a task that sums subtask totals also lists the entries of the subtasks whose time is summed into its totals, each under its own task_id; a task that does not sum subtask totals lists its own entries only, whatever the flag.

curl  https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/time-entries \
-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
typestringfalsetime entry type
archivedbooleanfalsefilter in/out archived TEs
include_subtasksbooleanfalsealso list entries of the subtasks summed into this task's totals (default false)

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
archived_atstring-
billableboolean-
billable_sourcestringWhether billable was set on the entry (manual) or resolved from its task, else its project (task_default). Valid values: manual, task_default.
calendar_event_idinteger-
calendar_idintegerCalendarID is the calendar service's calendar PK. It stays set after a calendar deselect clears calendar_event_id.
created_atstring-
deleted_atstring-
descriptionstring-
durationintegerTracked duration in seconds; omitted while the timer is running and for an entry that is only planned.
idinteger-
pattern_generatedbooleanPatternGenerated is the response-facing derivative of GeneratedByTaskID: true when the entry was materialized by a series pattern.
pattern_managedbooleanPatternManaged reports that the pattern engine owns this entry. Server-owned; present in responses, never bindable from a payload.
planned_atstring-
planned_durationintegerPlanned duration in seconds.
planned_startstringPlanned start, for time planned on the calendar.
project_idinteger-
startstringStart of the tracked time; omitted for an entry that is only planned.
tag_idsArray of integerTagIDs is the entry's manual tag override. NULL (nil) means no override: the effective tags fall through to the linked task's tags. A non-nil value — including an empty array — is entry-authoritative.
tagsArray of objectTags is the hydrated effective tag set: the override when TagIDs is set, else the linked task's active tags. Read-only.
task_idintegernull
time_block_idinteger-
timezonestringTimezone is the entry creator's IANA timezone snapshotted at creation; NULL when unresolved.
toggl_user_idinteger-
tracked_atstring-
typestringThe type of time entry: either an activity or a break. Valid values: activity, break.
updated_atstring-
workspace_idinteger-
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

POST Create a new time entry​

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

Creates a new time entry in the specified workspace. An optional user_id field can be provided to create a time entry on behalf of another user. When user_id differs from the authenticated user, the caller must have manage_time_entries permission. An optional project_id overrides the task's project for this entry. When omitted, the entry inherits the task's project.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/time-entries \
-H "Content-Type: application/json" \
-d '\{"billable":"boolean","calendar_event_id":"integer","description":"string","duration":"integer","planned_at":"string","planned_duration":"integer","planned_start":"string","project_id":"integer","repeat_time_entry":"boolean","start":"string","tag_ids":[\{\}],"tracked_at":"string","type":"string","user_id":"integer"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Query​

nametyperequireddescription
from_recurring_task_idintegerfalseDECLARED FOR PR 4/12, NOT ENABLED: scope the planned-time operation to a recurring series. Any supplied value is rejected until the implementing PR lands.
return_occurrencebooleanfalseDECLARED FOR PR 12, NOT ENABLED: answer 200 with the exact occurrence instead of the default 204. Any active use is rejected until the implementing PR lands.

Body​

NameTypeDescription
billableboolean-
calendar_event_idinteger-
descriptionstring-
durationinteger-
planned_atstring-
planned_durationinteger-
planned_startstring-
project_idinteger-
repeat_time_entrybooleanRepeatTimeEntry is the declared composite planned-time repeat input (initial selection, PR 11). Any supplied value — true, false or JSON null — is rejected until then; the contract is declared in docs/recurring-pr2a-additive-schema.md. json.RawMessage keeps absent distinguishable from explicit null on decode and is omitted on marshal when never set.
startstring-
tag_idsArray of integerTagIDs sets a manual tag override at creation (entry-authoritative, including an explicit empty array). Absent/null = no override: the entry inherits the linked task's tags.
tracked_atstring-
typestringThe type of time entry. This could either be an activity, or a break. Valid values: activity, break.
user_idinteger-

Response​

201​

Time entry created successfully

400​

Invalid request

403​

Insufficient permissions

422​

Required field is missing (error=required_fields_missing) or is being cleared on a grandfathered entry (error=required_fields_deletion)

500​

Internal Server Error

GET List task time entries​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries

Returns a list of time-entries based on the provided workspace ID and filter params. Only the caller's own time entries are returned, whatever their role. To read other members' time, use the reports query endpoint (POST /reports/workspaces/{workspace_id}/query). For guests, entries on tasks or projects they cannot access, and entries with neither, are also left out. Returns every entry that overlaps the date_from–date_to range: a tracked entry by its start and duration, a planned-only entry by its planned_start and planned_duration. A running timer has no duration yet, so it is returned only if it started within the range. Entries without a task are left out unless include_taskless=true. Results are paginated; the response has no total count, so keep requesting pages until one returns no entries. A page can hold fewer than per_page entries while more pages follow. For guests, even an empty page can be followed by more; use the stream endpoint to read a whole range.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
date_fromstringtruerange start, as an RFC 3339 timestamp, e.g. 2026-09-01T00:00:00Z (percent-encode a + offset)
date_tostringtruerange end, as an RFC 3339 timestamp, e.g. 2026-09-30T23:59:59Z
task_idintegerfalseonly entries of this task
status_idintegerfalseonly entries whose task has this status
project_idintegerfalseonly entries of this project (the entry's own project, else its task's)
typestringfalsetime entry type
pageintegerfalsepage number, starting at 1 (default 1)
per_pageintegerfalseresults per page (default 20, max 100)
order_by[]stringfalsesort columns, repeated or comma-separated; prefix - for descending. Ties are broken by id
archivedbooleanfalsetrue for archived entries only, false for unarchived only; omit for both
include_tasklessbooleanfalseinclude entries without a task (default false)
project_completedbooleanfalsetrue for entries on a completed project only, false for non-completed only; omit for both. An entry counts as completed when its own project or its task's project is completed
project_draftbooleanfalsetrue for entries on a draft project only, false for non-draft only; omit for both. Checks the same two projects as project_completed
expand_calendar_eventbooleanfalsehydrate calendar event details inline

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
archived_atstring-
billableboolean-
billable_sourcestringWhether billable was set on the entry (manual) or resolved from its task, else its project (task_default). Valid values: manual, task_default.
calendar_eventobject-
calendar_event_idinteger-
calendar_idintegerCalendarID is the calendar service's calendar PK. It stays set after a calendar deselect clears calendar_event_id.
created_atstring-
deleted_atstring-
descriptionstring-
durationintegerTracked duration in seconds; omitted while the timer is running and for an entry that is only planned.
idinteger-
pattern_generatedbooleanPatternGenerated is the response-facing derivative of GeneratedByTaskID: true when the entry was materialized by a series pattern.
pattern_managedbooleanPatternManaged reports that the pattern engine owns this entry. Server-owned; present in responses, never bindable from a payload.
planned_atstring-
planned_durationintegerPlanned duration in seconds.
planned_startstringPlanned start, for time planned on the calendar.
projectobject-
project_idinteger-
startstringStart of the tracked time; omitted for an entry that is only planned.
tag_idsArray of integerTagIDs is the entry's manual tag override. NULL (nil) means no override: the effective tags fall through to the linked task's tags. A non-nil value — including an empty array — is entry-authoritative.
tagsArray of objectTags is the hydrated effective tag set: the override when TagIDs is set, else the linked task's active tags. Read-only.
taskobject-
task_idintegernull
time_block_idinteger-
timezonestringTimezone is the entry creator's IANA timezone snapshotted at creation; NULL when unresolved.
toggl_user_idinteger-
tracked_atstring-
typestringThe type of time entry: either an activity or a break. Valid values: activity, break.
updated_atstring-
workspace_idinteger-
calendar_event​
NameTypeDescription
all_dayboolean-
background_colorstringnull
end_timestring-
foreground_colorstringnull
html_linkstring-
idinteger-
meeting_linkstringnull
providerstring-
start_timestring-
titlestring-
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-
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
rate​
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-
task​
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
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
project​
NameTypeDescription
archived_atstring-
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-
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
rate​
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

POST Create new time entries in bulk​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/bulk

Creates new time entries in bulk for the specified workspace. An optional user_id field can be provided per entry to create time entries on behalf of another user. When user_id differs from the authenticated user, the caller must have manage_time_entries permission. task_id is optional; omitting it creates a taskless entry, optionally scoped to project_id. When both task_id and project_id are provided, project_id overrides the task's project for the entry.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/bulk \
-H "Content-Type: application/json" \
-d '[\{"billable":"boolean","calendar_event_id":"integer","description":"string","duration":"integer","planned_at":"string","planned_duration":"integer","planned_start":"string","project_id":"integer","start":"string","tag_ids":[\{\}],"task_id":"integer","tracked_at":"string","type":"string","user_id":"integer"\}]' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
billableboolean-
calendar_event_idinteger-
descriptionstring-
durationinteger-
planned_atstring-
planned_durationinteger-
planned_startstring-
project_idinteger-
startstring-
tag_idsArray of integerTagIDs sets a manual tag override at creation (entry-authoritative, including an explicit empty array). Absent/null = no override: the entry inherits the linked task's tags.
task_idinteger-
tracked_atstring-
typestringThe type of time entry. This could either be an activity, or a break. Valid values: activity, break.
user_idinteger-

Response​

201​

Time entries created successfully

400​

Invalid request

403​

Insufficient permissions

422​

One or more time entries violate required-field constraints (error=bulk_required_fields_missing)

500​

Internal Server Error

DELETE Delete time entries in bulk​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/bulk

Deletes time entries by the provided IDs.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
ids[]integertrueTimeEntry IDs

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time entry does not exist

500​

Internal Server Error

PATCH Partial bulk update time entry​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/bulk

Partial updates an existing time entry

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/bulk \
-H "Content-Type: application/json" \
-d '[\{"billable":"boolean","description":"string","duration":"integer","id":"integer","planned_at":"string","planned_duration":"integer","planned_start":"string","project_id":"integer","reset_billable_to_default":"boolean","start":"string","tag_ids":[\{\}],"task_id":"integer","time_block_id":"integer","tracked_at":"string","type":"string"\}]'

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
billableboolean-
descriptionstringnull
durationinteger-
idinteger-
planned_atstringnull
planned_durationintegernull
planned_startstringnull
project_idintegernull
reset_billable_to_defaultboolean-
startstringnull
tag_idsArray of integerTagIDs is tri-state: absent leaves the stored override untouched; explicit null clears the override (reset to task inheritance); an array (including empty) sets a manual, entry-authoritative override.
task_idintegernull
time_block_idintegernull
tracked_atstringnull
typestringValid values: activity, break.

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time entry does not exist

422​

One or more time entries violate required-field constraints (error=bulk_required_fields_missing)

500​

Internal Server Error

PATCH Restore time entries in bulk​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/bulk/restore

Restores time entries by the provided IDs.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
ids[]integertrueTimeEntry IDs

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time entry does not exist

500​

Internal Server Error

GET List task time entries, streaming the response​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-entries/stream

Returns a list of time-entries based on the provided workspace ID and filter params. Only the caller's own time entries are returned, whatever their role. To read other members' time, use the reports query endpoint (POST /reports/workspaces/{workspace_id}/query). For guests, entries on tasks or projects they cannot access, and entries with neither, are also left out. Returns every entry that overlaps the date_from–date_to range: a tracked entry by its start and duration, a planned-only entry by its planned_start and planned_duration. A running timer has no duration yet, so it is returned only if it started within the range. Entries without a task are left out unless include_taskless=true. Returns every matching entry as a single JSON array, without pagination.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
date_fromstringtruerange start, as an RFC 3339 timestamp, e.g. 2026-09-01T00:00:00Z (percent-encode a + offset)
date_tostringtruerange end, as an RFC 3339 timestamp, e.g. 2026-09-30T23:59:59Z
task_idintegerfalseonly entries of this task
status_idintegerfalseonly entries whose task has this status
project_idintegerfalseonly entries of this project (the entry's own project, else its task's)
typestringfalsetime entry type
order_by[]stringfalsesort columns, repeated or comma-separated; prefix - for descending. Ties are broken by id
archivedbooleanfalsetrue for archived entries only, false for unarchived only; omit for both
include_tasklessbooleanfalseinclude entries without a task (default false)
project_completedbooleanfalsetrue for entries on a completed project only, false for non-completed only; omit for both. An entry counts as completed when its own project or its task's project is completed
project_draftbooleanfalsetrue for entries on a draft project only, false for non-draft only; omit for both. Checks the same two projects as project_completed
expand_calendar_eventbooleanfalsehydrate calendar event details inline

Response​

200​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
archived_atstring-
billableboolean-
billable_sourcestringWhether billable was set on the entry (manual) or resolved from its task, else its project (task_default). Valid values: manual, task_default.
calendar_eventobject-
calendar_event_idinteger-
calendar_idintegerCalendarID is the calendar service's calendar PK. It stays set after a calendar deselect clears calendar_event_id.
created_atstring-
deleted_atstring-
descriptionstring-
durationintegerTracked duration in seconds; omitted while the timer is running and for an entry that is only planned.
idinteger-
pattern_generatedbooleanPatternGenerated is the response-facing derivative of GeneratedByTaskID: true when the entry was materialized by a series pattern.
pattern_managedbooleanPatternManaged reports that the pattern engine owns this entry. Server-owned; present in responses, never bindable from a payload.
planned_atstring-
planned_durationintegerPlanned duration in seconds.
planned_startstringPlanned start, for time planned on the calendar.
projectobject-
project_idinteger-
startstringStart of the tracked time; omitted for an entry that is only planned.
tag_idsArray of integerTagIDs is the entry's manual tag override. NULL (nil) means no override: the effective tags fall through to the linked task's tags. A non-nil value — including an empty array — is entry-authoritative.
tagsArray of objectTags is the hydrated effective tag set: the override when TagIDs is set, else the linked task's active tags. Read-only.
taskobject-
task_idintegernull
time_block_idinteger-
timezonestringTimezone is the entry creator's IANA timezone snapshotted at creation; NULL when unresolved.
toggl_user_idinteger-
tracked_atstring-
typestringThe type of time entry: either an activity or a break. Valid values: activity, break.
updated_atstring-
workspace_idinteger-
calendar_event​
NameTypeDescription
all_dayboolean-
background_colorstringnull
end_timestring-
foreground_colorstringnull
html_linkstring-
idinteger-
meeting_linkstringnull
providerstring-
start_timestring-
titlestring-
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-
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
rate​
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-
task​
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
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
metadata​
NameTypeDescription
all_dayboolean-
calendar_event_idinteger-
calendar_idinteger-
extension_sourcestringBrowser-extension provenance: the source/config that produced the task and the page URL it was tracked from. Written by the extension's start-from-description flow; ExtensionURL is queryable via FindByURL.
extension_urlstring-
external_idstring-
ical_uidstring-
last_asserted_track_project_idintegerLastAssertedTrackProjectID is the Track planned_task.project_id that the Focus→Track mirror last successfully wrote for this task. Track→Focus uses it to distinguish a stale echo (Track still holds this value after a Focus-side project move) from an intentional Track-side project move. Internal mirror state, written by toggl_api focus_sync_worker; not user-facing.
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstringValid values: exact_name, similar_name.
matched_namestring-
normalized_namestring-
originstringValid values: manual, auto_suggestion, confirmed_suggestion, integration, legacy, explicit_mapping.
suggested_atstring-
project​
NameTypeDescription
archived_atstring-
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-
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
recurring_project_idintegerRecurringProjectID links an instance to its recurring template, so clients can lane an entry under a collapsed series.
client​
NameTypeDescription
idinteger-
namestring-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
rate​
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestringValid values: todo, done, in_progress, blocked.
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

© 2026 Toggl. All rights reserved.