Skip to main content

Time-off

GET Get time offs of organization users

https://focus.toggl.com/api/organizations/{organization_id}/timeoff

Returns the time off of the given organization users with personal detail stripped: each entry carries only its id, the user it belongs to, and the start and end of the period — no category and no audit timestamps. Available to any member of the organization. user_id is required and repeatable, and so is the start_date/end_date window; both are dates (YYYY-MM-DD), interpreted in UTC, and end_date is inclusive of that whole day. An entry is returned when its period overlaps the window at either edge, so an entry that starts before start_date or ends after end_date is still included.

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

Parameters

Path

nametyperequireddescription
organization_idintegertrueOrganization ID

Query

nametyperequireddescription
user_id[]integertrueUser IDs
start_datestringtrueFrom date (YYYY-MM-DD)
end_datestringtrueTo date (YYYY-MM-DD)

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
end_timestringEndTime is the RFC3339 timestamp (UTC) the time off period ends at; always after StartTime.
start_timestringStartTime is the RFC3339 timestamp (UTC) the time off period starts at.
timeoff_idintegerID is the unique identifier of the time off entry.
user_idintegerUserID is the user the time off was booked for.

400

Invalid parameters

403

Forbidden

500

Internal Server Error

GET Get time off for organization user

https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id}

Returns the full time off entries of one organization user, including the category and the creation and last-modification timestamps. Requires the manage_time_off organization permission — this applies to reading as well, and to a caller's own entries. The from/to window is required; both are dates (YYYY-MM-DD), interpreted in UTC, and to is inclusive of that whole day. An entry is returned when its period overlaps the window at either edge, so an entry that starts before from or ends after to is still included.

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

Parameters

Path

nametyperequireddescription
organization_idintegertrueOrganization ID
user_idintegertrueUser ID

Query

nametyperequireddescription
fromstringtrueFrom date (YYYY-MM-DD)
tostringtrueTo date (YYYY-MM-DD)

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
created_atstringCreatedAt is the RFC3339 timestamp (UTC) the entry was created at.
end_timestringEndTime is the RFC3339 timestamp (UTC) the time off period ends at; always after StartTime.
organization_idintegerOrganizationID is the organization the entry belongs to.
start_timestringStartTime is the RFC3339 timestamp (UTC) the time off period starts at.
timeoff_idintegerID is the unique identifier of the time off entry.
typestringType is the category of the time off: vacation, sick, parental or other. Omitted when the entry has no category.
updated_atstringUpdatedAt is the RFC3339 timestamp (UTC) the entry was last modified at.
user_idintegerUserID is the user the time off was booked for.

400

Invalid parameters

403

Forbidden

500

Internal Server Error

PUT Update time off for the specified user

https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id}

Updates one or more existing time off entries of the specified user in a single call. The request body is an array: each element identifies the entry by its timeoff_id and carries the new start_time and end_time (RFC3339) plus an optional type. Every element replaces the entry in full, so omitting type clears the entry's existing category rather than leaving it unchanged — resend the current value to keep it. Include each timeoff_id at most once: with duplicates, which element wins is undefined. Elements whose timeoff_id does not match an entry of the user are skipped. All elements are applied in a single transaction: if applying them would leave any two of the user's approved or pending time off entries overlapping (entries created through this API are approved), the whole request fails with a 409 and nothing is updated. Requires the manage_time_off organization permission. Responds 200 with the entries that were actually updated.

curl -X PUT https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id} \
-H "Content-Type: application/json" \
-d '[\{"end_time":"string","start_time":"string","timeoff_id":"integer","type":"string"\}]' \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueOrganization ID
user_idintegertrueUser ID

Body

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
end_timestringEndTime is the RFC3339 timestamp the time off period ends at; must be after StartTime. Send it in UTC: offsets are discarded, not converted.
start_timestringStartTime is the RFC3339 timestamp the time off period starts at. Send it in UTC: offsets are discarded, not converted.
timeoff_idintegerID is the unique identifier of the time off entry to update.
typestringType is the optional category of the time off: vacation, sick, parental or other. Omitting it clears the entry's stored category. Valid values: vacation, sick, parental, other.

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
created_atstringCreatedAt is the RFC3339 timestamp (UTC) the entry was created at.
end_timestringEndTime is the RFC3339 timestamp (UTC) the time off period ends at; always after StartTime.
organization_idintegerOrganizationID is the organization the entry belongs to.
start_timestringStartTime is the RFC3339 timestamp (UTC) the time off period starts at.
timeoff_idintegerID is the unique identifier of the time off entry.
typestringType is the category of the time off: vacation, sick, parental or other. Omitted when the entry has no category.
updated_atstringUpdatedAt is the RFC3339 timestamp (UTC) the entry was last modified at.
user_idintegerUserID is the user the time off was booked for.

400

Invalid parameters

403

Forbidden

409

Overlapping time off entry

500

Internal Server Error

POST Create time off for the specified user

https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id}

Creates one or more time off entries for the specified user in a single call. The request body is an array: each element needs a start_time and an end_time (RFC3339) and may carry an optional type. All elements are created in a single transaction: a period that overlaps one of the user's approved or pending time off entries — or another element of the same request — fails the whole request with a 409 and nothing is created (entries created through this API are approved). Requires the manage_time_off organization permission. Responds 200 with the created entries, each including the id it was assigned.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id} \
-H "Content-Type: application/json" \
-d '[\{"end_time":"string","start_time":"string","type":"string"\}]' \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueOrganization ID
user_idintegertrueUser ID

Body

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
end_timestringEndTime is the RFC3339 timestamp the time off period ends at; must be after StartTime. Send it in UTC: offsets are discarded, not converted.
start_timestringStartTime is the RFC3339 timestamp the time off period starts at. Send it in UTC: offsets are discarded, not converted.
typestringType is the optional category of the time off: vacation, sick, parental or other. Omit to leave the entry uncategorized. Valid values: vacation, sick, parental, other.

Response

200

NameTypeDescription
itemsArray of object-
items
NameTypeDescription
created_atstringCreatedAt is the RFC3339 timestamp (UTC) the entry was created at.
end_timestringEndTime is the RFC3339 timestamp (UTC) the time off period ends at; always after StartTime.
organization_idintegerOrganizationID is the organization the entry belongs to.
start_timestringStartTime is the RFC3339 timestamp (UTC) the time off period starts at.
timeoff_idintegerID is the unique identifier of the time off entry.
typestringType is the category of the time off: vacation, sick, parental or other. Omitted when the entry has no category.
updated_atstringUpdatedAt is the RFC3339 timestamp (UTC) the entry was last modified at.
user_idintegerUserID is the user the time off was booked for.

400

Invalid parameters

403

Forbidden

409

Overlapping time off entry

500

Internal Server Error

DELETE Delete time off for the specified user

https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id}

Deletes one or more time off entries of the specified user. The request body is an array of time off ids. Ids that do not match an entry of the user are skipped silently — the response does not indicate how many entries were deleted. Requires the manage_time_off organization permission. Responds 204 with no body.

curl -X DELETE https://focus.toggl.com/api/organizations/{organization_id}/timeoff/users/{user_id} \
-H "Content-Type: application/json" \
-d '[\{\}]' \
-u <email>:<password>

Parameters

Path

nametyperequireddescription
organization_idintegertrueOrganization ID
user_idintegertrueUser ID

Body

NameTypeDescription
itemsArray of integer-

Response

204

No Content

400

Invalid parameters

403

Forbidden

500

Internal Server Error

© 2026 Toggl. All rights reserved.