Skip to main content
Base path: /api/workspaces/{workspaceId}/tasks. Ids are UUIDs.

Create a task

title is the only required field. publishMode is "immediate" | "scheduled" | "manual" (default "manual"); "scheduled" additionally requires publishAt (ISO timestamp). requiresReview defaults to true and is forced true for Viewer-role callers. Returns 201 with the bare task object.

List tasks

Returns a bare JSON array, most recently updated first (offset pagination, limit 1–100). Each task includes its contentItems and an isOverdue flag. Because the sort key is activity rather than creation, a task can move between pages as it is worked on — fetch a page at a time rather than assuming a stable offset across a long walk. The status filter accepts todo, working, review, approved, published, deleted, failed. A task’s status field can additionally be publishing while a publish is in flight (not filterable).

Approve, reject, unapprove, publish

Approve requires the task to be in review. The response includes willPublishAt — "immediately", "manual", or the scheduled timestamp — telling you what happens next. Reject accepts an optional { "comment": "…" }, returns the task to todo, bumps revisionCount, and keeps the assignee — the same worker revises. Rejecting an approved task also clears the approval (the “revise” flow). Unapprove reverses an approval without discarding the work. The task returns to review with its content untouched and revisionCount unchanged, and reviewers are re-notified. Use this when a task was approved that should not have been — a reviewer moving too fast, or an API client approving on an operator’s behalf when the operator wanted a look first. Accepts an optional { "comment": "…" }, recorded on the task. A future publishAt is kept, so a chosen time survives unapprove and re-approval; one that has already passed is cleared, and re-approving picks a fresh slot. Reach for reject instead when the work itself needs redoing: reject drops the task to todo and bumps revisionCount so a worker revises it. Unapprove keeps the draft exactly as it is and asks a human to decide again. Only approved tasks can be reversed. A task that is already publishing or published returns 400 — the content has gone out. If a publish claims the task between the read and the write you get 409 and nothing is changed, the comment included. Publish publishes an approved task now — the manual-mode trigger.