Skip to main content

Projects

GET List projects​

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

Returns a list of projects based on the provided workspace ID and filter params.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
member_onlybooleanfalseOnly projects where the caller has an active project role, directly or through a team; normal visibility and lifecycle filters still apply.
include_task_countsbooleanfalseInclude permission-filtered task counts for this project page, including draft or completed projects returned by the project filters; no_project_task_count is returned on page 1. Off by default.
include_picker_parent_group_countsbooleanfalseInclude eligible unified-picker parent-task group counts for this project page; no_project_picker_parent_group_count is returned on page 1. Off by default.
task_archivedbooleanfalseFilter counted tasks by archived state; omit to include both.
task_recurringbooleanfalseFilter counted tasks by recurring state, matching the tasks endpoint.
task_state[]stringfalseFilter counted tasks by state.
task_source[]stringfalseFilter counted tasks by source, matching the tasks endpoint.
task_assignee_user_id[]integerfalseCount tasks assigned to these users, OR tasks assigned directly to task_assignee_team_id.
task_assignee_team_id[]integerfalseCount tasks assigned directly to these teams; does not expand team membership.
task_include_unassignedbooleanfalseAlso count tasks or picker parent groups with no direct assignee and no live team assignment; combined with task_assignee_user_id/task_assignee_team_id as an OR for task counts.
task_namestringfalseFilter counted tasks by name independently of the project name filter.
task_occurrence_window_datestringfalseRepeats of a recurring task dated after this date + task_occurrence_window_days are not counted; earlier ones are. Default: today (UTC).
task_occurrence_window_daysintegerfalseDays after task_occurrence_window_date, 0–31. Default: 7.
pageintegerfalsepage number
per_pageintegerfalseresults per page
order_by[]stringfalseorder by. Also accepts cf_<id> / -cf_<id> to sort by any active workspace custom field. Multi_select and users CF types sort by their canonicalized (sorted) value array, so projects sharing the same set cluster together.
pinnedbooleanfalsefilter by only pinned tasks
archivedbooleanfalsefilter by archived state (true = archived only, false = active only, omit = active only, empty = all projects)
completedbooleanfalsefilter by completion state (true = completed only, false = non-completed only, empty = all projects, omit = non-completed only, or all projects when archived=true)
privatebooleanfalsefilter by project privacy (true for private, false for public)
namestringfalsefilter by project name or client name
client_id[]integerfalsefilter by client IDs
creator_id[]integerfalsefilter by project creator id
tag_id[]integerfalsefilter by tag IDs
assignee_user_id[]integerfalsefilter by assignee user IDs; pass empty value (?assignee_user_id=) to include projects without user assignees
project_id[]integerfalsefilter by project IDs
user_id[]integerfalsereturn only projects accessible by the given users (requires manage workspace users when inspecting another user). Incompatible with only_me.
only_mebooleanfalsereturn public projects union projects the current user is a member of (Track-shaped timer/picker scope; suppresses admin view_private_projects full-access and locked-private upsell during access resolution; still honors view_public_projects). Incompatible with user_id.
include_ratesbooleanfalseincludes the projects' rate data
include_rolloverbooleanfalsecomputes and returns rollover_mins on each recurring instance (off by default — opt in only when the FE displays rollover, since per-chain hydration costs an extra OLTP + 2 warehouse queries)
include_idle_recurring_templatesbooleanfalsesurface recurring templates (rrule != null) that have no live, uncompleted instance — i.e. either never materialized or every prior instance is already completed. Off by default. Useful for letting the user start the next period after dropping auto-first-instance materialization.
collapse_recurringbooleanfalseseries-shaped listing. A series appears as its template whenever the template matches the listing; instances matching filters their template does not (access, name, completed, ...) appear individually. Supersedes include_idle_recurring_templates while set. Aggregations on a template row describe the template alone (its blueprint tasks, no tracked time), not the series.
include_draftsbooleanfalseinclude draft projects in the response (default false hides them; requires view_draft_projects permission)
include_locked_privatebooleanfalseinclude the workspace's private projects read-only for role-entitled users whose plan lacks the private-projects feature (upsell flow). Their activity figures are blurred to zero. Off by default; other consumers never see private projects they can't otherwise access.
start_datestringfalsefilter projects overlapping date range (start). Used with end_date to find projects where project.start_date <= end_date AND project.end_date >= start_date
end_datestringfalsefilter projects overlapping date range (end). Used with start_date to find projects where project.start_date <= end_date AND project.end_date >= start_date
date_overlap_startstringfalse[LEGACY] use start_date instead
date_overlap_endstringfalse[LEGACY] use end_date instead
cf_filter[]stringfalsefilter by custom field values (format: fieldID:value1,value2)

