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>)

ParameterInTypeRequiredDescription
includeArchivedqueryone of "true", "false"noInclude archived (retired) projects in the listing. Default: false.
limitquerystringnoItems per page (default: 20, max: 100)
managedKeyquerystringnoReturn 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.
pagequerystringnoPage number (default: 1)
StatusDescriptionBody
200application/json ProjectSummaryResponseDtoDataArrayEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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

StatusDescriptionBody
200application/json CreateProjectResponseDtoDataEnvelope
201application/json CreateProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/problem+json ProblemDetailsDto

GET /api/project-registry-api/projects/{projectId}

Get project aggregate

Authentication: bearer token (Authorization: Bearer <token>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/problem+json ProblemDetailsDto

PATCH /api/project-registry-api/projects/{projectId}

Update editable project metadata

Authentication: bearer token (Authorization: Bearer <token>)

ParameterInTypeRequiredDescription
projectIdpathstringyes

Request body: application/json UpdateProjectDto

StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/problem+json ProblemDetailsDto

POST /api/project-registry-api/projects/{projectId}/bootstrap

Request project bootstrap in orchestrator

Authentication: bearer token (Authorization: Bearer <token>)

ParameterInTypeRequiredDescription
projectIdpathstringyes

Request body: application/json BootstrapProjectDto

StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes

Request body: application/json BootstrapAnalyzeDto

StatusDescriptionBody
200application/json BootstrapDecisionDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
typepathstringyes

Request body: application/json UpdateProjectConnectionDto

StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
200application/json ProjectDeletionImpactDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
200application/json PreferredImageVariantResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes

Request body: application/json SetPreferredImageVariantDto

StatusDescriptionBody
200application/json PreferredImageVariantResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/problem+json ProblemDetailsDto

PATCH /api/project-registry-api/projects/{projectId}/settings

Update project settings

Authentication: bearer token (Authorization: Bearer <token>)

ParameterInTypeRequiredDescription
projectIdpathstringyes

Request body: application/json UpdateProjectSettingsDto

StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/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>)

ParameterInTypeRequiredDescription
projectIdpathstringyes
StatusDescriptionBody
200application/json ProjectResponseDtoDataEnvelope
400application/problem+json ProblemDetailsDto
401application/problem+json ProblemDetailsDto
403application/problem+json ProblemDetailsDto
404application/problem+json ProblemDetailsDto
409application/problem+json ProblemDetailsDto
422application/problem+json ProblemDetailsDto
500application/problem+json ProblemDetailsDto