Skip to main content

Time-blocks

GET List task time blocks​

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

Returns a list of time blocks based on the provided workspace ID, task ID and filter params.

curl  https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/time-blocks \
-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
archivedbooleanfalsefilter in/out archived time blocks

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
archived_atstring-
calendar_event_idinteger-
completed_atstring-
created_atstring-
deleted_atstring-
descriptionstring-
durationinteger-
has_time_entryboolean-
idinteger-
startstring-
task_idinteger-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

POST Create a new time block​

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

Creates a new time block with the provided name and workspace ID.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/time-blocks \
-H "Content-Type: application/json" \
-d '\{"completed":"boolean","duration":"integer","outbound_sync":"boolean","start":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID

Body​

NameTypeDescription
completedboolean-
durationinteger-
outbound_syncboolean-
startstring-

Response​

201​

Time block created successfully

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

GET Get a time block by ID​

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

Returns a time block by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertruetimeBlock ID

Response​

200​

NameTypeDescription
archived_atstring-
calendar_event_idinteger-
completed_atstring-
created_atstring-
deleted_atstring-
descriptionstring-
durationinteger-
idinteger-
startstring-
task_idinteger-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-

400​

Invalid request

403​

Insufficient permissions

404​

TimeBlock does not exist

500​

Internal Server Error

PUT Update time block​

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

Update an existing time block

curl -X PUT https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/time-blocks/{time_block_id} \
-H "Content-Type: application/json" \
-d '\{"completed":"boolean","duration":"integer","outbound_sync":"boolean","start":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertrueTimeBlock ID

Body​

NameTypeDescription
completedboolean-
durationinteger-
outbound_syncboolean-
startstring-

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time block does not exist

500​

Internal Server Error

DELETE Delete a time block by ID​

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

Deletes a time block by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertruetime block ID

Query​

nametyperequireddescription
outbound_syncbooleanfalseConduct outbound sync or not

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time block does not exist

500​

Internal Server Error

PATCH Update time block​

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

Update an existing time block

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/tasks/{task_id}/time-blocks/{time_block_id} \
-H "Content-Type: application/json" \
-d '\{"completed":"boolean","duration":"integer","outbound_sync":"boolean","start":"string","task_id":"integer"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertrueTimeBlock ID

Body​

NameTypeDescription
completedboolean-
durationinteger-
outbound_syncboolean-
startstring-
task_idinteger-

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time block does not exist

500​

Internal Server Error

POST Marks a time block as archived​

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

Marks the time block with the provided WS, task, and time block IDs as archived

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertruetime block ID

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

PATCH Restore a time block by ID​

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

Restores a time block by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertruetime block ID

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time block does not exist

500​

Internal Server Error

POST Marks a time block as unarchived​

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

Marks the time block with the provided WS, task, and time block IDs as unarchived

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
task_idintegertruetask ID
time_block_idintegertruetime block ID

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

GET List task time blocks within range​

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

Returns a list of time-blocks based on the provided workspace ID and filter params.

curl  https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-blocks \
-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
task_idintegerfalsetask id
status_idintegerfalsestatus id
pageintegerfalsepage number
per_pageintegerfalseresults per page
archivedbooleanfalsefilter in/out archived time blocks
order_by[]stringfalseorder by

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
archived_atstring-
calendar_event_idinteger-
completed_atstring-
created_atstring-
deleted_atstring-
descriptionstring-
durationinteger-
has_time_entryboolean-
idinteger-
startstring-
taskobject-
task_idinteger-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
task​
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
client​
NameTypeDescription
idinteger-
namestring-
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-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project​
NameTypeDescription
archived_atstring-
colorstring-
custom_field_valuesArray of objectCustomFieldValues are the parent project's CF values, hydrated by callers that surface them (currently the task list, via task.service.hydrateTaskProjectCustomFieldValues which routes through customfield.Service.GetFieldsByIDs and respects the PermissionViewWorkspaceProjectCustomFields gate). Producers that don't hydrate (e.g. timeentry) leave the slice empty; omitempty hides it on those responses.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
rate​
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestring-
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

POST Create new time blocks​

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