Response​

200​

NameTypeDescription
dataArray of object-
no_project_picker_parent_group_countinteger-
no_project_task_countinteger-
pageinteger-
per_pageinteger-
totalinteger-
data​
NameTypeDescription
activeboolean-
alert_statusobject-
archived_atstring-
auto_compute_estimatesboolean-
billableboolean-
clientobject-
client_idinteger-
colorstring-
completed_atstring-
completion_modestringValid values: manual, automatic.
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
draftboolean-
end_datestring-
estimate_sourcestringValid values: manual, tasks.
estimated_minsinteger-
filtered_task_countinteger-
fixed_feeobject-
idinteger-
is_templateboolean-
namestring-
parent_project_idinteger-
permissionsArray of string-
picker_parent_group_countinteger-
pinnedboolean-
privateboolean-
rateobject-
recurring_project_idinteger-
rollover_minsintegernull
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestring-
source_template_idinteger-
start_datestring-
tag_idsArray of integer-
tagsArray of object-
task_estimated_minsinteger-
toggl_user_idinteger-
total_tasksinteger-
total_tracked_secsinteger-
updated_atstring-
workspace_idinteger-
alert_status​
NameTypeDescription
estimate_used_pctnumber-
has_active_alertsboolean-
highest_triggered_thresholdinteger-
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-
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-
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-

400​

Invalid request

500​

Internal Server Error

POST Create a new project​

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

Creates a new project with the provided name, workspace ID, parent project ID, and client ID. Omitted private inherits the parent project visibility, or the workspace default when there is no parent. Explicit values retain normal authorization.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects \
-H "Content-Type: application/json" \
-d '\{"auto_compute_estimates":"boolean","billable":"boolean","client_id":"integer","color":"string","completion_mode":"string","custom_fields":\{\},"description":"string","draft":"boolean","end_date":"string","estimate_source":"string","estimated_mins":"integer","fixed_fee":\{"amount":"number","currency":"string"\},"is_template":"boolean","name":"string","parent_project_id":"integer","pinned":"boolean","private":"boolean","rollover_mode":"string","rrule":"string","start_date":"string","tag_ids":[\{\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
auto_compute_estimatesboolean-
billableboolean-
client_idinteger-
colorstring-
completion_modestringValid values: manual, automatic.
custom_fieldsobject-
descriptionstring-
draftboolean-
end_datestring-
estimate_sourcestringnull
estimated_minsinteger-
fixed_feeobject-
is_templateboolean-
namestring-
parent_project_idinteger-
pinnedboolean-
privateboolean-
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestring-
start_datestring-
tag_idsArray of integer-
custom_fields​
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-

Response​

201​

Project created successfully

400​

Invalid project parameters

500​

Internal Server Error

GET Get a project by ID​

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

Returns a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

200​

