Skip to main content

Calendar

GET List calendar integrations​

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

List calendar integrations, i.e. the email accounts connected.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Response​

200​

List of integrations, aka connected emails

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
auto_trackboolean-
calendar_integration_idinteger-
calendarsArray of object-
created_atstring-
emailstring-
error_statusstring-
has_write_scopeboolean-
origin_product_idintegerThe product that initially integrated the calendar.
providerstring-
scopesArray of string-
calendars​
NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

400​

Invalid request

500​

Internal Server Error

GET Setup calendar integration​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/setup

Connect a new calendar integration.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
providerstringtrueCalendar service provider which the calendars will be retrieved
return_tostringfalsePage to which the user will be redirected after authenticating

Response​

302​

Redirect to oAuth URL

400​

Invalid request

402​

status payment required: integration already exists

500​

Internal Server Error

GET List calendars for a particular integration​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/{integration_id}

List calendars for a particular integration, i.e. the calendars available from the connected account.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Response​

200​

List of calendars

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

400​

Invalid request

500​

Internal Server Error

DELETE Delete a calendar integration​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/{integration_id}

Delete a calendar integration. Runs to completion once authorized, even if the client disconnects. The response waits a few seconds for the cleanup of the entries the integration synced, so a refetch on it usually sees the result.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Query​

nametyperequireddescription
preserve_entitiesbooleanfalseWhen true, leave linked entities in place. Default false: future-planned calendar time entries are soft-deleted asynchronously; tasks and time blocks are retained. Either way, entries that outlive the disconnect have their calendar_event_id cleared.

Response​

204​

No Content

400​

Invalid request

500​

Internal Server Error

PUT Update calendar integration​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/{integration_id}/calendars/{calendar_id}

Update calendar integration. Setting selected to false also cleans up the time entries the calendar synced, runs to completion once authorized even if the client disconnects, and waits a few seconds for that cleanup before responding.

curl -X PUT https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/{integration_id}/calendars/{calendar_id} \
-H "Content-Type: application/json" \
-d '\{"auto_track":"boolean","background_color":"string","calendar_id":"integer","calendar_integration_id":"integer","created_at":"string","default_action":"string","default_planned_task_id":"integer","default_project_id":"integer","default_workspace_id":"integer","deleted_at":"string","external_id":"string","focus_auto_track":"boolean","foreground_color":"string","name":"string","remind_tracking":"boolean","selected":"boolean","updated_at":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID
calendar_idintegertruecalendar ID

Body​

NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

Response​

204​

No Content

400​

Invalid request

500​

Internal Server Error

GET Re-authorize calendar integration.​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/{integration_id}/reauth

Re-request authorization for an existing calendar integration, refreshing its token. By default this also escalates to write scope (the "sync everywhere" upgrade flow); pass preserve_scope=true to re-request the integration's existing scopes instead.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Query​

nametyperequireddescription
return_tostringtruePage to which the user will be redirected after authenticating
preserve_scopebooleanfalseRe-request the integration's existing scopes instead of escalating to write

Response​

302​

Redirect to oAuth URL

400​

Invalid request

404​

Integration not found

500​

Internal Server Error

POST Update integration​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/integrations/calendar/{integration_id}/update

Update integration.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Query​

nametyperequireddescription
focus_auto_track_defaultbooleanfalseOverride the auto-track default stamped onto newly materialized calendars. Defaults to false when omitted.

Response​

200​

List of calendars

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

400​

Invalid request

500​

Internal Server Error

GET List calendar integrations​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar

List calendar integrations, i.e. the email accounts connected.

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

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID

Response​

200​

List of integrations, aka connected emails

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
auto_trackboolean-
calendar_integration_idinteger-
calendarsArray of object-
created_atstring-
emailstring-
error_statusstring-
has_write_scopeboolean-
origin_product_idintegerThe product that initially integrated the calendar.
providerstring-
scopesArray of string-
calendars​
NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

400​

Invalid request

500​

Internal Server Error

GET Setup calendar integration​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/setup

Connect a new calendar integration.

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

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
providerstringtrueCalendar service provider which the calendars will be retrieved
return_tostringfalsePage to which the user will be redirected after authenticating

Response​

302​

Redirect to oAuth URL

400​

Invalid request

402​

status payment required: integration already exists

500​

Internal Server Error

GET List calendars for a particular integration​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}

List calendars for a particular integration, i.e. the calendars available from the connected account.

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

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Response​

200​

List of calendars

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

400​

Invalid request

500​

Internal Server Error

DELETE Delete a calendar integration​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}

Delete a calendar integration. Runs to completion once authorized, even if the client disconnects. The response waits a few seconds for the cleanup of the entries the integration synced, so a refetch on it usually sees the result.

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

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Query​

nametyperequireddescription
preserve_entitiesbooleanfalseWhen true, leave linked entities in place. Default false: future-planned calendar time entries are soft-deleted asynchronously; tasks and time blocks are retained. Either way, entries that outlive the disconnect have their calendar_event_id cleared.

Response​

204​

No Content

400​

Invalid request

500​

Internal Server Error

PUT Update calendar integration​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}/calendars/{calendar_id}

Update calendar integration. Setting selected to false also cleans up the time entries the calendar synced, runs to completion once authorized even if the client disconnects, and waits a few seconds for that cleanup before responding.

curl -X PUT https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}/calendars/{calendar_id} \
-H "Content-Type: application/json" \
-d '\{"auto_track":"boolean","background_color":"string","calendar_id":"integer","calendar_integration_id":"integer","created_at":"string","default_action":"string","default_planned_task_id":"integer","default_project_id":"integer","default_workspace_id":"integer","deleted_at":"string","external_id":"string","focus_auto_track":"boolean","foreground_color":"string","name":"string","remind_tracking":"boolean","selected":"boolean","updated_at":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID
calendar_idintegertruecalendar ID

Body​

NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

Response​

204​

No Content

400​

Invalid request

500​

Internal Server Error

GET Re-authorize calendar integration.​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}/reauth

Re-request authorization for an existing calendar integration, refreshing its token. By default this also escalates to write scope (the "sync everywhere" upgrade flow); pass preserve_scope=true to re-request the integration's existing scopes instead.

curl  https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}/reauth \
-H "Content-Type: application/json" \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Query​

nametyperequireddescription
return_tostringtruePage to which the user will be redirected after authenticating
preserve_scopebooleanfalseRe-request the integration's existing scopes instead of escalating to write

Response​

302​

Redirect to oAuth URL

400​

Invalid request

404​

Integration not found

500​

Internal Server Error

POST Update integration​

https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}/update

Update integration.

curl -X POST https://focus.toggl.com/api/workspaces/{workspace_id}/integrations/calendar/{integration_id}/update \
-H "Content-Type: application/json" \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
workspace_idintegertrueworkspace ID
integration_idintegertrueintegration ID

Query​

nametyperequireddescription
focus_auto_track_defaultbooleanfalseOverride the auto-track default stamped onto newly materialized calendars. Defaults to false when omitted.

Response​

200​

List of calendars

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
auto_trackboolean-
background_colorstring-
calendar_idinteger-
calendar_integration_idinteger-
created_atstring-
default_actionstring-
default_planned_task_idinteger-
default_project_idinteger-
default_workspace_idinteger-
deleted_atstring-
external_idstring-
focus_auto_trackboolean-
foreground_colorstring-
namestring-
remind_trackingbooleanThe following fields are deprecated but we need to keep them for backward compatibility with previous versions of mobile apps
selectedboolean-
updated_atstring-

400​

Invalid request

500​

Internal Server Error

© 2026 Toggl. All rights reserved.