Reference · Planning API

Planning API

Goals, tasks, and Inbox messages. Both goals and tasks carry an optional assigneeWorkerId — empty means yours; set means that worker’s shifts consume it, act on it, and account for it in their reports. Agents file tasks through the same API (createdVia records the auth class).

Goals

GET/v1/goals?workspaceId=&status=&assigneeWorkerId=List goals; filter by status, horizon, or assignee.
POST/v1/goalsCreate. Worker-assigned goals require a measurable target.
PATCH/v1/goals/{goalId}Update fields or status. Manual achieve stamps achievedBy: "user"; measurable worker goals achieve themselves.
DELETE/v1/goals/{goalId}Delete (linked tasks survive, unlinked).
assigning a measurable goaljson
POST /v1/goals
{
  "workspaceId": "…",
  "title": "Grow education clip art",
  "horizon": "quarter",
  "assigneeWorkerId": "worker-06997927",
  "target": { "count": 150, "categories": ["education"] }
}

// 422 without a target: a goal assigned to a worker
// needs a measurable target (count + categories).
// Goals decide WHAT gets made — never where it ships.
// Destination lives on the worker (team / Solo outlet).

Tasks

GET/v1/tasks?workspaceId=&status=&assigneeWorkerId=&dateFrom=&dateTo=List tasks; the date window matches dueOn OR scheduledOn (one query paints a calendar).
POST/v1/tasksCreate. scheduledOn on a worker task makes it a day directive its shift checks off with a completionNote.
PATCH/v1/tasks/{taskId}Update fields or status; entering done stamps completedAt.
DELETE/v1/tasks/{taskId}Delete.

Messages (the Inbox)

GET/v1/messages?workspaceId=&kind=&unread=Your Inbox: reports, alerts, and messages (senderType distinguishes system | user | worker).
GET/v1/messages/unread-countUnread split by decision weight (messages vs alerts).
PATCH/v1/messages/{messageId}Read/archive state only — a message’s content is immutable.