NameTypeDescription
activeboolean-
alert_statusobject-
archived_atstring-
auto_compute_estimatesboolean-
billableboolean-
clientobject-
client_idinteger-
colorstring-
completed_atstring-
completion_modestringValid values: manual, automatic.
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
draftboolean-
end_datestring-
estimate_sourcestringValid values: manual, tasks.
estimated_minsinteger-
filtered_task_countinteger-
fixed_feeobject-
idinteger-
is_templateboolean-
namestring-
parent_project_idinteger-
permissionsArray of string-
picker_parent_group_countinteger-
pinnedboolean-
privateboolean-
rateobject-
recurring_project_idinteger-
rollover_minsintegernull
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestring-
source_template_idinteger-
start_datestring-
tag_idsArray of integer-
tagsArray of object-
task_estimated_minsinteger-
toggl_user_idinteger-
total_tasksinteger-
total_tracked_secsinteger-
updated_atstring-
workspace_idinteger-
alert_status​
NameTypeDescription
estimate_used_pctnumber-
has_active_alertsboolean-
highest_triggered_thresholdinteger-
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-
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-
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-

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

PUT Update project​

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

Update an existing project

curl -X PUT https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id} \
-H "Content-Type: application/json" \
-d '\{"auto_compute_estimates":"boolean","billable":"boolean","client_id":"integer","color":"string","completion_mode":"string","custom_fields":\{\},"description":"string","draft":"boolean","end_date":"string","estimate_source":"string","estimated_mins":"integer","fixed_fee":\{"amount":"number","currency":"string"\},"is_template":"boolean","name":"string","parent_project_id":"integer","pinned":"boolean","private":"boolean","rollover_mode":"string","rrule":"string","start_date":"string","tag_ids":[\{\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueProject ID

Body​

NameTypeDescription
auto_compute_estimatesboolean-
billableboolean-
client_idinteger-
colorstring-
completion_modestringValid values: manual, automatic.
custom_fieldsobject-
descriptionstring-
draftboolean-
end_datestring-
estimate_sourcestringnull
estimated_minsinteger-
fixed_feeobject-
is_templateboolean-
namestring-
parent_project_idinteger-
pinnedboolean-
privateboolean-
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestring-
start_datestring-
tag_idsArray of integer-
custom_fields​
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

DELETE Delete a project by ID​

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

Deletes a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

PATCH Patch project​

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

Partially update an existing project

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id} \
-H "Content-Type: application/json" \
-d '\{"auto_compute_estimates":"boolean","billable":"boolean","client_id":"integer","color":"string","completion_mode":"string","custom_fields":\{\},"description":"string","draft":"boolean","end_date":"string","estimate_source":"string","estimated_mins":"integer","fixed_fee":\{"amount":"number","currency":"string"\},"name":"string","parent_project_id":"integer","pinned":"boolean","private":"boolean","rollover_mode":"string","rrule":"string","start_date":"string","tag_ids":[\{\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueProject ID

Body​

NameTypeDescription
auto_compute_estimatesbooleannull
billableboolean-
client_idintegernull
colorstringnull
completion_modestringValid values: manual, automatic.
custom_fieldsobject-
descriptionstringnull
draftboolean-
end_datestringnull
estimate_sourcestringValid values: manual, tasks.
estimated_minsintegernull
fixed_feeobject-
namestring-
parent_project_idintegernull
pinnedboolean-
privateboolean-
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestringnull
start_datestringnull
tag_idsArray of integer-
custom_fields​
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

PATCH Archives a project by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/archive

Archives a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

GET Get a project with its children sub-projects by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/children

Returns a project and its children sub-projects by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Query​

nametyperequireddescription
pageintegerfalsepage number
per_pageintegerfalseresults per page
order_by[]stringfalseorder by

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
activeboolean-
alert_statusobject-
archived_atstring-
auto_compute_estimatesboolean-
billableboolean-
clientobject-
client_idinteger-
colorstring-
completed_atstring-
completion_modestringValid values: manual, automatic.
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
draftboolean-
end_datestring-
estimate_sourcestringValid values: manual, tasks.
estimated_minsinteger-
filtered_task_countinteger-
fixed_feeobject-
idinteger-
is_templateboolean-
namestring-
parent_project_idinteger-
permissionsArray of string-
picker_parent_group_countinteger-
pinnedboolean-
privateboolean-
rateobject-
recurring_project_idinteger-
rollover_minsintegernull
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestring-
source_template_idinteger-
start_datestring-
tag_idsArray of integer-
tagsArray of object-
task_estimated_minsinteger-
toggl_user_idinteger-
total_tasksinteger-
total_tracked_secsinteger-
updated_atstring-
workspace_idinteger-
alert_status​
NameTypeDescription
estimate_used_pctnumber-
has_active_alertsboolean-
highest_triggered_thresholdinteger-
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-
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-
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-

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

