Skip to main content

Ghosts

GET Get all ghosts​

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

List all ghosts, paginated, sorted (by name), and searchable (by name).

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Query​

nametyperequireddescription
pageintegerfalsepage number
rowsintegerfalseNumber of items per page (default: 50, max: 100).
order_bystringfalseField and direction to sort by, formatted as 'field,direction'. Fields: 'name' Defaults to 'name,asc' if not given.
searchstringfalseGhost name to search for. Is a contains-anywhere search
project_ids[]integerfalseFilter resp by given project ids that ghosts are assigned to
task_ids[]integerfalseFilter resp by given task ids that ghosts are assigned to
team_ids[]integerfalseFilter resp by given team ids that ghosts are assigned to
ghost_ids[]integerfalseFilter resp by given ghost ids
include_embodiedbooleanfalseInclude ghosts that have been embodied (default: false)

Response​

200​

NameTypeDescription
dataArray of object-
pageinteger-
rowsinteger-
totalinteger-
data​
NameTypeDescription
assignedobject-
created_atstring-
deleted_atstring-
descriptionstring-
embodied_atstring-
idinteger-
namestring-
updated_atstring-
user_idinteger-
assigned​
NameTypeDescription
projectsArray of object-
tasksArray of object-
team_idsArray of integer-
projects​
NameTypeDescription
colorstring-
idinteger-
namestring-
privateboolean-
tasks​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

500​

Internal Server Error

POST Create ghost​

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

Create a new ghost.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/ghosts \
-H "Content-Type: application/json" \
-d '\{"assign_projects":[\{\}],"assign_tasks":[\{\}],"assign_teams":[\{\}],"description":"string","name":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
assign_projectsArray of integer-
assign_tasksArray of integer-
assign_teamsArray of integer-
descriptionstring-
namestring-

Response​

201​

ghost created successfully

400​

Invalid request

403​

Forbidden

500​

Internal Server Error

POST Bulk create ghosts​

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

Create multiple new ghosts. Maximum 50 items per request; request body capped at 1 MiB.

curl -X POST https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/ghosts/bulk_create \
-H "Content-Type: application/json" \
-d '[\{"assign_projects":[\{\}],"assign_tasks":[\{\}],"assign_teams":[\{\}],"description":"string","name":"string"\}]' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
assign_projectsArray of integer-
assign_tasksArray of integer-
assign_teamsArray of integer-
descriptionstring-
namestring-

Response​

201​

ghosts created successfully

400​

Invalid request

403​

Forbidden

500​

Internal Server Error

PATCH Bulk update ghosts​

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

Update multiple ghosts. Maximum 50 items per request; request body capped at 1 MiB.

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/ghosts/bulk_update \
-H "Content-Type: application/json" \
-d '[\{"assign_action":"string","assign_projects":[\{\}],"assign_tasks":[\{\}],"assign_teams":[\{\}],"description":"string","id":"integer","name":"string"\}]' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID

Body​

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
assign_actionstring-
assign_projectsArray of integer-
assign_tasksArray of integer-
assign_teamsArray of integer-
descriptionstring-
idinteger-
namestring-

Response​

200​

ghosts updated successfully

NameTypeDescription
itemsArray of object-
items​
NameTypeDescription
assignedobject-
created_atstring-
deleted_atstring-
descriptionstring-
embodied_atstring-
idinteger-
namestring-
updated_atstring-
user_idinteger-
assigned​
NameTypeDescription
projectsArray of object-
tasksArray of object-
team_idsArray of integer-
projects​
NameTypeDescription
colorstring-
idinteger-
namestring-
privateboolean-
tasks​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Forbidden

500​

Internal Server Error

GET Get a single ghost​

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

Retrieve a single ghost by the ghost id.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
ghost_idintegertrueghost ID

Response​

200​

NameTypeDescription
assignedobject-
created_atstring-
deleted_atstring-
descriptionstring-
embodied_atstring-
idinteger-
namestring-
updated_atstring-
user_idinteger-
assigned​
NameTypeDescription
projectsArray of object-
tasksArray of object-
team_idsArray of integer-
projects​
NameTypeDescription
colorstring-
idinteger-
namestring-
privateboolean-
tasks​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Forbidden

404​

Not found

500​

Internal Server Error

DELETE Delete ghost​

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

Delete an existing new ghost.

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

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
ghost_idintegertrueghost ID

Response​

204​

No Content

400​

Invalid request

403​

Forbidden

500​

Internal Server Error

PATCH Update ghost​

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

Update an existing new ghost. All fields are optional, but at least one must be provided.

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/ghosts/{ghost_id} \
-H "Content-Type: application/json" \
-d '\{"assign_action":"string","assign_projects":[\{\}],"assign_tasks":[\{\}],"assign_teams":[\{\}],"description":"string","id":"integer","name":"string"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
ghost_idintegertrueghost ID

Body​

NameTypeDescription
assign_actionstring-
assign_projectsArray of integer-
assign_tasksArray of integer-
assign_teamsArray of integer-
descriptionstring-
idinteger-
namestring-

Response​

200​

ghost updated successfully

NameTypeDescription
assignedobject-
created_atstring-
deleted_atstring-
descriptionstring-
embodied_atstring-
idinteger-
namestring-
updated_atstring-
user_idinteger-
assigned​
NameTypeDescription
projectsArray of object-
tasksArray of object-
team_idsArray of integer-
projects​
NameTypeDescription
colorstring-
idinteger-
namestring-
privateboolean-
tasks​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Forbidden

404​

Ghost not found

500​

Internal Server Error

PATCH Embody ghost​

https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/ghosts/{ghost_id}/embody

Embody an existing with the given user id.

curl -X PATCH https://focus.toggl.com/api/organizations/{organization_id}/workspaces/{workspace_id}/ghosts/{ghost_id}/embody \
-H "Content-Type: application/json" \
-d '\{"recipient_org_user_id":"integer","recipient_user_account_id":"integer","role_id":"integer"\}' \
-u <email>:<password>

Parameters​

Path​

nametyperequireddescription
organization_idintegertrueorganization ID
workspace_idintegertrueworkspace ID
ghost_idintegertrueghost ID

Body​

NameTypeDescription
recipient_org_user_idintegershould come directly from accounts invite response recipient_org_user_id field.
recipient_user_account_idintegershould come directly from accounts invite response recipient_user_account_id field.
role_idinteger-

Response​

200​

ghost embodied successfully

NameTypeDescription
assignedobject-
created_atstring-
deleted_atstring-
descriptionstring-
embodied_atstring-
idinteger-
namestring-
updated_atstring-
user_idinteger-
assigned​
NameTypeDescription
projectsArray of object-
tasksArray of object-
team_idsArray of integer-
projects​
NameTypeDescription
colorstring-
idinteger-
namestring-
privateboolean-
tasks​
NameTypeDescription
colorstring-
idinteger-
namestring-

400​

Invalid request

403​

Forbidden

404​

Ghost not found

409​

Ghost already embodied

500​

Internal Server Error

© 2026 Toggl. All rights reserved.