Creates new time blocks

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-blocks/bulk \
-H "Content-Type: application/json" \
-d '\{"time_blocks":[\{"completed":"boolean","duration":"integer","outbound_sync":"boolean","start":"string","task_id":"integer"\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
time_blocksArray of object-
time_blocks​
NameTypeDescription
completedboolean-
durationinteger-
outbound_syncboolean-
startstring-
task_idinteger-

Response​

201​

Time blocks created successfully

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

DELETE Bulk deletes time blocks by IDs​

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

Deletes time blocks by the provided IDs.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
ids[]integertruetime block IDs
outbound_syncbooleanfalseConduct outbound sync or not

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time block does not exist

500​

Internal Server Error

PATCH Update time blocks in bulk​

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

Update existing time blocks in bulk

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-blocks/bulk \
-H "Content-Type: application/json" \
-d '[\{"completed":"boolean","duration":"integer","id":"integer","outbound_sync":"boolean","start":"string","task_id":"integer"\}]' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
completedboolean-
durationinteger-
idinteger-
outbound_syncboolean-
startstring-
task_idinteger-

Response​

204​

No Content

400​

Invalid request

403​

Insufficient permissions

404​

Time block does not exist

500​

Internal Server Error

GET List task time blocks within range (streamed)​

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

Returns a list of time-blocks based on the provided workspace ID and filter params.

curl  https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/time-blocks/stream \
-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
task_idintegerfalsetask id
status_idintegerfalsestatus id
archivedbooleanfalsefilter in/out archived time blocks
order_by[]stringfalseorder by

Response​

200​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
archived_atstring-
calendar_event_idinteger-
completed_atstring-
created_atstring-
deleted_atstring-
descriptionstring-
durationinteger-
has_time_entryboolean-
idinteger-
startstring-
taskobject-
task_idinteger-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
task​
NameTypeDescription
archived_atstring-
assignee_user_idsArray of integer-
auto_log_timeboolean-
billableboolean-
clientobject-
colorstring-
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
end_datestring-
estimated_minsinteger-
ghost_assignee_idsArray of integer-
idinteger-
is_templateboolean-
metadataobject-
namestring-
notesstring-
parent_task_idinteger-
parent_task_namestring-
pinnedboolean-
positioninteger-
prioritystring-
priority_atstring-
privateboolean-
projectobject-
project_idinteger-
recurrence_datestring-
recurring_task_idinteger-
rrulestring-
sourcestring-
source_template_task_idinteger-
start_datestring-
statusobject-
status_idinteger-
status_updated_atstring-
tag_idsArray of integer-
tagsArray of object-
toggl_user_idinteger-
updated_atstring-
workspace_idinteger-
client​
NameTypeDescription
idinteger-
namestring-
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-
external_idstring-
ical_uidstring-
meeting_linkstring-
project_assignmentobject-
updated_atstring-
project_assignment​
NameTypeDescription
accuracynumber-
confirmed_atstring-
match_tierstring-
matched_namestring-
normalized_namestring-
originstring-
suggested_atstring-
project​
NameTypeDescription
archived_atstring-
colorstring-
custom_field_valuesArray of objectCustomFieldValues are the parent project's CF values, hydrated by callers that surface them (currently the task list, via task.service.hydrateTaskProjectCustomFieldValues which routes through customfield.Service.GetFieldsByIDs and respects the PermissionViewWorkspaceProjectCustomFields gate). Producers that don't hydrate (e.g. timeentry) leave the slice empty; omitempty hides it on those responses.
idinteger-
is_templateboolean-
namestring-
permissionsArray of string-
privateboolean-
rateobject-
custom_field_values​
NameTypeDescription
custom_field_idinteger-
custom_field_namestring-
field_typestring-
selected_optionsArray of object-
valueobject-
selected_options​
NameTypeDescription
is_deletedboolean-
option_idinteger-
option_namestring-
rate​
NameTypeDescription
billableboolean-
currencystring-
end_atstring-
has_more_ratesboolean-
hourly_ratenumber-
project_colorstring-
project_created_atstring-
project_idinteger-
project_namestring-
project_rate_idinteger-
start_atstring-
workspace_rate_idinteger-
status​
NameTypeDescription
emojistring-
idinteger-
namestring-
typestring-
tags​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Insufficient permissions

500​

Internal Server Error

© 2026 Toggl. All rights reserved.