GET List project memmbers​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members

Returns a list of userIDs and groupIDs that are part of the given project.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

200​

List of project members

NameTypeDescription
group_idsArray of object-
project_idinteger-
user_idsArray of object-
group_ids​
NameTypeDescription
group_idinteger-
managerbooleannull
role_idinteger-
user_ids​
NameTypeDescription
managerboolean-
user_idinteger-

400​

Invalid request

403​

Forbidden

404​

Project not found

500​

Internal Server Error

PUT Update project member role​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members

Updates the role of a project member (user or group).

curl -X PUT https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members \
-H "Content-Type: application/json" \
-d '\{"group_id":"integer","role_id":"integer","user_id":"integer"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Body​

NameTypeDescription
group_idinteger-
role_idinteger-
user_idinteger-

Response​

204​

No Content

400​

Invalid request

403​

Forbidden

404​

Project not found

500​

Internal Server Error

POST Add project members​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members

Adds users and groups to the given project.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members \
-H "Content-Type: application/json" \
-d '\{"group_ids":[\{\}],"role_id":"integer","user_ids":[\{\}]\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Body​

NameTypeDescription
group_idsArray of integer-
role_idinteger-
user_idsArray of integer-

Response​

204​

No Content

400​

Invalid request

403​

Forbidden

404​

Project not found

500​

Internal Server Error

DELETE Remove project member​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members

Removes a single user or group from the given project.

curl -X DELETE https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/members \
-H "Content-Type: application/json" \
-d '\{"group_id":"integer","user_id":"integer"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Body​

NameTypeDescription
group_idinteger-
user_idinteger-

Response​

204​

No Content

400​

Invalid request

403​

Forbidden

404​

Project not found

500​

Internal Server Error

GET Get a project with its parent projects by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/parents

Returns a project and its parent projects by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Query​

nametyperequireddescription
pageintegerfalsepage number
per_pageintegerfalseresults per page
order_by[]stringfalseorder by

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
per_pageinteger-
data​
NameTypeDescription
activeboolean-
archived_atstring-
auto_compute_estimatesboolean-
billableboolean-
clientobject-
client_idinteger-
colorstring-
completed_atstring-
completion_modestringValid values: manual, automatic.
created_atstring-
custom_field_valuesArray of object-
deleted_atstring-
descriptionstring-
draftboolean-
end_datestring-
estimate_sourcestringValid values: manual, tasks.
estimated_minsinteger-
fixed_feeobject-
idinteger-
is_templateboolean-
namestring-
parent_project_idinteger-
permissionsArray of string-
pinnedboolean-
privateboolean-
rateobject-
recurring_project_idinteger-
rollover_modestringValid values: expire, carry_all, carry_over.
rrulestring-
source_template_idinteger-
start_datestring-
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-
fixed_fee​
NameTypeDescription
amountnumber-
currencystring-
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-

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

POST Pin a project by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/pinned

Pins a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

DELETE Unpin a project by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/pinned

Unpins a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

PATCH Restore a project by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/restore

Restores a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

PATCH Unarchive a project by ID​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/projects/{project_id}/unarchive

Unarchives a project by the provided ID.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
project_idintegertrueproject ID

Response​

204​

No Content

400​

Invalid request

404​

Project does not exist

500​

Internal Server Error

© 2026 Toggl. All rights reserved.