openapi: 3.1.0 info: title: Tech Log Studio Management API (Secondary) version: 1.0.0 description: |- ⚠ 봉투 결정(ADR-006) 부분 반영 — 이 파일에는 두 모양이 공존한다. topics 4개, projects 5개, releases 7개, 그리고 작업본 삭제 3개 (deleteCaseDraft / deleteReferenceDraft / deleteQuestion)를 studio-v1.yaml과 같은 방식으로 변환했다 (`application/json` + ErrorEnvelope / Envelope). 그 19개가 구현된 것이자 소비자가 있는 것이기 때문이다. 나머지 60개는 아직 bare payload + `application/problem+json` + ProblemDetails 다. 구현에 착수할 때 같은 방식으로 따라온다 — 소비자가 없는 operation을 미리 변환해 두면 검증되지 않은 모양이 계약에 고정된다. Tech Log의 유형별 specialized management 계약이다. 이 계약은 primary Studio orchestration 계약(`studio-v1.yaml`)이 아니다. 현재 Studio UI는 이 operation들을 직접 호출하지 않는다. 존재 이유는 설계 수정 가이드 14장과 23.7의 규칙이다. > 현재 UI에서 사용하지 않는다는 이유로 Backend capability를 삭제하지 않는다. > 다만 capability 보존과 endpoint 보존을 동일시하지 않는다. 따라서 Question start/pause/resume/reopen/archive, Project phase change, Project Activity, Release, Topic/Tag, Profile/Site/Home Focus, Decision supersede/reject 등의 Domain/Application capability를 여기에 보존하고, 현재 Frontend가 사용하는 통합 편집 흐름은 `studio-v1.yaml`이 소유한다. ## 이 계약을 사용하는 규칙 - primary 흐름(작업본 편집·검증·미리보기·게시)은 반드시 `studio-v1.yaml`을 사용한다. - 여기의 publish/unpublish 계열 operation은 primary `publishStudioDocument`와 동일한 Publication Event/Snapshot 경로를 거쳐야 한다. 서로 다른 두 개의 게시 경로를 허용하지 않는다. - 새 UI가 특정 capability를 실제로 사용하기 시작하면 해당 operation을 primary 계약으로 승격하고 여기에서 제거한다. ## 이 계약에서 제거된 것 - `GET /session` : primary `studio-v1.yaml`이 소유한다. - `/documents` 계열 : primary 통합 Working Copy operation으로 대체되었다. - `/assets` 계열 : primary `studio-v1.yaml`이 소유한다. - `/previews`, `/previews/{token}` : Preview Token 계약은 폐기되었다. 인증된 Preview Artifact(`studio-v1.yaml`)로 대체되었다. servers: - url: / security: - sessionCookie: [] tags: - name: Cases - name: References - name: Questions - name: Projects - name: Decisions - name: Releases - name: Taxonomy - name: Identity paths: /api/v1/studio/cases: post: operationId: createCaseDraft tags: - Cases parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateDraftResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDraftRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}: get: operationId: getCaseForEdit tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateCaseDraft tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CaseUpdateRequest' security: - sessionCookie: [] delete: operationId: deleteCaseDraft tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references: post: operationId: createReferenceDraft tags: - References parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateDraftResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDraftRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}: get: operationId: getReferenceForEdit tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateReferenceDraft tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReferenceUpdateRequest' security: - sessionCookie: [] delete: operationId: deleteReferenceDraft tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/validate: post: operationId: validateCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ValidationResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/submit-review: post: operationId: submitReviewCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/return-to-draft: post: operationId: returnToDraftCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/unpublish: post: operationId: unpublishCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/archive: post: operationId: archiveCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/restore: post: operationId: restoreCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CaseEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/cases/{id}/publish: post: operationId: publishCase tags: - Cases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublishResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PublishRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/validate: post: operationId: validateReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ValidationResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/submit-review: post: operationId: submitReviewReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/return-to-draft: post: operationId: returnToDraftReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/unpublish: post: operationId: unpublishReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/archive: post: operationId: archiveReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/restore: post: operationId: restoreReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReferenceEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/references/{id}/publish: post: operationId: publishReference tags: - References parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublishResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PublishRequest' security: - sessionCookie: [] /api/v1/studio/questions: post: operationId: createQuestion tags: - Questions parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateDraftResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDraftRequest' security: - sessionCookie: [] get: operationId: listStudioQuestions tags: - Questions parameters: - name: page in: query schema: type: integer minimum: 1 default: 1 - name: size in: query schema: type: integer minimum: 1 maximum: 100 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionIndexPage' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] /api/v1/studio/questions/{id}: get: operationId: getQuestionForEdit tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuestionUpdateBody' security: - sessionCookie: [] delete: operationId: deleteQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/updates: post: operationId: addQuestionUpdate tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionUpdateResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuestionUpdateRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/updates/{updateId}: put: operationId: updateQuestionUpdate tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - name: updateId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionUpdateResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuestionUpdateRequest' security: - sessionCookie: [] delete: operationId: deleteQuestionUpdate tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - name: updateId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/resolve: post: operationId: resolveQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ResolveQuestionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResolveQuestionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/start-investigation: post: operationId: startQuestionInvestigation tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/pause: post: operationId: pauseQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/resume: post: operationId: resumeQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/reopen: post: operationId: reopenQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/archive: post: operationId: archiveQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/publish: post: operationId: publishQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublishResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PublishRequest' security: - sessionCookie: [] /api/v1/studio/questions/{id}/unpublish: post: operationId: unpublishQuestion tags: - Questions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/QuestionEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/projects: post: operationId: createProject tags: - Projects parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateDraftResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDraftRequest' security: - sessionCookie: [] get: operationId: listStudioProjects tags: - Projects parameters: - name: page in: query schema: type: integer minimum: 1 default: 1 - name: size in: query schema: type: integer minimum: 1 maximum: 100 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProjectIndexPageEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' security: - sessionCookie: [] /api/v1/studio/projects/{id}: get: operationId: getProjectForEdit tags: - Projects parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProjectEditResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' security: - sessionCookie: [] put: operationId: updateProject tags: - Projects parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProjectEditResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProjectUpdateRequest' security: - sessionCookie: [] delete: operationId: deleteProject tags: - Projects parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/change-phase: post: operationId: changeProjectPhase tags: - Projects parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProjectEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeProjectPhaseRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/publish: post: operationId: publishProject tags: - Projects parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublishResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PublishRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/unpublish: post: operationId: unpublishProject tags: - Projects parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProjectEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/decisions: post: operationId: createProjectDecision tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDecisionRequest' security: - sessionCookie: [] get: operationId: listStudioProjectDecisions tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] /api/v1/studio/projects/{id}/decisions/{decisionId}: get: operationId: getProjectDecision tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid - name: decisionId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateProjectDecision tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid - name: decisionId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DecisionUpdateRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/decisions/{decisionId}/accept: post: operationId: acceptProjectDecision tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid - name: decisionId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/decisions/{decisionId}/reject: post: operationId: rejectProjectDecision tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid - name: decisionId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/decisions/{decisionId}/supersede: post: operationId: supersedeProjectDecision tags: - Decisions parameters: - name: id in: path required: true schema: type: string format: uuid - name: decisionId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DecisionResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SupersedeDecisionRequest' security: - sessionCookie: [] /api/v1/studio/releases: post: operationId: createRelease tags: - Releases parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/CreateDraftResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateDraftRequest' security: - sessionCookie: [] get: operationId: listStudioReleases tags: - Releases parameters: - name: page in: query schema: type: integer minimum: 1 default: 1 - name: size in: query schema: type: integer minimum: 1 maximum: 100 default: 20 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReleaseIndexPageEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' security: - sessionCookie: [] /api/v1/studio/releases/{id}: get: operationId: getReleaseForEdit tags: - Releases parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReleaseEditResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' security: - sessionCookie: [] put: operationId: updateRelease tags: - Releases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReleaseEditResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReleaseUpdateRequest' security: - sessionCookie: [] delete: operationId: deleteRelease tags: - Releases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/releases/{id}/publish: post: operationId: publishRelease tags: - Releases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublishResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/releases/{id}/archive: post: operationId: archiveRelease tags: - Releases parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ReleaseEditResponseEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/topics: get: operationId: listStudioTopics tags: - Taxonomy parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TopicEditListEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' security: - sessionCookie: [] post: operationId: createTopic tags: - Taxonomy parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/TopicEditEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TopicEdit' security: - sessionCookie: [] /api/v1/studio/topics/{id}: put: operationId: updateTopic tags: - Taxonomy parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TopicEditEnvelope' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TopicEdit' security: - sessionCookie: [] delete: operationId: deleteTopic tags: - Taxonomy parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '422': description: Unprocessable Content content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/tags: get: operationId: listStudioTags tags: - Taxonomy parameters: [] responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/TagEdit' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] post: operationId: createTag tags: - Taxonomy parameters: - $ref: '#/components/parameters/CsrfToken' responses: '201': description: OK content: application/json: schema: $ref: '#/components/schemas/TagEdit' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TagEdit' security: - sessionCookie: [] /api/v1/studio/tags/{id}: put: operationId: updateTag tags: - Taxonomy parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TagEdit' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TagEdit' security: - sessionCookie: [] delete: operationId: deleteTag tags: - Taxonomy parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' responses: '204': description: No Content '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/site: get: operationId: getStudioSite tags: - Identity parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SiteConfigResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateStudioSite tags: - Identity parameters: - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SiteConfigResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SiteConfigRequest' security: - sessionCookie: [] /api/v1/studio/profile: get: operationId: getStudioProfile tags: - Identity parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProfileEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateStudioProfile tags: - Identity parameters: - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProfileEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProfileEditRequest' security: - sessionCookie: [] /api/v1/studio/profile/publish: post: operationId: publishProfile tags: - Identity parameters: - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublishResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/profile/unpublish: post: operationId: unpublishProfile tags: - Identity parameters: - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProfileEditResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpectedVersionRequest' security: - sessionCookie: [] /api/v1/studio/home-focus: get: operationId: getHomeFocus tags: - Identity parameters: [] responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/HomeFocusResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' security: - sessionCookie: [] put: operationId: updateHomeFocus tags: - Identity parameters: - $ref: '#/components/parameters/CsrfToken' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/HomeFocusResponse' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: Unauthorized content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: Forbidden content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: Not Found content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: Conflict content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: Unprocessable Content content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: Internal Server Error content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/HomeFocusRequest' security: - sessionCookie: [] /api/v1/studio/projects/{id}/activities: get: operationId: listStudioProjectActivities tags: - Projects security: - sessionCookie: [] parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ProjectActivityResponse' '401': description: '401' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: '403' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: '404' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: '500' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' post: operationId: createProjectActivity tags: - Projects security: - sessionCookie: [] parameters: - name: id in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProjectActivityRequest' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ProjectActivityResponse' '400': description: '400' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: '401' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: '403' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: '404' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: '409' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: '422' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: '500' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' /api/v1/studio/projects/{id}/activities/{activityId}: put: operationId: updateProjectActivity tags: - Projects security: - sessionCookie: [] parameters: - name: id in: path required: true schema: type: string format: uuid - name: activityId in: path required: true schema: type: string format: uuid - $ref: '#/components/parameters/CsrfToken' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateProjectActivityRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ProjectActivityResponse' '400': description: '400' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '401': description: '401' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '403': description: '403' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '404': description: '404' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '409': description: '409' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '422': description: '422' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' '500': description: '500' content: application/problem+json: schema: $ref: '#/components/schemas/ProblemDetails' components: securitySchemes: sessionCookie: type: apiKey in: cookie name: TECHLOG_SESSION parameters: CsrfToken: name: X-CSRF-TOKEN in: header required: true schema: type: string schemas: # ------------------------------------------------------------------------- # 응답 봉투 (ADR-006) # # 이 파일 상단이 예고한 변환이다. 지금은 topics/projects 9개 operation 만 # 옮겼다 — 그 둘이 첫 소비자이기 때문이고, 나머지는 구현에 착수할 때 같은 # 방식으로 따라온다. 그동안 이 파일에는 두 모양이 공존한다: 변환된 # operation 은 `application/json` + Envelope, 나머지는 예전 # `application/problem+json` + ProblemDetails 다. # ------------------------------------------------------------------------- ResponseMeta: type: object additionalProperties: false required: - requestId - traceId properties: requestId: type: string minLength: 1 maxLength: 200 traceId: type: string minLength: 1 maxLength: 200 correlationId: type: - string - 'null' maxLength: 200 page: type: - object - 'null' additionalProperties: true description: 백엔드 템플릿의 ResponseMeta record 가 직렬화하는 자리다. 페이지 정보는 payload 의 `page` 가 소유하므로 이 관리 표면에서는 항상 null 이다. ApiError: type: object additionalProperties: false required: - code - category - message - retryable properties: code: type: string enum: - AUTHENTICATION_REQUIRED - STUDIO_ACCESS_DENIED - REQUEST_VALIDATION_FAILED - VERSION_CONFLICT - TOPIC_NOT_FOUND - TOPIC_NAME_TAKEN - TOPIC_SLUG_TAKEN - TOPIC_IN_USE - PROJECT_NOT_FOUND - PROJECT_SLUG_TAKEN - PROJECT_IN_USE - RELEASE_NOT_FOUND - RELEASE_VERSION_TAKEN - RELEASE_NOT_PUBLISHABLE - DOCUMENT_NOT_FOUND - DOCUMENT_PUBLISHED - DOCUMENT_IN_USE - QUESTION_NOT_FOUND - QUESTION_IN_USE - INTERNAL_ERROR description: '`INTERNAL_ERROR` 는 이 기능이 아니라 스켈레톤의 공통 처리기가 내는 코드다. 계약이 그것까지 열거해야 500 응답이 계약을 벗어나지 않는다.' category: type: string enum: - VALIDATION - AUTH - AUTHZ - NOT_FOUND - CONFLICT - RATE_LIMIT - TRANSIENT_DEPENDENCY - PERMANENT_DEPENDENCY - DATA_INTEGRITY - INTERNAL message: type: string minLength: 1 maxLength: 5000 retryable: type: boolean details: oneOf: - $ref: '#/components/schemas/ValidationErrorDetails' - $ref: '#/components/schemas/VersionConflictDetails' - type: 'null' ValidationErrorDetails: type: object additionalProperties: false required: - fieldErrors properties: fieldErrors: type: array maxItems: 200 items: $ref: '#/components/schemas/FieldError' VersionConflictDetails: type: object additionalProperties: false required: - currentVersion properties: currentVersion: type: integer format: int64 minimum: 0 ErrorEnvelope: type: object additionalProperties: false required: - success - error - meta properties: success: type: boolean const: false error: $ref: '#/components/schemas/ApiError' meta: $ref: '#/components/schemas/ResponseMeta' TopicEditEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/TopicEdit' meta: $ref: '#/components/schemas/ResponseMeta' TopicEditListEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: type: array maxItems: 500 items: $ref: '#/components/schemas/TopicEdit' meta: $ref: '#/components/schemas/ResponseMeta' CreateDraftResponseEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/CreateDraftResponse' meta: $ref: '#/components/schemas/ResponseMeta' ProjectIndexPageEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/ProjectIndexPage' meta: $ref: '#/components/schemas/ResponseMeta' ReleaseIndexPageEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/ReleaseIndexPage' meta: $ref: '#/components/schemas/ResponseMeta' ReleaseEditResponseEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/ReleaseEditResponse' meta: $ref: '#/components/schemas/ResponseMeta' PublishResponseEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/PublishResponse' meta: $ref: '#/components/schemas/ResponseMeta' ProjectEditResponseEnvelope: type: object additionalProperties: false required: - success - data - meta properties: success: type: boolean const: true data: $ref: '#/components/schemas/ProjectEditResponse' meta: $ref: '#/components/schemas/ResponseMeta' FieldError: type: object required: - field - code - message properties: field: type: string code: type: string message: type: string ProblemDetails: type: object required: - type - title - status - code - detail - instance - traceId properties: type: type: string title: type: string status: type: integer code: type: string detail: type: string instance: type: string traceId: type: string fieldErrors: type: array items: $ref: '#/components/schemas/FieldError' currentVersion: type: integer format: int64 PageMetadata: type: object required: - number - size - totalElements - totalPages - hasPrevious - hasNext properties: number: type: integer minimum: 1 size: type: integer minimum: 1 maximum: 100 totalElements: type: integer format: int64 minimum: 0 totalPages: type: integer minimum: 0 hasPrevious: type: boolean hasNext: type: boolean TagSummary: type: object required: - name - slug properties: name: type: string slug: type: string ProjectSummary: type: object required: - name - slug - path properties: name: type: string slug: type: string path: type: string AssetReference: type: object required: - assetId - url properties: assetId: type: string format: uuid url: type: string altText: type: string width: type: integer height: type: integer contentType: type: string RelatedEntry: type: object required: - type - title - path properties: type: type: string enum: - CASE - REFERENCE - QUESTION - PROJECT - PROJECT_DECISION - RELEASE title: type: string summary: type: string path: type: string PublicationStatus: type: object required: - state - hasUnpublishedChanges properties: state: type: string enum: - NEVER_PUBLISHED - ACTIVE - WITHDRAWN publishedSourceVersion: type: integer format: int64 hasUnpublishedChanges: type: boolean canonicalPath: type: string publishedAt: type: string format: date-time ValidationIssue: type: object required: - severity - code - message properties: severity: type: string enum: - ERROR - WARNING code: type: string field: type: string message: type: string ValidationResponse: type: object required: - validForSave - validForPublish - issues properties: validForSave: type: boolean validForPublish: type: boolean issues: type: array items: $ref: '#/components/schemas/ValidationIssue' CreateDraftRequest: type: object required: - title properties: title: type: string maxLength: 180 CreateDraftResponse: type: object required: - id - status - version - createdAt properties: id: type: string format: uuid status: type: string enum: - DRAFT version: type: integer format: int64 createdAt: type: string format: date-time RelationEdit: type: object properties: primaryProjectId: type: string format: uuid relatedProjectIds: type: array items: type: string format: uuid originQuestionId: type: string format: uuid relatedDocumentIds: type: array items: type: string format: uuid derivedReferenceIds: type: array items: type: string format: uuid CaseUpdateRequest: type: object required: - expectedVersion - title - problemSummary - conclusionSummary - content - contentFormatVersion - tagIds - relations properties: expectedVersion: type: integer format: int64 title: type: string maxLength: 180 slug: type: string maxLength: 180 problemSummary: type: string maxLength: 600 conclusionSummary: type: string maxLength: 600 environmentSummary: type: array items: type: string content: type: string maxLength: 2000000 contentFormatVersion: type: integer minimum: 1 primaryTopicId: type: string format: uuid tagIds: type: array maxItems: 12 items: type: string format: uuid relations: $ref: '#/components/schemas/RelationEdit' coverAssetId: type: string format: uuid lastVerifiedAt: type: string format: date-time targetVisibility: type: string enum: - PRIVATE - UNLISTED - PUBLIC CaseEditResponse: type: object required: - id - version - title - problemSummary - conclusionSummary - content - contentFormatVersion - tagIds - relations - workflowStatus - targetVisibility - publication - updatedAt properties: id: type: string format: uuid version: type: integer format: int64 title: type: string slug: type: string problemSummary: type: string conclusionSummary: type: string environmentSummary: type: array items: type: string content: type: string contentFormatVersion: type: integer primaryTopicId: type: string format: uuid tagIds: type: array items: type: string format: uuid relations: $ref: '#/components/schemas/RelationEdit' coverAssetId: type: string format: uuid lastVerifiedAt: type: string format: date-time workflowStatus: type: string targetVisibility: type: string publication: $ref: '#/components/schemas/PublicationStatus' updatedAt: type: string format: date-time ReferenceUpdateRequest: type: object required: - expectedVersion - title - scopeSummary - appliesTo - excludedScope - freshnessStatus - content - contentFormatVersion - tagIds - relations properties: expectedVersion: type: integer format: int64 title: type: string maxLength: 180 slug: type: string maxLength: 180 scopeSummary: type: string maxLength: 600 appliesTo: type: array items: type: string excludedScope: type: array items: type: string freshnessStatus: type: string enum: - CURRENT - REVIEW_DUE - HISTORICAL content: type: string maxLength: 2000000 contentFormatVersion: type: integer minimum: 1 primaryTopicId: type: string format: uuid tagIds: type: array maxItems: 12 items: type: string format: uuid relations: $ref: '#/components/schemas/RelationEdit' coverAssetId: type: string format: uuid lastVerifiedAt: type: string format: date-time targetVisibility: type: string enum: - PRIVATE - UNLISTED - PUBLIC ReferenceEditResponse: type: object required: - id - version - title - scopeSummary - appliesTo - excludedScope - freshnessStatus - content - contentFormatVersion - tagIds - relations - workflowStatus - targetVisibility - publication - updatedAt properties: id: type: string format: uuid version: type: integer format: int64 title: type: string slug: type: string scopeSummary: type: string appliesTo: type: array items: type: string excludedScope: type: array items: type: string freshnessStatus: type: string content: type: string contentFormatVersion: type: integer primaryTopicId: type: string format: uuid tagIds: type: array items: type: string format: uuid relations: $ref: '#/components/schemas/RelationEdit' coverAssetId: type: string format: uuid lastVerifiedAt: type: string format: date-time workflowStatus: type: string targetVisibility: type: string publication: $ref: '#/components/schemas/PublicationStatus' updatedAt: type: string format: date-time ExpectedVersionRequest: type: object required: - expectedVersion properties: expectedVersion: type: integer format: int64 PublishRequest: type: object required: - expectedVersion - visibility properties: expectedVersion: type: integer format: int64 visibility: type: string enum: - PUBLIC - UNLISTED PublishResponse: type: object required: - id - status - visibility - canonicalPath - publishedAt - version properties: id: type: string format: uuid status: type: string enum: - PUBLISHED visibility: type: string enum: - PUBLIC - UNLISTED canonicalPath: type: string publishedAt: type: string format: date-time version: type: integer format: int64 QuestionPointEdit: type: object required: - kind - content - displayOrder properties: id: type: string format: uuid kind: type: string enum: - FACT - ASSUMPTION - UNKNOWN - CONSTRAINT content: type: string displayOrder: type: integer minimum: 0 QuestionUpdateRequest: type: object required: - expectedVersion - type - title - bodyMarkdown - visibility - occurredAt properties: type: type: string enum: - OBSERVATION - EVIDENCE - SCOPE_CHANGE - BLOCKER - NEXT_STEP - RESOLUTION - RESOLUTION_REOPENED title: type: string maxLength: 180 bodyMarkdown: type: string visibility: type: string enum: - PRIVATE - PUBLIC occurredAt: type: string format: date-time expectedVersion: type: integer format: int64 QuestionUpdateResponse: type: object required: - id - questionVersion - type - title - bodyMarkdown - visibility - occurredAt properties: id: type: string format: uuid questionVersion: type: integer format: int64 type: type: string title: type: string bodyMarkdown: type: string visibility: type: string occurredAt: type: string format: date-time QuestionUpdateBody: type: object required: - expectedVersion - question - summary - context - importance - points - tagIds properties: expectedVersion: type: integer format: int64 question: type: string maxLength: 300 slug: type: string maxLength: 180 summary: type: string maxLength: 600 context: type: string importance: type: string nextVerification: type: string targetVisibility: type: string enum: - PRIVATE - UNLISTED - PUBLIC primaryProjectId: type: string format: uuid topicId: type: string format: uuid tagIds: type: array maxItems: 12 items: type: string format: uuid points: type: array items: $ref: '#/components/schemas/QuestionPointEdit' QuestionEditResponse: type: object required: - id - version - question - status - targetVisibility - points - updates - publication - updatedAt properties: id: type: string format: uuid version: type: integer format: int64 question: type: string slug: type: string summary: type: string context: type: string importance: type: string nextVerification: type: string status: type: string targetVisibility: type: string primaryProjectId: type: string format: uuid topicId: type: string format: uuid tagIds: type: array items: type: string format: uuid points: type: array items: $ref: '#/components/schemas/QuestionPointEdit' updates: type: array items: $ref: '#/components/schemas/QuestionUpdateResponse' resolution: type: object properties: type: type: string summary: type: string resolvedAt: type: string format: date-time publication: $ref: '#/components/schemas/PublicationStatus' updatedAt: type: string format: date-time ResolveQuestionRequest: type: object required: - expectedVersion - resolutionType - resolutionSummary - resolvedAt - createCaseDraft - createProjectDecision properties: expectedVersion: type: integer format: int64 resolutionType: type: string enum: - DECISION_MADE - ASSUMPTION_REJECTED - QUESTION_REFRAMED - NO_LONGER_RELEVANT resolutionSummary: type: string resolvedAt: type: string format: date-time createCaseDraft: type: boolean createProjectDecision: type: boolean ResolveQuestionResponse: type: object required: - questionId - status - version properties: questionId: type: string format: uuid status: type: string enum: - RESOLVED version: type: integer format: int64 createdCaseDraftId: type: string format: uuid createdProjectDecisionId: type: string format: uuid ProjectUpdateRequest: type: object required: - expectedVersion - name - oneLinePurpose - purposeMarkdown - boundaryMarkdown - phase - technologyLabels - targetVisibility properties: expectedVersion: type: integer format: int64 name: type: string maxLength: 180 slug: type: string maxLength: 180 oneLinePurpose: type: string maxLength: 600 purposeMarkdown: type: string boundaryMarkdown: type: string systemOverviewMarkdown: type: string phase: type: string currentObjective: type: string nextStep: type: string technologyLabels: type: array items: type: string targetVisibility: type: string enum: - PRIVATE - UNLISTED - PUBLIC featuredOrder: type: integer topicIds: type: array items: type: string format: uuid documentLinks: type: array items: $ref: '#/components/schemas/ProjectResourceLinkEdit' questionLinks: type: array items: $ref: '#/components/schemas/ProjectResourceLinkEdit' ProjectEditResponse: type: object required: - id - version - name - phase - workflowStatus - targetVisibility - publication - updatedAt properties: id: type: string format: uuid version: type: integer format: int64 name: type: string slug: type: string oneLinePurpose: type: string purposeMarkdown: type: string boundaryMarkdown: type: string systemOverviewMarkdown: type: string phase: type: string currentObjective: type: string nextStep: type: string technologyLabels: type: array items: type: string workflowStatus: type: string targetVisibility: type: string featuredOrder: type: integer publication: $ref: '#/components/schemas/PublicationStatus' updatedAt: type: string format: date-time topicIds: type: array items: type: string format: uuid documentLinks: type: array items: $ref: '#/components/schemas/ProjectResourceLinkEdit' questionLinks: type: array items: $ref: '#/components/schemas/ProjectResourceLinkEdit' ChangeProjectPhaseRequest: type: object required: - expectedVersion - phase - reason - publishActivity properties: expectedVersion: type: integer format: int64 phase: type: string reason: type: string publishActivity: type: boolean DecisionUpdateRequest: type: object required: - expectedVersion - statement - rationaleMarkdown - consequences - alternativesMarkdown - targetVisibility properties: expectedVersion: type: integer format: int64 statement: type: string maxLength: 1000 rationaleMarkdown: type: string consequences: type: array items: type: string alternativesMarkdown: type: string targetVisibility: type: string enum: - PRIVATE - PUBLIC sourceQuestionId: type: string format: uuid sourceCaseId: type: string format: uuid isFeatured: type: boolean decidedAt: type: string format: date-time DecisionResponse: allOf: - $ref: '#/components/schemas/DecisionUpdateRequest' - type: object required: - id - projectId - status - version properties: id: type: string format: uuid projectId: type: string format: uuid status: type: string version: type: integer format: int64 supersededById: type: string format: uuid ReleaseUpdateRequest: type: object required: - expectedVersion - versionLabel - title - summary - changeTypes - changesMarkdown - verificationMarkdown properties: expectedVersion: type: integer format: int64 versionLabel: type: string maxLength: 32 title: type: string maxLength: 180 summary: type: string maxLength: 600 releasedOn: type: string format: date changeTypes: type: array items: type: string reasonMarkdown: type: string changesMarkdown: type: string userImpactMarkdown: type: string implementationImpactMarkdown: type: string verificationMarkdown: type: string knownLimitationsMarkdown: type: string relatedResources: type: array items: type: object required: - resourceType - resourceId properties: resourceType: type: string resourceId: type: string format: uuid ReleaseEditResponse: allOf: - $ref: '#/components/schemas/ReleaseUpdateRequest' - type: object required: - id - workflowStatus - version - publication properties: id: type: string format: uuid workflowStatus: type: string version: type: integer format: int64 publication: $ref: '#/components/schemas/PublicationStatus' TopicEdit: type: object required: - name - slug properties: id: type: string format: uuid description: |- 응답에만 실린다. 경로가 `/topics/{id}`이므로 이 값이 없으면 목록에서 어떤 주제도 주소지정할 수 없다 — ProjectEditResponse / CaseEditResponse는 같은 이유로 이미 id를 싣고 있었고, TopicEdit만 빠져 있었다. 쓰기 요청에 와도 서버는 무시한다; 수정 대상은 경로가 소유한다. version: type: integer format: int64 description: |- 응답에만 실린다. 다음 수정에서 보낼 `expectedVersion`의 출처다. 이것이 없으면 클라이언트가 낙관적 잠금에 쓸 값을 얻을 방법이 없다. name: type: string maxLength: 80 slug: type: string maxLength: 100 description: type: string maxLength: 600 scope: type: string status: type: string enum: - ACTIVE - ARCHIVED expectedVersion: type: integer format: int64 featuredReferenceId: type: string format: uuid featuredCaseIds: type: array maxItems: 3 items: type: string format: uuid TagEdit: type: object required: - name - slug properties: name: type: string maxLength: 40 slug: type: string maxLength: 60 expectedVersion: type: integer format: int64 SiteConfigRequest: type: object required: - expectedVersion - brandTitle - identityStatement - operatorDisplayName - contacts properties: expectedVersion: type: integer format: int64 brandTitle: type: string identityStatement: type: string operatorDisplayName: type: string shortIdentity: type: string avatarAssetId: type: string format: uuid contacts: type: array items: type: object ProfileEditRequest: type: object required: - expectedVersion - headline - workingModel - territories - selectedEvidence - trajectory - contacts - targetVisibility properties: expectedVersion: type: integer format: int64 headline: type: string introductionMarkdown: type: string workingModel: type: array items: type: object territories: type: array items: type: object selectedEvidence: type: array items: type: object trajectory: type: array items: type: object contacts: type: array items: type: object targetVisibility: type: string enum: - PRIVATE - PUBLIC HomeFocusRequest: type: object required: - expectedVersion properties: expectedVersion: type: integer format: int64 defaultType: type: string enum: - CURRENT_WORK - OPEN_QUESTION - RECENT_DECISION currentProjectId: type: string format: uuid openQuestionId: type: string format: uuid recentDecisionId: type: string format: uuid QuestionIndexItem: type: object required: - id - question - status - targetVisibility - updatedAt - version - publication properties: id: type: string format: uuid question: type: string status: type: string targetVisibility: type: string primaryProject: $ref: '#/components/schemas/ProjectSummary' nextVerification: type: string updatedAt: type: string format: date-time version: type: integer format: int64 publication: $ref: '#/components/schemas/PublicationStatus' QuestionIndexPage: type: object required: - items - page properties: items: type: array items: $ref: '#/components/schemas/QuestionIndexItem' page: $ref: '#/components/schemas/PageMetadata' ProjectIndexItem: type: object required: - id - name - phase - workflowStatus - targetVisibility - updatedAt - version - publication properties: id: type: string format: uuid name: type: string phase: type: string workflowStatus: type: string targetVisibility: type: string currentObjective: type: string nextStep: type: string updatedAt: type: string format: date-time version: type: integer format: int64 publication: $ref: '#/components/schemas/PublicationStatus' ProjectIndexPage: type: object required: - items - page properties: items: type: array items: $ref: '#/components/schemas/ProjectIndexItem' page: $ref: '#/components/schemas/PageMetadata' ReleaseIndexItem: type: object required: - id - versionLabel - title - workflowStatus - updatedAt - version - publication properties: id: type: string format: uuid versionLabel: type: string title: type: string releasedOn: type: string format: date workflowStatus: type: string updatedAt: type: string format: date-time version: type: integer format: int64 publication: $ref: '#/components/schemas/PublicationStatus' ReleaseIndexPage: type: object required: - items - page properties: items: type: array items: $ref: '#/components/schemas/ReleaseIndexItem' page: $ref: '#/components/schemas/PageMetadata' SiteConfigResponse: type: object required: - id - version - brandTitle - identityStatement - operatorDisplayName - contacts properties: id: type: string format: uuid version: type: integer format: int64 brandTitle: type: string identityStatement: type: string operatorDisplayName: type: string shortIdentity: type: string avatarAssetId: type: string format: uuid contacts: type: array items: type: object ProfileEditResponse: type: object required: - id - version - headline - workingModel - territories - selectedEvidence - trajectory - contacts - targetVisibility - publication properties: id: type: string format: uuid version: type: integer format: int64 headline: type: string introductionMarkdown: type: string workingModel: type: array items: type: object territories: type: array items: type: object selectedEvidence: type: array items: type: object trajectory: type: array items: type: object contacts: type: array items: type: object targetVisibility: type: string publication: $ref: '#/components/schemas/PublicationStatus' HomeFocusResponse: type: object required: - id - version properties: id: type: string format: uuid version: type: integer format: int64 defaultType: type: string currentProjectId: type: string format: uuid openQuestionId: type: string format: uuid recentDecisionId: type: string format: uuid ProjectResourceLinkEdit: type: object required: - resourceId - relationType properties: resourceId: type: string format: uuid relationType: type: string enum: - PRIMARY - RELATED featuredOrder: type: integer minimum: 0 CreateDecisionRequest: type: object required: - expectedProjectVersion - statement - rationaleMarkdown - consequences - alternativesMarkdown - targetVisibility properties: expectedProjectVersion: type: integer format: int64 statement: type: string maxLength: 1000 rationaleMarkdown: type: string consequences: type: array items: type: string alternativesMarkdown: type: string targetVisibility: type: string enum: - PRIVATE - PUBLIC sourceQuestionId: type: string format: uuid sourceCaseId: type: string format: uuid isFeatured: type: boolean decidedAt: type: string format: date-time SupersedeDecisionRequest: type: object required: - expectedVersion - supersededById properties: expectedVersion: type: integer format: int64 supersededById: type: string format: uuid ProjectActivityRequest: type: object required: - expectedProjectVersion - activityType - title - visibility - occurredAt properties: expectedProjectVersion: type: integer format: int64 activityType: type: string title: type: string maxLength: 180 summary: type: string maxLength: 600 visibility: type: string enum: - PRIVATE - PUBLIC relatedResourceType: type: string relatedResourceId: type: string format: uuid occurredAt: type: string format: date-time ProjectActivityResponse: type: object required: - id - projectId - activityType - title - visibility - origin - occurredAt - version properties: id: type: string format: uuid projectId: type: string format: uuid activityType: type: string title: type: string summary: type: string visibility: type: string origin: type: string relatedResourceType: type: string relatedResourceId: type: string format: uuid occurredAt: type: string format: date-time version: type: integer format: int64 UpdateProjectActivityRequest: type: object required: - expectedVersion - title - visibility - occurredAt properties: expectedVersion: type: integer format: int64 title: type: string summary: type: string visibility: type: string enum: - PRIVATE - PUBLIC occurredAt: type: string format: date-time