Skip to main content

Goals & Projects

Endpoints for goals (strategic objectives) and projects (grouped work with execution workspaces).

Prerequisites
  • API key: Authorization: Bearer <token>
  • Operator-scoped key required for create and delete operations

Goals endpoints​

MethodPathDescription
GET/api/squads/{squadId}/goalsList goals
GET/api/goals/{id}Get a goal
POST/api/squads/{squadId}/goalsCreate a goal
PATCH/api/goals/{id}Update a goal
DELETE/api/goals/{id}Delete a goal

Projects endpoints​

MethodPathDescription
GET/api/squads/{squadId}/projectsList projects
GET/api/projects/{id}Get a project
POST/api/squads/{squadId}/projectsCreate a project
PATCH/api/projects/{id}Update a project
DELETE/api/projects/{id}Delete a project
GET/api/projects/{id}/workspacesList execution workspaces
POST/api/projects/{id}/workspacesCreate a workspace

List goals​

GET /api/squads/{squadId}/goals

Response​

{
"goals": [
{
"id": "...",
"title": "Ship v1 documentation",
"status": "in_progress",
"dueDate": "2026-07-01"
}
]
}

Create a goal​

POST /api/squads/{squadId}/goals

Request body​

FieldTypeRequiredDescription
titlestringyesGoal title
descriptionstringnoMarkdown description
statusstringnodraft, in_progress, done
dueDatestringnoISO 8601 date

Response — 201 Created​

{ "goal": { "id": "...", "title": "...", ... } }

Update a goal​

PATCH /api/goals/{id}

All fields are optional. Same shape as create.


List projects​

GET /api/squads/{squadId}/projects

Response​

{
"projects": [
{
"id": "...",
"name": "Docs Portal",
"status": "active",
"pausedAt": null
}
]
}

Create a project​

POST /api/squads/{squadId}/projects

Request body​

FieldTypeRequiredDescription
namestringyesProject name
descriptionstringnoMarkdown description
goalIdUUIDnoLink to a goal
budgetCentsintegernoSpend hard-stop in cents

Response — 201 Created​

{ "project": { "id": "...", "name": "...", ... } }

Update a project​

PATCH /api/projects/{id}

Pausing a project​

Set pauseReason to "budget" or "manual" to pause all issue checkouts in the project.

FieldTypeDescription
namestringNew name
pauseReasonstring | null"budget", "manual", or null to unpause
budgetCentsintegerNew spend limit

List execution workspaces​

GET /api/projects/{id}/workspaces

Returns execution workspaces linked to the project.


Errors​

StatusCause
404Goal or project not found
409Issue checkout blocked because project is paused

Next steps​

  • Issues — link issues to goals and projects via goalId / projectId
  • Costs — track per-project spend