project-registry
Operations of the Project Registry API. Paths are relative to your deployment's API host.
GET /api/project-registry-api/projects
List projects for the organization. Archived (retired) projects are excluded unless includeArchived=true.
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
includeArchived | query | one of "true", "false" | no | Include archived (retired) projects in the listing. Default: false. |
limit | query | string | no | Items per page (default: 20, max: 100) |
managedKey | query | string | no | Return only the project of this organisation whose managedKey equals this value (<namespace>:<id>). An unknown key answers an empty list. A malformed key is refused with 400. |
page | query | string | no | Page number (default: 1) |
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectSummaryResponseDtoDataArrayEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
POST /api/project-registry-api/projects
Create project workspace and optional repository link. With a managedKey, idempotent get-or-create per organisation: 201 when created, 200 with the existing project unchanged when it already exists, 409 PROJECT_MANAGED_KEY_ARCHIVED when the match is archived. A managedKey is accepted only from a workload (presenting the person's context, or its own token): 403 PROJECT_MANAGED_KEY_WORKLOAD_REQUIRED otherwise. A keyed create does not make the person a project member.
Authentication: bearer token (Authorization: Bearer <token>)
Request body: application/json CreateProjectDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json CreateProjectResponseDtoDataEnvelope | |
| 201 | application/json CreateProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
GET /api/project-registry-api/projects/{projectId}
Get project aggregate
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
PATCH /api/project-registry-api/projects/{projectId}
Update editable project metadata
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
Request body: application/json UpdateProjectDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
DELETE /api/project-registry-api/projects/{projectId}
Hard-delete a project and all associated data, and publish the platform-wide cascade-cleanup signal. Irreversible — use archive for a reversible retire. Refused (409 PROJECT_MANAGED_DELETE_REFUSED) for a project a producer owns and would recreate; hardDeletable on the project response is this exact precondition.
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
POST /api/project-registry-api/projects/{projectId}/archive
Archive (soft-retire) a project. The project leaves the default listing and accepts no further writes; every row it owns is kept. Reversible via POST /:projectId/unarchive, and idempotent. Nothing outside this service is notified — unlike DELETE, an archive publishes no cascade signal, because the data is exactly what un-archiving restores.
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
POST /api/project-registry-api/projects/{projectId}/bootstrap
Request project bootstrap in orchestrator
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
Request body: application/json BootstrapProjectDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
POST /api/project-registry-api/projects/{projectId}/bootstrap/analyze
Analyze project state and return bootstrap decision before execution
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
Request body: application/json BootstrapAnalyzeDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json BootstrapDecisionDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
PATCH /api/project-registry-api/projects/{projectId}/connections/{type}
Enable, disable, or update project connection configuration
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes | |
type | path | string | yes |
Request body: application/json UpdateProjectConnectionDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
GET /api/project-registry-api/projects/{projectId}/deletion-impact
What deleting this project would destroy, computed by the server. Returns the exact DELETE precondition (deletable + blockedReason), the per-class counts the database cascade will remove, and whether archive is available as a reversible alternative. The counts are a consistent snapshot, never a lock: the delete re-evaluates its own precondition against a freshly-read row, so this preview is never the authority for whether the delete is allowed. Fenced identically to the delete it previews — a preview of a destructive operation is exactly as sensitive as the operation.
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectDeletionImpactDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
GET /api/project-registry-api/projects/{projectId}/preferred-image-variant
Get the preferred workspace-image variant slug for a project
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | application/json PreferredImageVariantResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
PATCH /api/project-registry-api/projects/{projectId}/preferred-image-variant
Set or clear the preferred workspace-image variant slug for a project
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
Request body: application/json SetPreferredImageVariantDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json PreferredImageVariantResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
PATCH /api/project-registry-api/projects/{projectId}/settings
Update project settings
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
Request body: application/json UpdateProjectSettingsDto
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
GET /api/project-registry-api/projects/{projectId}/settings/typed
Get typed project settings with defaults applied (service-to-service)
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |
POST /api/project-registry-api/projects/{projectId}/unarchive
Un-archive a retired project, returning it to active. The exact inverse of archive and nothing else — the ui adoption an archive performed is NOT undone. Idempotent.
Authentication: bearer token (Authorization: Bearer <token>)
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
projectId | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | application/json ProjectResponseDtoDataEnvelope | |
| 400 | application/problem+json ProblemDetailsDto | |
| 401 | application/problem+json ProblemDetailsDto | |
| 403 | application/problem+json ProblemDetailsDto | |
| 404 | application/problem+json ProblemDetailsDto | |
| 409 | application/problem+json ProblemDetailsDto | |
| 422 | application/problem+json ProblemDetailsDto | |
| 500 | application/problem+json ProblemDetailsDto |