Endpoint reference / Personal tasks

Personal tasks.

A personal task belongs to you alone, in your hidden Personal space, such as "Book SFO to Milan for 3 Nov". Sensei files one from a thread with kosuke tasks create personal. Your API key reads and changes only your own personal tasks. Move one into a workspace when it becomes the team's work.

Your Personal space is a workspace only you belong to, so its tasks use the Tasks routes. The /api/personal-tasks endpoints below are deprecated: they keep working for CLIs released before personal reached the workspace routes, and will be removed. Do not build on them.

MethodPathDescription
GET/api/personal-tasks?status=&priorities=&q=&doneSince=&threadId=&limit=&cursor=&includeOpenCount=Deprecated: kosuke tasks list personal now calls GET /api/organizations/{workspaceId}/tasks with your Personal space id. List your personal tasks, newest first. status is a csv of todo, in_progress, done; includeOpenCount counts Todo and In progress with the same filters, independent of status and cursor.
POST/api/personal-tasksDeprecated: kosuke tasks create personal now calls POST /api/organizations/{workspaceId}/tasks with your Personal space id. File a personal task: yours alone, in no workspace. From a Sensei Turn it joins the Turn’s thread unless threadId names another. Check kosuke tasks list personal for one that covers it first.
GET/api/personal-tasks/{taskId}Deprecated: kosuke tasks get personal now calls GET /api/organizations/{workspaceId}/tasks/{taskId} with your Personal space id. Get one of your personal tasks.
PATCH/api/personal-tasks/{taskId}Deprecated: kosuke tasks update personal now calls PATCH /api/organizations/{workspaceId}/tasks/{taskId} with your Personal space id. Edit one of your personal tasks. dueOn or threadId null clears it.
DELETE/api/personal-tasks/{taskId}Deprecated: kosuke tasks delete personal now calls DELETE /api/organizations/{workspaceId}/tasks/{taskId} with your Personal space id. Delete one of your personal tasks.
POST/api/personal-tasks/{taskId}/moveDeprecated: kosuke tasks move personal now calls POST /api/organizations/{workspaceId}/tasks/{taskId}/move with your Personal space id. Move a Todo or In progress personal task into a workspace you belong to, as its Todo task assigned to you; the personal task is removed. A due date becomes the description’s last line. Only when the member asks.
POST/api/personal-tasks/{taskId}/startDeprecated: kosuke tasks start personal now calls POST /api/organizations/{workspaceId}/tasks/{taskId}/start with your Personal space id. Start a Todo or In progress Personal task in a deployed Personal Repository.

Your Personal space

kosuke tasks list|create|get|update|delete|move|start personal reads your Personal space id with kosuke user personal-space get (GET /api/user/personal-space, which answers { data: { id } } and makes the space on first use), then calls the same workspace route with that id as workspaceId. Every flag of the workspace command works, and the answers are workspace tasks. GET /api/tasks lists your Personal space beside your workspaces.

Only you reach your Personal space: another member's credential is refused with 403, and their GET /api/tasks never lists your tasks. Sensei reaches it for you. A session or Cron credential acts in its own workspace and has no Personal space, so personal is refused there.

kosuke tasks create personal --title "Send Q3 invoices to Giulia" --due-on 2026-11-03
kosuke tasks list personal --status todo,in_progress --include-open-count true
kosuke tasks update personal <taskId> --status in_progress
kosuke tasks move personal <taskId> --org-id <workspaceId>

Create needs only title; description is optional and defaults to an empty string. All legacy create, update, list, move and start inputs remain available.

Two things to know about the workspace routes:

  • ifRevision accepts the task's descriptionRevision, which tasks get prints; a sessionless task also accepts its updatedAt for compatibility. A changed task answers 409 TASK_CONFLICT.
  • Errors carry the TASK_* codes of Tasks.

Deprecated endpoints

What follows describes /api/personal-tasks, for a client that still calls it.

The task

FieldValue
idThe task id.
title1 to 255 characters.
descriptionMarkdown. Empty by default.
prioritynone, low, medium, high or urgent. Default none.
statustodo, in_progress or done. Default todo.
dueOnA calendar day, YYYY-MM-DD, or null. It has no time and no time zone.
threadIdThe Sensei thread that filed it or works on it, or null.
createdAt, updatedAtISO timestamps.
doneAtWhen it became Done, or null. Leaving Done clears it.

A personal task has no repository, branch, sandbox or pull request. Sensei works on it in its thread.

File and edit

Create takes title and optional description, priority, status, dueOn and threadId. It answers 201 with { data: PersonalTask }. A threadId must name one of your own Sensei threads. From a Sensei Turn, the task joins the Turn's thread unless threadId names another.

Update takes any of the same fields. Send dueOn or threadId as null to clear it. Add ifRevision, the task's updatedAt as you read it, to write only over the task you read. When the task changed since, nothing changes and the answer is 409 with the current task in task. Delete answers 204.

List

List answers { data: PersonalTask[], meta: { pagination: { pageSize, hasMore, nextCursor } } }, newest first. Pass nextCursor as cursor for the next page. limit is at most 100.

FilterValue
statusComma-separated todo, in_progress, done.
prioritiesComma-separated priorities.
qText the title contains.
doneSinceAn ISO timestamp. Done tasks finished before it are left out.
threadIdOne thread's tasks.
includeOpenCounttrue adds meta.openCount: Todo plus In progress under the same filters, independent of status and cursor.

Move into a workspace

Move takes orgId, a workspace you belong to. The personal task becomes that workspace's Todo task, with its title, description and priority, and you as its Assignee. A due date becomes the description's last line, such as Due 3 Nov 2026. The personal task is removed in the same step. Move answers { data: { orgId, taskId } }, where taskId is the new workspace task.

Limits

  • A Done personal task does not move.
  • A workspace task never becomes personal.
  • Sandbox, Cron and Slack credentials reach no personal task. Sensei can file, read, edit and move them, but not delete one.

Errors

StatusCodeWhen
400VALIDATION_ERRORThe body or a filter does not match the schema, such as an empty title or a dueOn that is not a day.
400PERSONAL_TASK_INVALID_THREADthreadId is not one of your Sensei threads.
401UNAUTHORIZEDNo valid credential.
403PERSONAL_TASK_FORBIDDENA move names a workspace you do not belong to.
404PERSONAL_TASK_NOT_FOUNDThe task does not exist or is not yours.
409PERSONAL_TASK_DONEA move named a Done task.
409PERSONAL_TASK_CONFLICTAn edit's ifRevision is not the task's updatedAt: the task changed since you read it.

Responses and errors has the full table.

Next steps