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