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.

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.

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.