Skip to main content

Timesheet-setups

GET List timesheet setups in the workspace

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/timesheet-setups

Returns the timesheet setups configured in the workspace — each one defines the period cadence, the approval chain and the members whose timesheets it generates. Setups whose end date has passed are left out unless include_discontinued is set, and the member and approver filters narrow the list to the setups a given user takes part in. Requires the manage_timesheet_approvals permission.

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

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query

nametyperequireddescription
include_discontinuedbooleanfalseinclude setups whose end_date has passed
user_account_idintegerfalsefilter to setups containing this member
approver_user_account_idintegerfalsefilter to setups where this user is an approver

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
created_atstringCreatedAt is the row creation timestamp.
deleted_atstringDeletedAt soft-deletes the setup. While set, the setup is excluded from active queries and no new periods are generated for it.
email_reminder_enabledbooleanEmailReminderEnabled gates the pending-reminder email channel for this setup. When false (the default) the reminder cron skips this setup's members even if ReminderDay/ReminderTime are set.
end_datestringEndDate is set when the setup is discontinued. While nil, the setup continues to generate periods indefinitely. When set, no new periods are generated past this date.
idintegerID is the surrogate key.
period_daysintegerPeriodDays is the length of a period in days. Required (and minimum 1) when Periodicity == PeriodicityDays. Must be nil otherwise.
periodicitystringPeriodicity defines the cadence of the timesheet periods. See the Periodicity constants for valid values. Valid values: weekly, monthly, days.
reminder_dayintegerReminderDay defines when in the period a reminder is sent to members who haven't submitted yet. Interpretation depends on Periodicity: - weekly: 0..6 (0 = Sunday) - monthly: 1..31 (clamps to month length) - days: number of days into the period Reminders are not sent when ReminderDay or ReminderTime is nil.
reminder_timestringReminderTime is the wall-clock time the reminder is sent, formatted HH:MM, interpreted in each member's own timezone (resolved when the reminder cron runs; UTC when the member's timezone is unknown). Reminders are not sent when ReminderDay or ReminderTime is nil.
start_datestringStartDate is the anchor for period computation and the inclusive start of the very first period. All subsequent period boundaries derive from this date plus the periodicity rule.
updated_atstringUpdatedAt tracks the last mutation. Nil for never-updated rows.
workspace_idintegerWorkspaceID is the workspace this setup belongs to.

400

Bad Request

403

forbidden (requires manage_timesheet_approvals)

500

Internal Server Error

GET Get a timesheet setup

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/timesheet-setups/{setup_id}

Returns one timesheet setup by ID, with its period cadence, start and end dates and reminder settings. The approval chain is available from the setup's /approvers endpoint. Requires the manage_timesheet_approvals permission.

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

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
setup_idintegertruesetup ID

Response

200

NameTypeDescription
created_atstringCreatedAt is the row creation timestamp.
deleted_atstringDeletedAt soft-deletes the setup. While set, the setup is excluded from active queries and no new periods are generated for it.
email_reminder_enabledbooleanEmailReminderEnabled gates the pending-reminder email channel for this setup. When false (the default) the reminder cron skips this setup's members even if ReminderDay/ReminderTime are set.
end_datestringEndDate is set when the setup is discontinued. While nil, the setup continues to generate periods indefinitely. When set, no new periods are generated past this date.
idintegerID is the surrogate key.
period_daysintegerPeriodDays is the length of a period in days. Required (and minimum 1) when Periodicity == PeriodicityDays. Must be nil otherwise.
periodicitystringPeriodicity defines the cadence of the timesheet periods. See the Periodicity constants for valid values. Valid values: weekly, monthly, days.
reminder_dayintegerReminderDay defines when in the period a reminder is sent to members who haven't submitted yet. Interpretation depends on Periodicity: - weekly: 0..6 (0 = Sunday) - monthly: 1..31 (clamps to month length) - days: number of days into the period Reminders are not sent when ReminderDay or ReminderTime is nil.
reminder_timestringReminderTime is the wall-clock time the reminder is sent, formatted HH:MM, interpreted in each member's own timezone (resolved when the reminder cron runs; UTC when the member's timezone is unknown). Reminders are not sent when ReminderDay or ReminderTime is nil.
start_datestringStartDate is the anchor for period computation and the inclusive start of the very first period. All subsequent period boundaries derive from this date plus the periodicity rule.
updated_atstringUpdatedAt tracks the last mutation. Nil for never-updated rows.
workspace_idintegerWorkspaceID is the workspace this setup belongs to.

403

forbidden (requires manage_timesheet_approvals)

404

not found or deleted

500

Internal Server Error

GET List active approvers of a timesheet setup

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/timesheet-setups/{setup_id}/approvers

Returns the setup's active approvers ordered by layer, which is the chain a submitted timesheet travels through; several approvers may share one layer, in which case any of them can act for it. Requires the manage_timesheet_approvals permission.

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

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
setup_idintegertruesetup ID

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
created_atstringCreatedAt is the row creation timestamp.
deleted_atstringDeletedAt soft-deletes the approver assignment. While set, the row is treated as if the approver was never assigned.
idintegerID is the surrogate key.
layerintegerLayer is the 0-indexed tier of this approver in the approval chain. A layer may have multiple approvers (multiple rows sharing the same setup_id and layer); any one of them acting is enough to advance the timesheet to the next layer.
setup_idintegerSetupID references the parent TimesheetSetup.
user_account_idintegerUserAccountID is the approver's account identifier.
workspace_idintegerWorkspaceID is the workspace this approver's setup belongs to.

400

invalid setup ID

403

forbidden (requires manage_timesheet_approvals)

404

setup not found or deleted

500

Internal Server Error

GET List members of a timesheet setup

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/timesheet-setups/{setup_id}/members

Returns the members assigned to a timesheet setup — the users whose timesheets it generates each period — with their current status. Members who have been discontinued are left out unless include_discontinued is set. Requires the manage_timesheet_approvals permission.

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

Parameters

Path

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
setup_idintegertruesetup ID

Query

nametyperequireddescription
include_discontinuedbooleanfalseinclude discontinued members

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
created_atstringCreatedAt is the row creation timestamp.
deleted_atstringDeletedAt soft-deletes the membership. While set, the row is treated as if it didn't exist for membership checks.
discontinued_atstringDiscontinuedAt marks the member as discontinued: they keep their past timesheets but are excluded from setup resolution, so no new periods are generated for them. Nil means active; reactivation clears it. Independent of DeletedAt (removal).
idintegerID is the surrogate key.
setup_idintegerSetupID references the parent TimesheetSetup.
statusstringStatus is the member's lifecycle state derived from DiscontinuedAt. It is populated by the service layer and has no backing DB column. Valid values: active, discontinued.
user_account_idintegerUserAccountID is the member's account identifier.
workspace_idintegerWorkspaceID is the workspace this member's setup belongs to.

400

invalid setup ID

403

forbidden (requires manage_timesheet_approvals)

404

setup not found or deleted

500

Internal Server Error

© 2026 Toggl. All rights reserved.