# Lifecycle

> The Lifecycle operations of the Hub REST API (4 operations).

URL: https://docs.synap.live/docs/reference/hub-api/lifecycle · Generated from Synap-core/backend@c31e261ab (main)

Paths are relative to `/api/hub` on a pod.

## GET /lifecycle/board

The pipeline of a kind or role

Things of `profileSlug` grouped by their declared lifecycle status, in option order (`lifecycle.board`). `workedBy=true` adds who is on each card.

Parameters:

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `profileSlug` | query | string | yes |  |
| `workspaceId` | query | string |  |  |
| `projectId` | query | string |  |  |
| `trackId` | query | string |  |  |
| `windowDays` | query | integer |  |  |
| `firstN` | query | integer \| null |  |  |
| `column` | query | string |  |  |
| `cursor` | query | string |  |  |
| `limit` | query | integer |  |  |
| `workedBy` | query | "true" \| "false" |  |  |

Responses:

- `200`: Board
- `400`: Bad request
- `403`: Forbidden
- `404`: Unknown kind / track
- `412`: The kind declares no lifecycle
- `500`: Internal error

## GET /lifecycle/throughput

Things into done / lost per bucket

The goal line of a kind or role (`lifecycle.throughput`): every bucket, zeros included, oldest first.

Parameters:

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `profileSlug` | query | string | yes |  |
| `workspaceId` | query | string |  |  |
| `projectId` | query | string |  |  |
| `trackId` | query | string |  |  |
| `bucket` | query | "day" \| "week" \| "month" |  |  |
| `count` | query | integer |  |  |

Responses:

- `200`: Throughput
- `400`: Bad request
- `403`: Forbidden
- `404`: Unknown kind / track
- `412`: The kind declares no lifecycle
- `500`: Internal error

## GET /lifecycle/home

What each space produces, and how its things stand

Every space the caller sees with its intent (`settings.intent`, else inferred) and, per produced kind, the pipeline in one line, needs-you, being-worked and a headline thing (`lifecycle.home`). `projectId` lists only the project's spaces (the ones it uses + its home; 404 when the caller cannot see it) and narrows every count.

Parameters:

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `projectId` | query | string |  |  |

Responses:

- `200`: Home
- `400`: Bad request
- `403`: Forbidden
- `404`: Unknown kind / track
- `412`: The kind declares no lifecycle
- `500`: Internal error

## GET /lifecycle/moving

The things being worked, with their work

Things with open work on them (a session, an in-flight worker, a scheduled prep), most urgent first, plus `unattached`: open work sessions on no thing (`lifecycle.moving`).

Parameters:

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `projectId` | query | string |  |  |
| `workspaceId` | query | string |  |  |
| `limit` | query | integer |  |  |

Responses:

- `200`: Moving now
- `400`: Bad request
- `403`: Forbidden
- `404`: Unknown kind / track
- `412`: The kind declares no lifecycle
- `500`: Internal error
