{"openapi":"3.1.0","info":{"title":"TRA Studio","version":"0.1.0"},"paths":{"/api/v1/health":{"get":{"tags":["health"],"summary":"Health","description":"Liveness probe — the process is up.","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}},"/api/v1/health/ready":{"get":{"tags":["health"],"summary":"Health Ready","description":"Readiness probe — the process can reach its database.","operationId":"health_ready_api_v1_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthStatus"}}}}}}},"/api/v1/bug-reports":{"post":{"tags":["bug-reports"],"summary":"Report Bug","operationId":"report_bug_api_v1_bug_reports_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BugReportCreate"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Report Bug Api V1 Bug Reports Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standard-requests":{"post":{"tags":["standard-requests"],"summary":"Create Standard Request","operationId":"create_standard_request_api_v1_standard_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardRequestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login/mfa":{"post":{"tags":["auth"],"summary":"Login Mfa","description":"Second login step: verify the TOTP (or recovery) code for a challenge.","operationId":"login_mfa_api_v1_auth_login_mfa_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["auth"],"summary":"Register","description":"Self-service sign-up: create a new organization and its first admin user,\nthen sign them in. Public and rate-limited; unavailable in desktop mode.","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_api_v1_auth_logout_post","responses":{"204":{"description":"Successful Response"}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}}}},"patch":{"tags":["auth"],"summary":"Update Me","description":"Update the current user's own profile (display name).","operationId":"update_me_api_v1_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["auth"],"summary":"Change Password","description":"Change the current user's password (verifying the current one).","operationId":"change_password_api_v1_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/verify-email":{"post":{"tags":["auth"],"summary":"Verify Email","description":"Confirm an email address from a verification token (public).","operationId":"verify_email_api_v1_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/verify-email/resend":{"post":{"tags":["auth"],"summary":"Resend Verification","description":"Re-send the verification email to the current user (if not yet verified).","operationId":"resend_verification_api_v1_auth_verify_email_resend_post","responses":{"204":{"description":"Successful Response"}}}},"/api/v1/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Forgot Password","description":"Send a password-reset link (public). Always 204 — never reveals whether\nthe email exists.","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/reset-password":{"post":{"tags":["auth"],"summary":"Reset Password","description":"Set a new password from a reset token (public).","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/accept-invitation":{"post":{"tags":["auth"],"summary":"Accept Invitation","description":"Create an account from an invitation token and sign the new user in.","operationId":"accept_invitation_api_v1_auth_accept_invitation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/setup":{"post":{"tags":["auth"],"summary":"Mfa Setup","description":"Begin enrolment: mint a fresh (unconfirmed) TOTP secret + its QR code.\n\nThe secret is stored but MFA stays off until a code is confirmed via\n``/mfa/enable``. Re-enrolling requires disabling first, so an active secret\nis never clobbered.","operationId":"mfa_setup_api_v1_auth_mfa_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaSetupResponse"}}}}}}},"/api/v1/auth/mfa/enable":{"post":{"tags":["auth"],"summary":"Mfa Enable","description":"Confirm enrolment with a live code, turn MFA on, and return recovery\ncodes (shown once).","operationId":"mfa_enable_api_v1_auth_mfa_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaEnableRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaRecoveryCodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/disable":{"post":{"tags":["auth"],"summary":"Mfa Disable","description":"Turn MFA off (re-authenticated by password). Allowed regardless of plan\nso a downgraded account can always remove it.","operationId":"mfa_disable_api_v1_auth_mfa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaPasswordRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/mfa/recovery-codes":{"post":{"tags":["auth"],"summary":"Mfa Regenerate Recovery Codes","description":"Replace the recovery codes with a fresh set (invalidating the old ones).","operationId":"mfa_regenerate_recovery_codes_api_v1_auth_mfa_recovery_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaRecoveryCodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me/deletion-preview":{"get":{"tags":["auth"],"summary":"Deletion Preview","description":"What closing the account would do — organizations erased, left, or blocking.","operationId":"deletion_preview_api_v1_auth_me_deletion_preview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionPreview"}}}}}}},"/api/v1/auth/me/delete":{"post":{"tags":["auth"],"summary":"Delete Account","description":"Permanently delete the signed-in account (and erase any org it solely owns).\n\nRe-authenticated by password. When the deletion would destroy an\norganization, the request must echo the typed confirmation phrase.","operationId":"delete_account_api_v1_auth_me_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/platform/settings":{"get":{"tags":["platform"],"summary":"Get Platform Settings","description":"Public: the switches a client needs to render the right UI.","operationId":"get_platform_settings_api_v1_platform_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsOut"}}}}}}},"/api/v1/admin/platform/settings":{"patch":{"tags":["platform"],"summary":"Update Platform Settings","description":"Superuser: flip one or more switches. Omitted fields are left alone.","operationId":"update_platform_settings_api_v1_admin_platform_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products":{"get":{"tags":["products"],"summary":"List Products","operationId":"list_products_api_v1_products_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProductOut"},"type":"array","title":"Response List Products Api V1 Products Get"}}}}}},"post":{"tags":["products"],"summary":"Create Product","operationId":"create_product_api_v1_products_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/{product_id}":{"get":{"tags":["products"],"summary":"Get Product","operationId":"get_product_api_v1_products__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["products"],"summary":"Update Product","operationId":"update_product_api_v1_products__product_id__patch","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Product","operationId":"delete_product_api_v1_products__product_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects":{"get":{"tags":["projects"],"summary":"List Projects","operationId":"list_projects_api_v1_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectOut"},"type":"array","title":"Response List Projects Api V1 Projects Get"}}}}}},"post":{"tags":["projects"],"summary":"Create Project","operationId":"create_project_api_v1_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}":{"get":{"tags":["projects"],"summary":"Get Project","operationId":"get_project_api_v1_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["projects"],"summary":"Update Project","operationId":"update_project_api_v1_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Delete Project","operationId":"delete_project_api_v1_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/archive":{"post":{"tags":["projects"],"summary":"Archive Project","description":"Finalise (archive) a project: after this it is read-only (but still\ndeletable) and moves out of the main overview into \"Archived projects\".\n\nArchiving is itself a lifecycle action, so — like the approval transitions —\nit deliberately bypasses the read-only guard and can be applied in any state\n(e.g. archiving a Released version), not only in Draft.","operationId":"archive_project_api_v1_projects__project_id__archive_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/unarchive":{"post":{"tags":["projects"],"summary":"Unarchive Project","description":"Restore an archived project to active: clears the archive stamp so it\nreturns to the main overview. Its workflow status is unchanged (a Draft\nbecomes editable again; a Released version stays read-only via its status).","operationId":"unarchive_project_api_v1_projects__project_id__unarchive_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/versions":{"get":{"tags":["projects"],"summary":"List Versions","description":"All TRA versions of this project's product (the version overview).","operationId":"list_versions_api_v1_projects__project_id__versions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VersionSummary"},"title":"Response List Versions Api V1 Projects  Project Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects"],"summary":"Create New Version","description":"Copy a *Released* project into a fresh Draft version (spec §6.11).","operationId":"create_new_version_api_v1_projects__project_id__versions_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewVersionIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/checklist":{"get":{"tags":["projects"],"summary":"Get Checklist","description":"Requirements the linked Workflow delegated to this project.","operationId":"get_checklist_api_v1_projects__project_id__checklist_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/checklist/{requirement_id}":{"put":{"tags":["projects"],"summary":"Set Checklist Item","description":"Update a delegated requirement's task: note, linked control, and/or\ndone. It can only be marked done once a note or control is present.","operationId":"set_checklist_item_api_v1_projects__project_id__checklist__requirement_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistItemUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/checklist-items":{"get":{"tags":["projects"],"summary":"Get Checklist Items","description":"Requirements the linked Workflow flagged as project checklist items.","operationId":"get_checklist_items_api_v1_projects__project_id__checklist_items_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/checklist-items/{requirement_id}":{"put":{"tags":["projects"],"summary":"Set Checklist Items Item","description":"Update a checklist-item requirement's task (same rules as the delegation\nchecklist).","operationId":"set_checklist_items_item_api_v1_projects__project_id__checklist_items__requirement_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistItemUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/checklist-link-options":{"get":{"tags":["projects"],"summary":"List Checklist Link Options","description":"Objects in this project a checklist item may link to as justification.","operationId":"list_checklist_link_options_api_v1_projects__project_id__checklist_link_options_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChecklistLinkOption"},"title":"Response List Checklist Link Options Api V1 Projects  Project Id  Checklist Link Options Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/documents":{"get":{"tags":["projects"],"summary":"Get Project Documents","description":"The project's documents: its own uploads, plus the records its linked\nWorkflow already cites as the artifact of an activity.\n\nRead-only. Uploading, editing and deleting a project's own documents goes\nthrough the document endpoints (``POST /documents`` with ``project_id``),\nwhich own the storage quota and the upload rules; the inherited half belongs\nto the organization and is shown here as a reference.","operationId":"get_project_documents_api_v1_projects__project_id__documents_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDocumentsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/evidence":{"get":{"tags":["projects"],"summary":"Get Evidence","description":"Activities the linked Workflow flagged for evidence tracking here.","operationId":"get_evidence_api_v1_projects__project_id__evidence_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/evidence/{sdlc_item_id}":{"put":{"tags":["projects"],"summary":"Set Evidence Item","description":"Record the evidence a tracked activity produced in this project: a note,\na linked object, and/or done. Same rules as the project checklists — it can\nonly be marked done once a note or a link is present.","operationId":"set_evidence_item_api_v1_projects__project_id__evidence__sdlc_item_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"sdlc_item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sdlc Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceItemUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/gates":{"get":{"tags":["projects"],"summary":"Get Gates","description":"The linked Workflow's gates and their checklists, as passed here.","operationId":"get_gates_api_v1_projects__project_id__gates_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/gates/checks/{gate_check_id}":{"put":{"tags":["projects"],"summary":"Set Gate Check","description":"Record how this project passed one check of a gate: a note, a linked\nobject, and/or done. Same rules as the project checklists — it can only be\nmarked done once a note or a link is present.","operationId":"set_gate_check_api_v1_projects__project_id__gates_checks__gate_check_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"gate_check_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gate Check Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateCheckUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/roles":{"get":{"tags":["projects"],"summary":"List Project Roles","operationId":"list_project_roles_api_v1_projects__project_id__roles_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectRoleOut"},"title":"Response List Project Roles Api V1 Projects  Project Id  Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/roles/{user_id}":{"put":{"tags":["projects"],"summary":"Assign Project Role","operationId":"assign_project_role_api_v1_projects__project_id__roles__user_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectRoleAssign"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectRoleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Remove Project Role","operationId":"remove_project_role_api_v1_projects__project_id__roles__user_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/export":{"get":{"tags":["projects"],"summary":"Export Project Bundle","description":"Download the whole assessment as a portable JSON bundle.\n\nViewer is enough: this hands the reader the content they can already read on\nthe pages, in one file. What it does *not* hand them is the audit log or the\nrelease state — see :mod:`app.schemas.project_io` for why those stay behind.","operationId":"export_project_bundle_api_v1_projects__project_id__export_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/import-json":{"post":{"tags":["projects"],"summary":"Import Project Bundle","description":"Create a new Draft project from a bundle.\n\nTRA Manager, the same role creating a project needs: an import *is* creating\none, and it counts against the plan's product limit like any other.","operationId":"import_project_bundle_api_v1_projects_import_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectBundle"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/covered-products":{"get":{"tags":["covered-products"],"summary":"List Covered Products","operationId":"list_covered_products_api_v1_projects__project_id__covered_products_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoveredProductOut"},"title":"Response List Covered Products Api V1 Projects  Project Id  Covered Products Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/covered-products/{product_id}":{"put":{"tags":["covered-products"],"summary":"Set Covered Product","description":"Reuse this TRA for a product, or update the justification (idempotent).","operationId":"set_covered_product_api_v1_projects__project_id__covered_products__product_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoveredProductIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoveredProductOut"},"title":"Response Set Covered Product Api V1 Projects  Project Id  Covered Products  Product Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["covered-products"],"summary":"Remove Covered Product","operationId":"remove_covered_product_api_v1_projects__project_id__covered_products__product_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/portfolio":{"get":{"tags":["portfolio"],"summary":"Get Portfolio","operationId":"get_portfolio_api_v1_portfolio_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PortfolioRow"},"type":"array","title":"Response Get Portfolio Api V1 Portfolio Get"}}}}}}},"/api/v1/projects/{project_id}/assumptions":{"get":{"tags":["assumptions"],"summary":"List Assumptions","operationId":"list_assumptions_api_v1_projects__project_id__assumptions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssumptionOut"},"title":"Response List Assumptions Api V1 Projects  Project Id  Assumptions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["assumptions"],"summary":"Create Assumption","operationId":"create_assumption_api_v1_projects__project_id__assumptions_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumptionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumptionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/assumptions/{assumption_id}":{"get":{"tags":["assumptions"],"summary":"Get Assumption","operationId":"get_assumption_api_v1_projects__project_id__assumptions__assumption_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"assumption_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assumption Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumptionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["assumptions"],"summary":"Update Assumption","operationId":"update_assumption_api_v1_projects__project_id__assumptions__assumption_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"assumption_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assumption Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumptionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumptionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assumptions"],"summary":"Delete Assumption","operationId":"delete_assumption_api_v1_projects__project_id__assumptions__assumption_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"assumption_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Assumption Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/usage-statements":{"get":{"tags":["usage-statements"],"summary":"List Usage Statements","operationId":"list_usage_statements_api_v1_projects__project_id__usage_statements_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsageStatementOut"},"title":"Response List Usage Statements Api V1 Projects  Project Id  Usage Statements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["usage-statements"],"summary":"Create Usage Statement","operationId":"create_usage_statement_api_v1_projects__project_id__usage_statements_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStatementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStatementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/usage-statements/{statement_id}":{"get":{"tags":["usage-statements"],"summary":"Get Usage Statement","operationId":"get_usage_statement_api_v1_projects__project_id__usage_statements__statement_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"statement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Statement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStatementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["usage-statements"],"summary":"Update Usage Statement","operationId":"update_usage_statement_api_v1_projects__project_id__usage_statements__statement_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"statement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Statement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStatementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageStatementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["usage-statements"],"summary":"Delete Usage Statement","operationId":"delete_usage_statement_api_v1_projects__project_id__usage_statements__statement_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"statement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Statement Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/security-controls":{"get":{"tags":["security-controls"],"summary":"List Security Controls","operationId":"list_security_controls_api_v1_projects__project_id__security_controls_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SecurityControlOut"},"title":"Response List Security Controls Api V1 Projects  Project Id  Security Controls Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["security-controls"],"summary":"Create Security Control","operationId":"create_security_control_api_v1_projects__project_id__security_controls_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityControlCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityControlOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/security-controls/{control_id}":{"get":{"tags":["security-controls"],"summary":"Get Security Control","operationId":"get_security_control_api_v1_projects__project_id__security_controls__control_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Control Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityControlOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["security-controls"],"summary":"Update Security Control","operationId":"update_security_control_api_v1_projects__project_id__security_controls__control_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Control Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityControlUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityControlOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["security-controls"],"summary":"Delete Security Control","operationId":"delete_security_control_api_v1_projects__project_id__security_controls__control_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Control Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/security-controls/{control_id}/openproject-task":{"post":{"tags":["security-controls"],"summary":"Create Openproject Task","description":"Raise this control as a task in the project's linked OpenProject project.\n\nThe same act as raising a risk treatment\n(:mod:`app.api.v1.routes.project_mitigations`), under the same rules:\ndeliberately *not* guarded by the draft-only read-only rule, because handing\nout the work a released TRA calls for is exactly when a tracker is wanted;\nand idempotent by intent rather than by retry, so a control that already has\na work package gets it reported back instead of a second one.","operationId":"create_openproject_task_api_v1_projects__project_id__security_controls__control_id__openproject_task_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Control Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityControlTaskOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/security-categories":{"get":{"tags":["security-categories"],"summary":"List Security Categories","operationId":"list_security_categories_api_v1_projects__project_id__security_categories_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SecurityCategoryOut"},"title":"Response List Security Categories Api V1 Projects  Project Id  Security Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["security-categories"],"summary":"Create Security Category","operationId":"create_security_category_api_v1_projects__project_id__security_categories_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityCategoryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityCategoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/security-categories/{category_id}":{"patch":{"tags":["security-categories"],"summary":"Update Security Category","operationId":"update_security_category_api_v1_projects__project_id__security_categories__category_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityCategoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityCategoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["security-categories"],"summary":"Delete Security Category","operationId":"delete_security_category_api_v1_projects__project_id__security_categories__category_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/components":{"get":{"tags":["components"],"summary":"List Components","operationId":"list_components_api_v1_projects__project_id__components_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ComponentOut"},"title":"Response List Components Api V1 Projects  Project Id  Components Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["components"],"summary":"Create Component","operationId":"create_component_api_v1_projects__project_id__components_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/components/{component_id}":{"get":{"tags":["components"],"summary":"Get Component","operationId":"get_component_api_v1_projects__project_id__components__component_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["components"],"summary":"Update Component","operationId":"update_component_api_v1_projects__project_id__components__component_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["components"],"summary":"Delete Component","operationId":"delete_component_api_v1_projects__project_id__components__component_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/components/{component_id}/impacts":{"get":{"tags":["components"],"summary":"List Impacts","operationId":"list_impacts_api_v1_projects__project_id__components__component_id__impacts_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ComponentImpactOut"},"title":"Response List Impacts Api V1 Projects  Project Id  Components  Component Id  Impacts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["components"],"summary":"Create Impact","operationId":"create_impact_api_v1_projects__project_id__components__component_id__impacts_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentImpactCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentImpactOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/components/{component_id}/impacts/{impact_id}":{"patch":{"tags":["components"],"summary":"Update Impact","operationId":"update_impact_api_v1_projects__project_id__components__component_id__impacts__impact_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}},{"name":"impact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Impact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentImpactUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComponentImpactOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["components"],"summary":"Delete Impact","operationId":"delete_impact_api_v1_projects__project_id__components__component_id__impacts__impact_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"component_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Component Id"}},{"name":"impact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Impact Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/data-flows":{"get":{"tags":["data flows"],"summary":"List Data Flows","operationId":"list_data_flows_api_v1_projects__project_id__data_flows_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DataFlowOut"},"title":"Response List Data Flows Api V1 Projects  Project Id  Data Flows Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["data flows"],"summary":"Create Data Flow","operationId":"create_data_flow_api_v1_projects__project_id__data_flows_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFlowCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFlowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/data-flows/coverage":{"get":{"tags":["data flows"],"summary":"Flow Coverage","description":"Flows the zone/conduit model cannot account for (TM-PROC-001 §8).","operationId":"flow_coverage_api_v1_projects__project_id__data_flows_coverage_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowCoverageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/data-flows/{data_flow_id}":{"get":{"tags":["data flows"],"summary":"Get Data Flow","operationId":"get_data_flow_api_v1_projects__project_id__data_flows__data_flow_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"data_flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Data Flow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFlowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["data flows"],"summary":"Update Data Flow","operationId":"update_data_flow_api_v1_projects__project_id__data_flows__data_flow_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"data_flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Data Flow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFlowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataFlowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["data flows"],"summary":"Delete Data Flow","operationId":"delete_data_flow_api_v1_projects__project_id__data_flows__data_flow_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"data_flow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Data Flow Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/diagram":{"get":{"tags":["diagram"],"summary":"Get Diagram","description":"The project's system model laid out for drawing.","operationId":"get_diagram_api_v1_projects__project_id__diagram_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiagramOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/model-gaps":{"get":{"tags":["diagram"],"summary":"Get Model Gaps","description":"Rows of the system model that are still missing something they need.\n\nA report, like the data-flow coverage check next to it — nothing here blocks\na write. Drawing first and enriching later is the intended way to work; this\nonly makes sure the second half is visible instead of forgotten.","operationId":"get_model_gaps_api_v1_projects__project_id__model_gaps_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelGapsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/imported-model":{"get":{"tags":["imported models"],"summary":"Get Imported Model","description":"The most recently imported source model, or ``null`` if there is none.\n\nNull rather than 404: \"this project has no imported model\" is an ordinary\nanswer the diagram page renders, not an error it has to handle.","operationId":"get_imported_model_api_v1_projects__project_id__imported_model_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ImportedModelOut"},{"type":"null"}],"title":"Response Get Imported Model Api V1 Projects  Project Id  Imported Model Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats":{"get":{"tags":["threats"],"summary":"List Threats","operationId":"list_threats_api_v1_projects__project_id__threats_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ThreatOut"},"title":"Response List Threats Api V1 Projects  Project Id  Threats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["threats"],"summary":"Create Threat","operationId":"create_threat_api_v1_projects__project_id__threats_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats/import/tm7":{"post":{"tags":["threats"],"summary":"Import Tm7","description":"Import a Microsoft Threat Modeling Tool model into this threat list.\n\nCalled twice by the UI: once with ``dry_run`` to show what the file holds\nand what would be added, then again to commit. The file is re-sent rather\nthan parked server-side — it is small, and a stateless preview cannot go\nstale between the two calls.\n\nImported threats arrive **unrated**; MTMT's own priority is recorded as text\n(see :mod:`app.services.tm7_import`) so a tool's guess never masquerades as\nthis project's risk assessment.","operationId":"import_tm7_api_v1_projects__project_id__threats_import_tm7_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_tm7_api_v1_projects__project_id__threats_import_tm7_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tm7ImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats/generate/stride":{"post":{"tags":["threats"],"summary":"Generate Stride","description":"Derive threats from the system diagram, one per STRIDE category.\n\nOnly for elements that cross a trust boundary — the reasoning is in\n:mod:`app.services.stride_generate`. Called twice by the UI like the ``.tm7``\nimport: once with ``dry_run`` to show what would be created, then again to\ncommit.\n\nA re-run creates only what is missing. Threats a previous run created are\nrecognised by their ``external_ref`` and left exactly as they are, so an\nanalyst's edits are never overwritten and nothing is duplicated.","operationId":"generate_stride_api_v1_projects__project_id__threats_generate_stride_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StrideGenerateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats/export/tm7":{"post":{"tags":["threats"],"summary":"Export Tm7","description":"Give the imported threat model back, with this project's triage in it.\n\nThe response is the customer's own file with two elements rewritten per\nthreat we have a verdict on (TM7_EXPORT_PLAN §A2/§A3) — their knowledge base,\ntheir diagram and any threat we never imported pass through untouched.\n\n``write_priority`` is off by default: MTMT's Priority may have been set by\nhand in their tool, and overwriting it with our derived risk without being\nasked would destroy a judgement we did not make.","operationId":"export_tm7_api_v1_projects__project_id__threats_export_tm7_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"write_priority","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Write Priority"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats/{threat_id}":{"get":{"tags":["threats"],"summary":"Get Threat","operationId":"get_threat_api_v1_projects__project_id__threats__threat_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["threats"],"summary":"Update Threat","operationId":"update_threat_api_v1_projects__project_id__threats__threat_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["threats"],"summary":"Delete Threat","operationId":"delete_threat_api_v1_projects__project_id__threats__threat_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats/{threat_id}/mitigations":{"get":{"tags":["mitigations"],"summary":"List Mitigations","operationId":"list_mitigations_api_v1_projects__project_id__threats__threat_id__mitigations_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MitigationOut"},"title":"Response List Mitigations Api V1 Projects  Project Id  Threats  Threat Id  Mitigations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mitigations"],"summary":"Create Mitigation","operationId":"create_mitigation_api_v1_projects__project_id__threats__threat_id__mitigations_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/threats/{threat_id}/mitigations/{mitigation_id}":{"get":{"tags":["mitigations"],"summary":"Get Mitigation","operationId":"get_mitigation_api_v1_projects__project_id__threats__threat_id__mitigations__mitigation_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}},{"name":"mitigation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mitigation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["mitigations"],"summary":"Update Mitigation","operationId":"update_mitigation_api_v1_projects__project_id__threats__threat_id__mitigations__mitigation_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}},{"name":"mitigation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mitigation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mitigations"],"summary":"Delete Mitigation","operationId":"delete_mitigation_api_v1_projects__project_id__threats__threat_id__mitigations__mitigation_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"threat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Threat Id"}},{"name":"mitigation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mitigation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/mitigations":{"get":{"tags":["mitigations"],"summary":"List Project Mitigations","description":"Every risk treatment in the project, grouped by treatment type and\nworst-risk-first within each type.","operationId":"list_project_mitigations_api_v1_projects__project_id__mitigations_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectMitigationOut"},"title":"Response List Project Mitigations Api V1 Projects  Project Id  Mitigations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/mitigations/{mitigation_id}/openproject-task":{"post":{"tags":["mitigations"],"summary":"Create Openproject Task","description":"Raise this treatment as a task in the project's linked OpenProject project.\n\nDeliberately *not* guarded by the draft-only read-only rule: handing out the\nwork a released TRA decided on is exactly when a tracker is wanted, and the\ntask lives in OpenProject rather than changing anything the TRA says.\n\nIdempotent by intent rather than by retry: a treatment that already has a\nwork package gets it reported back (``created: false``) instead of a second\none. Re-raising a task somebody deleted over in OpenProject is a deliberate\nact, so it is not done here silently.","operationId":"create_openproject_task_api_v1_projects__project_id__mitigations__mitigation_id__openproject_task_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"mitigation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mitigation Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectTaskOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/workshop-sessions":{"get":{"tags":["workshop-sessions"],"summary":"List Sessions","operationId":"list_sessions_api_v1_projects__project_id__workshop_sessions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkshopSessionOut"},"title":"Response List Sessions Api V1 Projects  Project Id  Workshop Sessions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workshop-sessions"],"summary":"Create Session","operationId":"create_session_api_v1_projects__project_id__workshop_sessions_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkshopSessionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkshopSessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/workshop-sessions/{session_id}":{"get":{"tags":["workshop-sessions"],"summary":"Get Session","operationId":"get_session_api_v1_projects__project_id__workshop_sessions__session_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkshopSessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workshop-sessions"],"summary":"Update Session","operationId":"update_session_api_v1_projects__project_id__workshop_sessions__session_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkshopSessionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkshopSessionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workshop-sessions"],"summary":"Delete Session","operationId":"delete_session_api_v1_projects__project_id__workshop_sessions__session_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/workshop-sessions/{session_id}/participants":{"get":{"tags":["workshop-sessions"],"summary":"List Participants","operationId":"list_participants_api_v1_projects__project_id__workshop_sessions__session_id__participants_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantOut"},"title":"Response List Participants Api V1 Projects  Project Id  Workshop Sessions  Session Id  Participants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workshop-sessions"],"summary":"Create Participant","operationId":"create_participant_api_v1_projects__project_id__workshop_sessions__session_id__participants_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/workshop-sessions/{session_id}/participants/{participant_id}":{"patch":{"tags":["workshop-sessions"],"summary":"Update Participant","operationId":"update_participant_api_v1_projects__project_id__workshop_sessions__session_id__participants__participant_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}},{"name":"participant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Participant Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workshop-sessions"],"summary":"Delete Participant","operationId":"delete_participant_api_v1_projects__project_id__workshop_sessions__session_id__participants__participant_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}},{"name":"participant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Participant Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/risk-summary":{"get":{"tags":["dashboard"],"summary":"Get Risk Summary","operationId":"get_risk_summary_api_v1_projects__project_id__risk_summary_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskSummaryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/zones":{"get":{"tags":["zones"],"summary":"List Zones","operationId":"list_zones_api_v1_projects__project_id__zones_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneOut"},"title":"Response List Zones Api V1 Projects  Project Id  Zones Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["zones"],"summary":"Create Zone","operationId":"create_zone_api_v1_projects__project_id__zones_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/zones/{zone_id}":{"patch":{"tags":["zones"],"summary":"Update Zone","operationId":"update_zone_api_v1_projects__project_id__zones__zone_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"zone_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Zone Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["zones"],"summary":"Delete Zone","operationId":"delete_zone_api_v1_projects__project_id__zones__zone_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"zone_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Zone Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/conduits":{"get":{"tags":["zones"],"summary":"List Conduits","operationId":"list_conduits_api_v1_projects__project_id__conduits_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConduitOut"},"title":"Response List Conduits Api V1 Projects  Project Id  Conduits Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["zones"],"summary":"Create Conduit","operationId":"create_conduit_api_v1_projects__project_id__conduits_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConduitCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConduitOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/conduits/{conduit_id}":{"patch":{"tags":["zones"],"summary":"Update Conduit","operationId":"update_conduit_api_v1_projects__project_id__conduits__conduit_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"conduit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conduit Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConduitUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConduitOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["zones"],"summary":"Delete Conduit","operationId":"delete_conduit_api_v1_projects__project_id__conduits__conduit_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"conduit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conduit Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/audit":{"get":{"tags":["audit"],"summary":"List Audit","operationId":"list_audit_api_v1_projects__project_id__audit_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntryOut"},"title":"Response List Audit Api V1 Projects  Project Id  Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/audit/verify":{"get":{"tags":["audit"],"summary":"Verify Audit","operationId":"verify_audit_api_v1_projects__project_id__audit_verify_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditVerifyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/reports/export.json":{"post":{"tags":["reports"],"summary":"Export Json","operationId":"export_json_api_v1_projects__project_id__reports_export_json_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/reports/export.csv":{"post":{"tags":["reports"],"summary":"Export Csv","operationId":"export_csv_api_v1_projects__project_id__reports_export_csv_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approvals":{"get":{"tags":["approvals"],"summary":"List Approvals","operationId":"list_approvals_api_v1_projects__project_id__approvals_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApprovalOut"},"title":"Response List Approvals Api V1 Projects  Project Id  Approvals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approval/completeness":{"get":{"tags":["approvals"],"summary":"Get Completeness","operationId":"get_completeness_api_v1_projects__project_id__approval_completeness_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompletenessOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approval/signature":{"get":{"tags":["approvals"],"summary":"Verify Signature","description":"Re-hash the current content and compare it to the latest approval's token\n— an auditor's tamper check (spec §6.10).","operationId":"verify_signature_api_v1_projects__project_id__approval_signature_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignatureVerifyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approval/submit":{"post":{"tags":["approvals"],"summary":"Submit For Review","description":"Draft → In Review. Non-blocking: any open issues are returned, not\nenforced (spec §6.10 shows them to the reviewer).","operationId":"submit_for_review_api_v1_projects__project_id__approval_submit_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approval/decision":{"post":{"tags":["approvals"],"summary":"Record Decision","description":"Approve / approve-with-conditions / reject a project in review.\n\nApproval computes the content signature and moves to Approved; rejection\nrequires a comment and returns the project to Draft.","operationId":"record_decision_api_v1_projects__project_id__approval_decision_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approval/reopen":{"post":{"tags":["approvals"],"summary":"Reopen To Draft","description":"Return a project to Draft so it can be edited again.\n\nAllowed from any state that isn't Released (In Review or Approved) — a\nReleased version is final and must be revised as a new version instead.","operationId":"reopen_to_draft_api_v1_projects__project_id__approval_reopen_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/approval/release":{"post":{"tags":["approvals"],"summary":"Release Project","description":"Approved → Released. Assigns the final version (which must exceed the\nprevious released version) and stamps release metadata.","operationId":"release_project_api_v1_projects__project_id__approval_release_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ReleaseIn"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows":{"get":{"tags":["workflows"],"summary":"List Workflows","operationId":"list_workflows_api_v1_workflows_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkflowOut"},"type":"array","title":"Response List Workflows Api V1 Workflows Get"}}}}}},"post":{"tags":["workflows"],"summary":"Create Workflow","operationId":"create_workflow_api_v1_workflows_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/clone":{"post":{"tags":["workflows"],"summary":"Clone Plan","description":"Create an exact, independent copy of a plan.\n\nName defaults to '<source> (clone)'; an optional ``name`` overrides it. When\n``as_parent`` is set, a child source is copied as a standalone root (no\ninherited scope) rather than another child of the same parent.","operationId":"clone_plan_api_v1_workflows__workflow_id__clone_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowCloneRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/make-child":{"post":{"tags":["workflows"],"summary":"Make Child","description":"Demote an existing root workflow into a child of another root.\n\nThe workflow is placed as a node in the target parent's Secure SDLC and, as a\nchild, gives up its own standards scope: its in-scope standards and their\nrequirement assignments are dropped (it now inherits the parent's scope via\ndelegation). Its SDLC activities are kept. Nesting stays one level deep, so\nonly a childless root can be demoted, and only onto a writable root parent.","operationId":"make_child_api_v1_workflows__workflow_id__make_child_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MakeChildRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/make-parent":{"post":{"tags":["workflows"],"summary":"Make Parent","description":"Promote a child workflow into a standalone root (inverse of make-child).\n\nThe workflow leaves its parent (``parent_id`` → None) and no longer inherits\nthe parent's standards scope — as a root it defines its own. If it was placed\nas a node in the parent's Secure SDLC, that node is removed (dropping any\nrequirements the parent delegated to it via the node); its own SDLC\nactivities are kept. Removing the node mutates the parent, so the parent must\nbe writable (Draft).","operationId":"make_parent_api_v1_workflows__workflow_id__make_parent_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/export":{"get":{"tags":["workflows"],"summary":"Export Plan","description":"Download a workflow (with its children) as a portable JSON bundle.","operationId":"export_plan_api_v1_workflows__workflow_id__export_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/export/openproject":{"post":{"tags":["workflows"],"summary":"Export Plan To Openproject","description":"Push this workflow's Secure SDLC into an OpenProject project.\n\nThe workflow becomes a summary task holding one work package per activity,\nthe tree preserved as the work-package hierarchy. A delegated child workflow\ncomes along: its node in the parent's tree holds the child's own activities\nas sub-tasks. Re-exporting into the same OpenProject project updates the work\npackages a previous export created instead of duplicating them.","operationId":"export_plan_to_openproject_api_v1_workflows__workflow_id__export_openproject_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectExportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/import-json":{"post":{"tags":["workflows"],"summary":"Import Plan","description":"Import a bundle as a new top-level workflow (children included).","operationId":"import_plan_api_v1_workflows_import_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowBundle"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{parent_id}/import-child":{"post":{"tags":["workflows"],"summary":"Import Child Plan","description":"Import a bundle as a child workflow placed in ``parent_id``'s Secure SDLC.\n\nThe imported workflow must not itself contain child workflows (nesting is one\nlevel deep), and it inherits the parent's standards scope.","operationId":"import_child_plan_api_v1_workflows__parent_id__import_child_post","parameters":[{"name":"parent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Parent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowBundle"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/library":{"get":{"tags":["workflows"],"summary":"List Library Workflows","description":"The workflow templates available to import (the global catalog).","operationId":"list_library_workflows_api_v1_workflows_library_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkflowLibraryEntry"},"type":"array","title":"Response List Library Workflows Api V1 Workflows Library Get"}}}}}}},"/api/v1/workflows/library/{key}/import":{"post":{"tags":["workflows"],"summary":"Import Library Workflow","description":"Import a bundled template as a new top-level workflow.","operationId":"import_library_workflow_api_v1_workflows_library__key__import_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowImportResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow","operationId":"get_workflow_api_v1_workflows__workflow_id__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workflows"],"summary":"Update Workflow","operationId":"update_workflow_api_v1_workflows__workflow_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Workflow","operationId":"delete_workflow_api_v1_workflows__workflow_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/sdlc-items":{"get":{"tags":["workflows"],"summary":"List Sdlc Items","operationId":"list_sdlc_items_api_v1_workflows__workflow_id__sdlc_items_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SdlcItemOut"},"title":"Response List Sdlc Items Api V1 Workflows  Workflow Id  Sdlc Items Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workflows"],"summary":"Create Sdlc Item","operationId":"create_sdlc_item_api_v1_workflows__workflow_id__sdlc_items_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdlcItemCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdlcItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/sdlc-items/{item_id}":{"patch":{"tags":["workflows"],"summary":"Update Sdlc Item","operationId":"update_sdlc_item_api_v1_workflows__workflow_id__sdlc_items__item_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdlcItemUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdlcItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Sdlc Item","operationId":"delete_sdlc_item_api_v1_workflows__workflow_id__sdlc_items__item_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/sdlc-items/{item_id}/move":{"post":{"tags":["workflows"],"summary":"Move Sdlc Item","description":"Move an item one step up or down among its siblings (same parent).\n\nReordering is confined to the sibling group: the item swaps places with its\nimmediate neighbour in that group. Moving past either end is a no-op. The\nwhole group is renormalised to contiguous ``sort_order`` values so the order\nstays well-defined even if prior values had gaps or ties.","operationId":"move_sdlc_item_api_v1_workflows__workflow_id__sdlc_items__item_id__move_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SdlcItemMove"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SdlcItemOut"},"title":"Response Move Sdlc Item Api V1 Workflows  Workflow Id  Sdlc Items  Item Id  Move Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/gate-checks":{"get":{"tags":["workflows"],"summary":"List Gate Checks","description":"Every checklist item of every gate in this workflow.\n\nOne request for the whole tree — the editor renders each gate's checklist\ninline, and a request per gate would multiply with the process's size.","operationId":"list_gate_checks_api_v1_workflows__workflow_id__gate_checks_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GateChecklistItemOut"},"title":"Response List Gate Checks Api V1 Workflows  Workflow Id  Gate Checks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/sdlc-items/{item_id}/checks":{"post":{"tags":["workflows"],"summary":"Create Gate Check","description":"Add a condition to a gate's checklist: free text, or a reference to a\nrequirement that is in this plan's scope.","operationId":"create_gate_check_api_v1_workflows__workflow_id__sdlc_items__item_id__checks_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateChecklistItemCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateChecklistItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/sdlc-items/{item_id}/checks/{check_id}":{"patch":{"tags":["workflows"],"summary":"Update Gate Check","operationId":"update_gate_check_api_v1_workflows__workflow_id__sdlc_items__item_id__checks__check_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateChecklistItemUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateChecklistItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Gate Check","description":"Remove a check. Any per-project pass state for it goes with it (CASCADE):\nthe condition no longer exists, so neither does the answer to it.","operationId":"delete_gate_check_api_v1_workflows__workflow_id__sdlc_items__item_id__checks__check_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/sdlc-items/{item_id}/checks/{check_id}/move":{"post":{"tags":["workflows"],"summary":"Move Gate Check","description":"Move a check one step up or down its gate's checklist.\n\nRenormalises the whole checklist to contiguous ``sort_order`` values, the\nsame way the SDLC tree is reordered, so the order stays well-defined even\nif prior values had gaps or ties.","operationId":"move_gate_check_api_v1_workflows__workflow_id__sdlc_items__item_id__checks__check_id__move_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateChecklistItemMove"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GateChecklistItemOut"},"title":"Response Move Gate Check Api V1 Workflows  Workflow Id  Sdlc Items  Item Id  Checks  Check Id  Move Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/lanes":{"get":{"tags":["workflows"],"summary":"List Lanes","operationId":"list_lanes_api_v1_workflows__workflow_id__lanes_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowLaneOut"},"title":"Response List Lanes Api V1 Workflows  Workflow Id  Lanes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workflows"],"summary":"Create Lane","operationId":"create_lane_api_v1_workflows__workflow_id__lanes_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowLaneCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowLaneOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/lanes/{lane_id}":{"patch":{"tags":["workflows"],"summary":"Update Lane","operationId":"update_lane_api_v1_workflows__workflow_id__lanes__lane_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"lane_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lane Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowLaneUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowLaneOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Lane","operationId":"delete_lane_api_v1_workflows__workflow_id__lanes__lane_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"lane_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lane Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/roles":{"get":{"tags":["workflows"],"summary":"List Roles","operationId":"list_roles_api_v1_workflows__workflow_id__roles_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowRoleOut"},"title":"Response List Roles Api V1 Workflows  Workflow Id  Roles Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workflows"],"summary":"Create Role","operationId":"create_role_api_v1_workflows__workflow_id__roles_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRoleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRoleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/roles/{role_id}":{"patch":{"tags":["workflows"],"summary":"Update Role","operationId":"update_role_api_v1_workflows__workflow_id__roles__role_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRoleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Role","operationId":"delete_role_api_v1_workflows__workflow_id__roles__role_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"role_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Role Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/standards":{"get":{"tags":["workflows"],"summary":"List Workflow Standards","operationId":"list_workflow_standards_api_v1_workflows__workflow_id__standards_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStandardOut"},"title":"Response List Workflow Standards Api V1 Workflows  Workflow Id  Standards Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/standards/{standard_id}":{"put":{"tags":["workflows"],"summary":"Add Workflow Standard","operationId":"add_workflow_standard_api_v1_workflows__workflow_id__standards__standard_id__put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Remove Workflow Standard","operationId":"remove_workflow_standard_api_v1_workflows__workflow_id__standards__standard_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/assignments":{"post":{"tags":["workflows"],"summary":"Create Assignment","operationId":"create_assignment_api_v1_workflows__workflow_id__assignments_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignmentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Assignment","operationId":"delete_assignment_api_v1_workflows__workflow_id__assignments_delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Id"}},{"name":"sdlc_item_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Sdlc Item Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/delegations/{requirement_pk}":{"put":{"tags":["workflows"],"summary":"Delegate Requirement","description":"Mark an in-scope requirement as delegated to the project (idempotent).","operationId":"delegate_requirement_api_v1_workflows__workflow_id__delegations__requirement_pk__put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Undelegate Requirement","operationId":"undelegate_requirement_api_v1_workflows__workflow_id__delegations__requirement_pk__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/not-relevant/{requirement_pk}":{"put":{"tags":["workflows"],"summary":"Mark Not Relevant","description":"Mark an in-scope requirement as not relevant (idempotent).\n\nExcludes it from the plan's totals and the release gate — it is neither\ncovered nor an open gap. Mutually exclusive with an SDLC assignment, a\nproject delegation, and the checklist flag. A ``rationale`` is required:\njudging a normative requirement out of scope is a compliance decision that\nmust be justified (CRA Art. 13(4)). Re-marking updates the rationale.","operationId":"mark_not_relevant_api_v1_workflows__workflow_id__not_relevant__requirement_pk__put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotRelevantIn"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Clear Not Relevant","operationId":"clear_not_relevant_api_v1_workflows__workflow_id__not_relevant__requirement_pk__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/checklist-items/{requirement_pk}":{"put":{"tags":["workflows"],"summary":"Flag Checklist Item","description":"Flag an in-scope requirement as a project checklist item (idempotent).\n\nNot allowed for a requirement delegated to the project — that already shows\nin the project's delegation checklist.","operationId":"flag_checklist_item_api_v1_workflows__workflow_id__checklist_items__requirement_pk__put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Unflag Checklist Item","operationId":"unflag_checklist_item_api_v1_workflows__workflow_id__checklist_items__requirement_pk__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/coverage":{"get":{"tags":["workflows"],"summary":"Get Coverage","operationId":"get_coverage_api_v1_workflows__workflow_id__coverage_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/report":{"get":{"tags":["workflows"],"summary":"Get Report","description":"Everything the printable process document needs, in one payload: this\nworkflow and its children, each with activities, roles, lanes and coverage.","operationId":"get_report_api_v1_workflows__workflow_id__report_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/rollup":{"get":{"tags":["workflows"],"summary":"Get Rollup","description":"Coverage and roles of this workflow consolidated with its children — what\nthe parent's Overview shows. A workflow without children rolls up to its own\nnumbers.","operationId":"get_rollup_api_v1_workflows__workflow_id__rollup_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRollupOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approvals":{"get":{"tags":["plan-approvals"],"summary":"List Workflow Approvals","operationId":"list_workflow_approvals_api_v1_workflows__workflow_id__approvals_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowApprovalOut"},"title":"Response List Workflow Approvals Api V1 Workflows  Workflow Id  Approvals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approval/completeness":{"get":{"tags":["plan-approvals"],"summary":"Get Plan Completeness","operationId":"get_plan_completeness_api_v1_workflows__workflow_id__approval_completeness_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCompletenessOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approval/signature":{"get":{"tags":["plan-approvals"],"summary":"Verify Plan Signature","operationId":"verify_plan_signature_api_v1_workflows__workflow_id__approval_signature_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSignatureVerifyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approval/submit":{"post":{"tags":["plan-approvals"],"summary":"Submit Plan For Review","operationId":"submit_plan_for_review_api_v1_workflows__workflow_id__approval_submit_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSubmitOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approval/decision":{"post":{"tags":["plan-approvals"],"summary":"Record Plan Decision","operationId":"record_plan_decision_api_v1_workflows__workflow_id__approval_decision_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowDecisionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowApprovalOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approval/reopen":{"post":{"tags":["plan-approvals"],"summary":"Reopen Plan To Draft","operationId":"reopen_plan_to_draft_api_v1_workflows__workflow_id__approval_reopen_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/approval/release":{"post":{"tags":["plan-approvals"],"summary":"Release Plan","operationId":"release_plan_api_v1_workflows__workflow_id__approval_release_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowReleaseIn"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflows/{workflow_id}/versions":{"get":{"tags":["plan-approvals"],"summary":"List Plan Versions","operationId":"list_plan_versions_api_v1_workflows__workflow_id__versions_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowVersionSummary"},"title":"Response List Plan Versions Api V1 Workflows  Workflow Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["plan-approvals"],"summary":"Create Plan Version","operationId":"create_plan_version_api_v1_workflows__workflow_id__versions_post","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowReleaseIn"},{"type":"null"}],"title":"Payload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards":{"get":{"tags":["global-standards"],"summary":"List Global Standards","operationId":"list_global_standards_api_v1_global_standards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GlobalStandardOut"},"type":"array","title":"Response List Global Standards Api V1 Global Standards Get"}}}}}},"post":{"tags":["global-standards"],"summary":"Create Global Standard","description":"Create an empty global standard.\n\nHas no packaged bundle behind it, so ``reseed?prune=true`` will delete it —\na standard that is meant to last belongs in ``app/core/seed_standards`` as a\nfile.","operationId":"create_global_standard_api_v1_global_standards_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalStandardCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalStandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards/{standard_id}/requirements":{"get":{"tags":["global-standards"],"summary":"List Global Requirements","operationId":"list_global_requirements_api_v1_global_standards__standard_id__requirements_get","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GlobalRequirementOut"},"title":"Response List Global Requirements Api V1 Global Standards  Standard Id  Requirements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["global-standards"],"summary":"Create Global Requirement","operationId":"create_global_requirement_api_v1_global_standards__standard_id__requirements_post","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRequirementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRequirementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards/{standard_id}/export":{"get":{"tags":["global-standards"],"summary":"Export Global","operationId":"export_global_api_v1_global_standards__standard_id__export_get","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards/import-json":{"post":{"tags":["global-standards"],"summary":"Import Global Json","description":"Add a standard to the catalog from an uploaded bundle.\n\nConvenient for trying a bundle out, but the upload is not a file in\n``app/core/seed_standards``: the row is reported as ``orphaned`` by the\nseed and deleted by ``reseed?prune=true``. Drop the file into that package\nto make it permanent.","operationId":"import_global_json_api_v1_global_standards_import_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardBundle"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalStandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards/reseed":{"post":{"tags":["global-standards"],"summary":"Reseed Global Standards","description":"Re-run the bundled-standards seed so new files hot-load without a restart.\n\nIdempotent, so it is safe to call repeatedly: a new bundle is added, and one\nthat was corrected after seeding replaces its row when nothing has edited it\nsince. Standards that differ but may carry superuser edits are reported as\n``stale`` and left alone; pass ``refresh=true`` to overwrite those too.\nStandards the package no longer ships are reported as ``orphaned``; pass\n``prune=true`` to delete those, leaving the catalog holding exactly what\n``app/core/seed_standards`` contains.\n\nIt exists because the startup seed is the only other trigger, and adding or\ncorrecting a bundle would otherwise require bouncing the backend.","operationId":"reseed_global_standards_api_v1_global_standards_reseed_post","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","description":"Also replace standards that differ from their packaged bundle but cannot be proven untouched — the keys reported as 'stale'. This discards edits made to those global standards.","default":false,"title":"Refresh"},"description":"Also replace standards that differ from their packaged bundle but cannot be proven untouched — the keys reported as 'stale'. This discards edits made to those global standards."},{"name":"prune","in":"query","required":false,"schema":{"type":"boolean","description":"Also delete catalog standards that no packaged bundle ships any more — the keys reported as 'orphaned'. This includes standards added through import-json, which have no bundle by definition.","default":false,"title":"Prune"},"description":"Also delete catalog standards that no packaged bundle ships any more — the keys reported as 'orphaned'. This includes standards added through import-json, which have no bundle by definition."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalStandardsReseedResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards/{standard_id}":{"patch":{"tags":["global-standards"],"summary":"Update Global Standard","operationId":"update_global_standard_api_v1_global_standards__standard_id__patch","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalStandardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalStandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["global-standards"],"summary":"Delete Global Standard","operationId":"delete_global_standard_api_v1_global_standards__standard_id__delete","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-standards/{standard_id}/requirements/{requirement_pk}":{"patch":{"tags":["global-standards"],"summary":"Update Global Requirement","operationId":"update_global_requirement_api_v1_global_standards__standard_id__requirements__requirement_pk__patch","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRequirementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRequirementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["global-standards"],"summary":"Delete Global Requirement","operationId":"delete_global_requirement_api_v1_global_standards__standard_id__requirements__requirement_pk__delete","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-workflows":{"get":{"tags":["global-workflows"],"summary":"List Global Workflows","operationId":"list_global_workflows_api_v1_global_workflows_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GlobalWorkflowOut"},"type":"array","title":"Response List Global Workflows Api V1 Global Workflows Get"}}}}}}},"/api/v1/global-workflows/{workflow_id}/export":{"get":{"tags":["global-workflows"],"summary":"Export Global","operationId":"export_global_api_v1_global_workflows__workflow_id__export_get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-workflows/import-json":{"post":{"tags":["global-workflows"],"summary":"Import Global Json","description":"Add a template to the catalog from an uploaded bundle.\n\nConvenient for trying a template out, but the upload is not a file in\n``app/core/seed_workflows``: the row is reported as ``orphaned`` by the seed\nand deleted by ``reseed?prune=true``. Drop the file into that package to\nmake it permanent.","operationId":"import_global_json_api_v1_global_workflows_import_json_post","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"description":"Catalog key for the template — normally the uploaded file's stem, e.g. '40-my-process' for 40-my-process.workflow.json.","title":"Key"},"description":"Catalog key for the template — normally the uploaded file's stem, e.g. '40-my-process' for 40-my-process.workflow.json."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowBundle"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalWorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-workflows/reseed":{"post":{"tags":["global-workflows"],"summary":"Reseed Global Workflows","description":"Re-run the bundled-template seed so new files hot-load without a restart.\n\nIdempotent, so it is safe to call repeatedly: a new bundle is added, and one\nthat was corrected after seeding replaces its row when nothing has edited it\nsince. Templates that differ but may carry superuser edits are reported as\n``stale`` and left alone; pass ``refresh=true`` to overwrite those too.\nTemplates the package no longer ships are reported as ``orphaned``; pass\n``prune=true`` to delete those, leaving the catalog holding exactly what\n``app/core/seed_workflows`` contains.\n\nOrganizations that already imported a template hold their own copy, so\nnothing here reaches into org data.","operationId":"reseed_global_workflows_api_v1_global_workflows_reseed_post","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","description":"Also replace templates that differ from their packaged bundle but cannot be proven untouched — the keys reported as 'stale'. This discards edits made to those templates.","default":false,"title":"Refresh"},"description":"Also replace templates that differ from their packaged bundle but cannot be proven untouched — the keys reported as 'stale'. This discards edits made to those templates."},{"name":"prune","in":"query","required":false,"schema":{"type":"boolean","description":"Also delete catalog templates that no packaged bundle ships any more — the keys reported as 'orphaned'. This includes templates added through import-json, which have no bundle by definition.","default":false,"title":"Prune"},"description":"Also delete catalog templates that no packaged bundle ships any more — the keys reported as 'orphaned'. This includes templates added through import-json, which have no bundle by definition."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalWorkflowsReseedResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/global-workflows/{workflow_id}":{"patch":{"tags":["global-workflows"],"summary":"Update Global Workflow","description":"Rename/reorder a template.\n\nThe headline fields live inside the stored bundle (it is the single source\nof truth for the row), so they are patched there; only ``key`` and\n``sort_order`` are columns.","operationId":"update_global_workflow_api_v1_global_workflows__workflow_id__patch","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalWorkflowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalWorkflowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["global-workflows"],"summary":"Delete Global Workflow","description":"Remove a template from the catalog.\n\nOrganizations that already imported it keep their copy — the import is a\nclone. A packaged template comes back on the next reseed.","operationId":"delete_global_workflow_api_v1_global_workflows__workflow_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/threat-templates":{"get":{"tags":["threat-templates"],"summary":"List Threat Templates","description":"The whole catalog in generation order.","operationId":"list_threat_templates_api_v1_threat_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ThreatTemplateOut"},"type":"array","title":"Response List Threat Templates Api V1 Threat Templates Get"}}}}}}},"/api/v1/threat-templates/{template_id}":{"patch":{"tags":["threat-templates"],"summary":"Update Threat Template","description":"Edit the wording or the starting ratings of one template.\n\nThe edit is what makes the row differ from its packaged bundle, and that\ndifference is exactly what stops a later seed from silently overwriting it\n(the row is then reported as ``stale`` instead). Threats already generated\nfrom the template are not touched — they are the analysis as it was written.","operationId":"update_threat_template_api_v1_threat_templates__template_id__patch","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatTemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatTemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/threat-templates/reseed":{"post":{"tags":["threat-templates"],"summary":"Reseed Threat Templates","description":"Re-run the bundled seed so a new bundle loads without a restart.\n\nIdempotent. A corrected bundle replaces rows nobody has edited; edited rows\nare reported as ``stale`` and left alone unless ``refresh=true`` says\notherwise. Threats already generated are never affected either way.","operationId":"reseed_threat_templates_api_v1_threat_templates_reseed_post","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","description":"Also replace templates that differ from their packaged bundle but cannot be proven untouched — the keys reported as 'stale'. This discards edits made to those templates.","default":false,"title":"Refresh"},"description":"Also replace templates that differ from their packaged bundle but cannot be proven untouched — the keys reported as 'stale'. This discards edits made to those templates."},{"name":"prune","in":"query","required":false,"schema":{"type":"boolean","description":"Also delete catalog templates that no packaged bundle ships any more — the keys reported as 'orphaned'.","default":false,"title":"Prune"},"description":"Also delete catalog templates that no packaged bundle ships any more — the keys reported as 'orphaned'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatTemplateReseedResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents":{"get":{"tags":["documents"],"summary":"List Documents","description":"The organization's documents, each with the activities pointing at it.","operationId":"list_documents_api_v1_documents_get","parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentOut"},"title":"Response List Documents Api V1 Documents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["documents"],"summary":"Upload Document","description":"Upload a document. Multipart: the file plus its identifier and metadata.","operationId":"upload_document_api_v1_documents_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_api_v1_documents_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/storage":{"get":{"tags":["documents"],"summary":"Storage Usage","description":"Organization-wide document storage: what is used, and what the plan\nallows (``limit_bytes`` null = unlimited).","operationId":"storage_usage_api_v1_documents_storage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Storage Usage Api V1 Documents Storage Get"}}}}}}},"/api/v1/documents/{document_id}":{"get":{"tags":["documents"],"summary":"Get Document","operationId":"get_document_api_v1_documents__document_id__get","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["documents"],"summary":"Update Document","description":"Edit the metadata. The identifier may change — links survive it.","operationId":"update_document_api_v1_documents__document_id__patch","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["documents"],"summary":"Delete Document","description":"Delete a document — refused while an activity still points at it, so a\ndossier cannot lose the record it cites.","operationId":"delete_document_api_v1_documents__document_id__delete","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/file":{"put":{"tags":["documents"],"summary":"Replace File","description":"Replace the file behind a document, keeping its id, links and history.","operationId":"replace_file_api_v1_documents__document_id__file_put","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_replace_file_api_v1_documents__document_id__file_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/download":{"get":{"tags":["documents"],"summary":"Download Document","description":"Serve the file. Always as an attachment: nothing uploaded here is ever\nrendered in the application's own origin.","operationId":"download_document_api_v1_documents__document_id__download_get","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards":{"get":{"tags":["standards"],"summary":"List Standards","operationId":"list_standards_api_v1_standards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/StandardOut"},"type":"array","title":"Response List Standards Api V1 Standards Get"}}}}}},"post":{"tags":["standards"],"summary":"Create Standard","operationId":"create_standard_api_v1_standards_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards/import":{"post":{"tags":["standards"],"summary":"Import Global Standard","operationId":"import_global_standard_api_v1_standards_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportStandardRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards/import-json":{"post":{"tags":["standards"],"summary":"Import Standard Json","operationId":"import_standard_json_api_v1_standards_import_json_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardBundle"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards/{standard_id}":{"get":{"tags":["standards"],"summary":"Get Standard","operationId":"get_standard_api_v1_standards__standard_id__get","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["standards"],"summary":"Update Standard","operationId":"update_standard_api_v1_standards__standard_id__patch","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["standards"],"summary":"Delete Standard","operationId":"delete_standard_api_v1_standards__standard_id__delete","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards/{standard_id}/export":{"get":{"tags":["standards"],"summary":"Export Standard","operationId":"export_standard_api_v1_standards__standard_id__export_get","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards/{standard_id}/requirements":{"get":{"tags":["standards"],"summary":"List Requirements","operationId":"list_requirements_api_v1_standards__standard_id__requirements_get","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RequirementOut"},"title":"Response List Requirements Api V1 Standards  Standard Id  Requirements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["standards"],"summary":"Create Requirement","operationId":"create_requirement_api_v1_standards__standard_id__requirements_post","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequirementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequirementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/standards/{standard_id}/requirements/{requirement_pk}":{"patch":{"tags":["standards"],"summary":"Update Requirement","operationId":"update_requirement_api_v1_standards__standard_id__requirements__requirement_pk__patch","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequirementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequirementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["standards"],"summary":"Delete Requirement","operationId":"delete_requirement_api_v1_standards__standard_id__requirements__requirement_pk__delete","parameters":[{"name":"standard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Standard Id"}},{"name":"requirement_pk","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Requirement Pk"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization":{"get":{"tags":["organization"],"summary":"Get Organization","operationId":"get_organization_api_v1_organization_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}}}},"patch":{"tags":["organization"],"summary":"Update Organization","operationId":"update_organization_api_v1_organization_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization/subscription/cancel":{"post":{"tags":["organization"],"summary":"Cancel Subscription","description":"Schedule full termination of the organization at the current period end.\n\nReversible with ``/subscription/resume`` until the period boundary passes.\nPhysical data purge is a separate, explicit step (never done on a request).","operationId":"cancel_subscription_api_v1_organization_subscription_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}}}}},"/api/v1/organization/subscription/resume":{"post":{"tags":["organization"],"summary":"Resume Subscription","description":"Undo a pending termination and any scheduled downgrade (keep current plan).","operationId":"resume_subscription_api_v1_organization_subscription_resume_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}}}}},"/api/v1/organization/logo":{"put":{"tags":["organization"],"summary":"Upload Logo","operationId":"upload_logo_api_v1_organization_logo_put","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_v1_organization_logo_put"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["organization"],"summary":"Delete Logo","operationId":"delete_logo_api_v1_organization_logo_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}}}}},"/api/v1/organizations/{org_id}/logo":{"get":{"tags":["organization"],"summary":"Get Logo","description":"Serve an org's PNG logo. Public (no session) so it embeds in report\nheaders cross-origin and in print; logos are not sensitive.","operationId":"get_logo_api_v1_organizations__org_id__logo_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization/icon":{"put":{"tags":["organization"],"summary":"Upload Icon","operationId":"upload_icon_api_v1_organization_icon_put","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_icon_api_v1_organization_icon_put"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["organization"],"summary":"Delete Icon","operationId":"delete_icon_api_v1_organization_icon_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationOut"}}}}}}},"/api/v1/organizations/{org_id}/icon":{"get":{"tags":["organization"],"summary":"Get Icon","description":"Serve an org's PNG header icon. Public (used as an <img> in the app).","operationId":"get_icon_api_v1_organizations__org_id__icon_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/openproject":{"get":{"tags":["integrations"],"summary":"Read Openproject","description":"The org's OpenProject settings, without the token.","operationId":"read_openproject_api_v1_integrations_openproject_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectSettingsOut"}}}}}},"put":{"tags":["integrations"],"summary":"Write Openproject","operationId":"write_openproject_api_v1_integrations_openproject_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectSettingsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["integrations"],"summary":"Clear Openproject","description":"Forget the server URL and token (does not touch anything in OpenProject).","operationId":"clear_openproject_api_v1_integrations_openproject_delete","responses":{"204":{"description":"Successful Response"}}}},"/api/v1/integrations/openproject/test":{"post":{"tags":["integrations"],"summary":"Test Openproject","description":"Verify URL + token by asking OpenProject who the token belongs to.","operationId":"test_openproject_api_v1_integrations_openproject_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectConnectionOut"}}}}}}},"/api/v1/integrations/openproject/projects":{"get":{"tags":["integrations"],"summary":"List Openproject Projects","description":"Target projects to pick from in the export dialog (live from OpenProject).","operationId":"list_openproject_projects_api_v1_integrations_openproject_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OpenProjectProjectOut"},"type":"array","title":"Response List Openproject Projects Api V1 Integrations Openproject Projects Get"}}}}}},"post":{"tags":["integrations"],"summary":"Create Openproject Project","description":"Create a project in OpenProject to export into.\n\nFor the case where the workflow has no counterpart over there yet, so the\nuser does not have to leave TRA Studio to make one. The token needs\nproject-creation rights; without them OpenProject answers 403 and that is\nreported as-is.","operationId":"create_openproject_project_api_v1_integrations_openproject_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectProjectCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenProjectProjectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization/members":{"get":{"tags":["members"],"summary":"List Members","operationId":"list_members_api_v1_organization_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MemberOut"},"type":"array","title":"Response List Members Api V1 Organization Members Get"}}}}}}},"/api/v1/organization/members/{user_id}":{"patch":{"tags":["members"],"summary":"Change Member Role","operationId":"change_member_role_api_v1_organization_members__user_id__patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["members"],"summary":"Remove Member","operationId":"remove_member_api_v1_organization_members__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization/invitations":{"get":{"tags":["members"],"summary":"List Invitations","operationId":"list_invitations_api_v1_organization_invitations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/InvitationOut"},"type":"array","title":"Response List Invitations Api V1 Organization Invitations Get"}}}}}},"post":{"tags":["members"],"summary":"Create Invitation","operationId":"create_invitation_api_v1_organization_invitations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization/invitations/{invitation_id}/resend":{"post":{"tags":["members"],"summary":"Resend Invitation","description":"Re-send a pending invitation's email, renewing its validity window.\n\nKeeps the same token (so any link already shared still works) but resets the\nexpiry, so a stale invite becomes usable again.","operationId":"resend_invitation_api_v1_organization_invitations__invitation_id__resend_post","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/organization/invitations/{invitation_id}":{"delete":{"tags":["members"],"summary":"Revoke Invitation","operationId":"revoke_invitation_api_v1_organization_invitations__invitation_id__delete","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invitation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/acknowledgements":{"get":{"tags":["acknowledgements"],"summary":"List Acknowledgements","operationId":"list_acknowledgements_api_v1_acknowledgements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/NoticeStatus"},"type":"array","title":"Response List Acknowledgements Api V1 Acknowledgements Get"}}}}}}},"/api/v1/acknowledgements/{key}":{"post":{"tags":["acknowledgements"],"summary":"Acknowledge","operationId":"acknowledge_api_v1_acknowledgements__key__post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoticeStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/error-logs":{"get":{"tags":["error-logs"],"summary":"List Error Logs","description":"Most recent backend errors first.","operationId":"list_error_logs_api_v1_admin_error_logs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorLogOut"},"title":"Response List Error Logs Api V1 Admin Error Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations":{"get":{"tags":["support"],"summary":"List All Organizations","description":"Every organization on the platform, for the support switcher.\n\nMembership status is resolved in two grouped queries (locked orgs, member\ncounts) rather than per-org, to avoid an N+1 as the tenant count grows.","operationId":"list_all_organizations_api_v1_admin_organizations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrganizationSummary"},"type":"array","title":"Response List All Organizations Api V1 Admin Organizations Get"}}}}}},"post":{"tags":["support"],"summary":"Create Organization","description":"Create a customer organization (superuser only), optionally inviting its\nfirst admin.\n\nOnboarding a customer who did not sign up themselves — including straight\nonto ENTERPRISE, which is not self-selectable. With ``admin_email`` the org\nis created together with a pending ADMIN invitation. Without one it starts\nwith no members: only the superuser can work in it, via \"act as\", because an\nunclaimed org grants support writes implicitly (see services.support_access).\nIts first admin is invited later from the Members tab, which ends that grant.\n\nRejects an ``admin_email`` that already has an account: accepting an\ninvitation creates the account, so an existing address could never redeem it\nand the org would be left unadministrable.","operationId":"create_organization_api_v1_admin_organizations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminOrganizationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/organizations/{org_id}/plan":{"patch":{"tags":["support"],"summary":"Assign Plan","description":"Assign an organization's subscription plan (superuser only).\n\nApplies immediately (a fresh billing period). This is the only path onto the\nENTERPRISE tier. Gated on ``require_superuser`` alone — not the target org's\nsupport-access grant.","operationId":"assign_plan_api_v1_admin_organizations__org_id__plan_patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPlanAssignment"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/resources/project-plans/{slug}":{"get":{"tags":["resources"],"summary":"Get Gated Project Plan","description":"The Markdown body of a paid-plan project plan.\n\nPublication is checked before entitlement, so a signed-in visitor without\nthe entitlement cannot tell a gated resource from one that does not exist.\nAn anonymous caller never gets that far: authentication runs first and\nanswers 401 for every slug.","operationId":"get_gated_project_plan_api_v1_resources_project_plans__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatedResourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcceptInvitationRequest":{"properties":{"token":{"type":"string","title":"Token"},"display_name":{"type":"string","maxLength":255,"minLength":1,"title":"Display Name"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["token","display_name","password"],"title":"AcceptInvitationRequest"},"AcknowledgeIn":{"properties":{"version":{"type":"integer","title":"Version"}},"type":"object","required":["version"],"title":"AcknowledgeIn"},"AdminOrganizationCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"plan":{"$ref":"#/components/schemas/OrgPlan","default":"free"},"seat_step":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Seat Step"},"admin_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Admin Email"}},"type":"object","required":["name"],"title":"AdminOrganizationCreate","description":"A superuser creating a customer organization from the Customers view.\n\n``admin_email`` is optional. Given, the org is created together with a\npending ADMIN invitation to that address. Omitted, the org starts with no\nmembers at all: only the superuser can work in it (via \"act as\"), because an\norg nobody has claimed yet grants support writes implicitly — see\n``services.support_access``. Its first admin is then invited later from the\nMembers tab, which ends that implicit grant."},"AdminPlanAssignment":{"properties":{"plan":{"$ref":"#/components/schemas/OrgPlan"},"seat_step":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Seat Step"}},"type":"object","required":["plan"],"title":"AdminPlanAssignment","description":"A superuser assigning a plan (incl. Enterprise) to an organization."},"ApprovalDecision":{"type":"string","enum":["approved","approved_with_conditions","rejected"],"title":"ApprovalDecision"},"ApprovalIssue":{"properties":{"code":{"type":"string","title":"Code"},"threat_id":{"type":"string","format":"uuid","title":"Threat Id"},"sequence_number":{"type":"integer","title":"Sequence Number"},"title":{"type":"string","title":"Title"},"risk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Risk"}},"type":"object","required":["code","threat_id","sequence_number","title","risk"],"title":"ApprovalIssue","description":"One open completeness issue surfaced before/at sign-off."},"ApprovalOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"approver_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Approver Id"},"approver_name":{"type":"string","title":"Approver Name"},"approver_role":{"type":"string","title":"Approver Role"},"decision":{"$ref":"#/components/schemas/ApprovalDecision"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"signature_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature Token"},"from_status":{"$ref":"#/components/schemas/ProjectStatus"},"to_status":{"$ref":"#/components/schemas/ProjectStatus"},"decided_at":{"type":"string","format":"date-time","title":"Decided At"}},"type":"object","required":["id","project_id","approver_id","approver_name","approver_role","decision","comment","signature_token","from_status","to_status","decided_at"],"title":"ApprovalOut"},"AssignmentCreate":{"properties":{"requirement_id":{"type":"string","format":"uuid","title":"Requirement Id"},"sdlc_item_id":{"type":"string","format":"uuid","title":"Sdlc Item Id"},"position":{"type":"integer","maximum":2.0,"minimum":1.0,"title":"Position","default":1}},"type":"object","required":["requirement_id","sdlc_item_id"],"title":"AssignmentCreate"},"AssignmentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"requirement_id":{"type":"string","format":"uuid","title":"Requirement Id"},"sdlc_item_id":{"type":"string","format":"uuid","title":"Sdlc Item Id"},"position":{"type":"integer","title":"Position","default":1}},"type":"object","required":["id","workflow_id","requirement_id","sdlc_item_id"],"title":"AssignmentOut"},"AssumptionCreate":{"properties":{"kind":{"$ref":"#/components/schemas/AssumptionKind","default":"assumption"},"ref_id":{"type":"string","maxLength":32,"minLength":1,"title":"Ref Id"},"text":{"type":"string","minLength":1,"title":"Text"},"responsible":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Responsible"},"validated_status":{"$ref":"#/components/schemas/ValidationStatus","default":"open"},"validated_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Validated Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["ref_id","text"],"title":"AssumptionCreate"},"AssumptionKind":{"type":"string","enum":["assumption","constraint"],"title":"AssumptionKind"},"AssumptionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"kind":{"$ref":"#/components/schemas/AssumptionKind"},"ref_id":{"type":"string","title":"Ref Id"},"text":{"type":"string","title":"Text"},"responsible":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Responsible"},"validated_status":{"$ref":"#/components/schemas/ValidationStatus"},"validated_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Validated Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id","project_id","kind","ref_id","text","responsible","validated_status","validated_date","notes"],"title":"AssumptionOut"},"AssumptionUpdate":{"properties":{"kind":{"anyOf":[{"$ref":"#/components/schemas/AssumptionKind"},{"type":"null"}]},"ref_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Ref Id"},"text":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Text"},"responsible":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Responsible"},"validated_status":{"anyOf":[{"$ref":"#/components/schemas/ValidationStatus"},{"type":"null"}]},"validated_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Validated Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"AssumptionUpdate"},"AttackerType":{"type":"string","enum":["skiddie","hacker","researcher","pen_tester","mal_user","mal_priv_user","neg_user","neg_priv_user"],"title":"AttackerType"},"AuditAction":{"type":"string","enum":["created","updated","deleted","approved","exported"],"title":"AuditAction"},"AuditEntryOut":{"properties":{"id":{"type":"integer","title":"Id"},"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"action":{"$ref":"#/components/schemas/AuditAction"},"changed_by":{"type":"string","title":"Changed By"},"changed_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Changed By Name"},"changed_at":{"type":"string","format":"date-time","title":"Changed At"},"diff_json":{"additionalProperties":true,"type":"object","title":"Diff Json"},"entry_hash":{"type":"string","title":"Entry Hash"},"project_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Version"}},"type":"object","required":["id","entity_type","entity_id","action","changed_by","changed_by_name","changed_at","diff_json","entry_hash"],"title":"AuditEntryOut"},"AuditVerifyOut":{"properties":{"valid":{"type":"boolean","title":"Valid"},"entries":{"type":"integer","title":"Entries"}},"type":"object","required":["valid","entries"],"title":"AuditVerifyOut"},"BillingCycle":{"type":"string","enum":["monthly","annual"],"title":"BillingCycle"},"BlockerIssue":{"properties":{"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"requirement_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Key"},"sequence_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sequence Number"}},"type":"object","required":["code","title"],"title":"BlockerIssue","description":"A hard blocker that prevents release (spec §6.10).\n\n``code`` picks the message template; the other fields fill it in."},"Body_import_tm7_api_v1_projects__project_id__threats_import_tm7_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"create_components":{"type":"boolean","title":"Create Components","default":true},"create_zones":{"type":"boolean","title":"Create Zones","default":true},"include_not_applicable":{"type":"boolean","title":"Include Not Applicable","default":false}},"type":"object","required":["file"],"title":"Body_import_tm7_api_v1_projects__project_id__threats_import_tm7_post"},"Body_replace_file_api_v1_documents__document_id__file_put":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_replace_file_api_v1_documents__document_id__file_put"},"Body_upload_document_api_v1_documents_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"doc_id":{"type":"string","title":"Doc Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},"type":"object","required":["file","doc_id","name"],"title":"Body_upload_document_api_v1_documents_post"},"Body_upload_icon_api_v1_organization_icon_put":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_icon_api_v1_organization_icon_put"},"Body_upload_logo_api_v1_organization_logo_put":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_v1_organization_logo_put"},"BugReportCreate":{"properties":{"message":{"type":"string","maxLength":5000,"minLength":1,"title":"Message"},"page":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Page"}},"type":"object","required":["message"],"title":"BugReportCreate"},"BundleAssumption":{"properties":{"kind":{"$ref":"#/components/schemas/AssumptionKind"},"ref_id":{"type":"string","maxLength":32,"minLength":1,"title":"Ref Id"},"text":{"type":"string","title":"Text"},"responsible":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Responsible"},"validated_status":{"$ref":"#/components/schemas/ValidationStatus","default":"open"},"validated_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Validated Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["kind","ref_id","text"],"title":"BundleAssumption"},"BundleComponent":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number","default":0},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"component_type":{"$ref":"#/components/schemas/ComponentType"},"zone_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Zone Ref"},"conduit_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Conduit Ref"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"third_party":{"type":"boolean","title":"Third Party","default":false},"supplier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Supplier"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"interfaces":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interfaces"},"security_functions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Security Functions"},"known_weaknesses":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Known Weaknesses"},"physical_location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Physical Location"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"external_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Ref"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"impacts":{"items":{"$ref":"#/components/schemas/BundleComponentImpact"},"type":"array","title":"Impacts"}},"type":"object","required":["ref","name","component_type"],"title":"BundleComponent"},"BundleComponentImpact":{"properties":{"control_ref":{"type":"string","maxLength":64,"minLength":1,"title":"Control Ref"},"impact_level":{"$ref":"#/components/schemas/ImpactLevel"},"impact_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Rationale"}},"type":"object","required":["control_ref","impact_level"],"title":"BundleComponentImpact","description":"One cell of the component x security-control impact matrix."},"BundleConduit":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_zone_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Source Zone Ref"},"dest_zone_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Dest Zone Ref"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"external_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Ref"}},"type":"object","required":["ref","name"],"title":"BundleConduit"},"BundleCoveredProduct":{"properties":{"product":{"$ref":"#/components/schemas/BundleProduct"},"same_architecture":{"type":"boolean","title":"Same Architecture","default":false},"same_security_design":{"type":"boolean","title":"Same Security Design","default":false},"same_intended_purpose":{"type":"boolean","title":"Same Intended Purpose","default":false},"same_risk_profile":{"type":"boolean","title":"Same Risk Profile","default":false},"differences":{"type":"string","title":"Differences","default":""},"rationale":{"type":"string","title":"Rationale","default":""}},"type":"object","required":["product"],"title":"BundleCoveredProduct","description":"A further product the assessment is reused for (CRA guidance §7.4).\n\nCarries the product itself rather than a ref, because products live outside\nthe bundle's graph: on import it is matched by name in the target org, like\nthe lead product. The criteria default to False so an entry that does not\nstate them is skipped on import, not taken as confirmed."},"BundleDataFlow":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number","default":0},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_component_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Source Component Ref"},"target_component_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Target Component Ref"},"conduit_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Conduit Ref"},"protocol":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Protocol"},"external_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Ref"}},"type":"object","required":["ref","name"],"title":"BundleDataFlow"},"BundleGateCheck":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"standard":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Standard"},"requirement_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Requirement Id"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","title":"BundleGateCheck","description":"One condition on a gate's checklist, in portable form.\n\nA requirement check carries ``standard`` + ``requirement_id`` (never a\ndatabase UUID); if the importing org has no such requirement, the check is\nskipped and reported, exactly as an unresolvable assignment is."},"BundleItem":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"parent_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Parent Ref"},"child_index":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Child Index"},"item_type":{"type":"string","maxLength":16,"title":"Item Type","default":"activity"},"code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Code"},"title":{"type":"string","maxLength":255,"title":"Title","default":""},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"},"track_evidence":{"type":"boolean","title":"Track Evidence","default":false},"responsible":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Responsible"},"artifact":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Artifact"},"tool":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Tool"},"process_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Process Url"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"lane":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Lane"},"assignments":{"items":{"$ref":"#/components/schemas/BundleRequirementRef"},"type":"array","title":"Assignments"},"checks":{"items":{"$ref":"#/components/schemas/BundleGateCheck"},"type":"array","title":"Checks"}},"type":"object","required":["ref"],"title":"BundleItem"},"BundleMitigation":{"properties":{"treatment_type":{"$ref":"#/components/schemas/TreatmentType"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Owner"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"progress":{"$ref":"#/components/schemas/Progress","default":"not_started"},"completion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Completion Date"},"evidence_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Evidence Ref"},"acceptance_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceptance Rationale"},"control_refs":{"items":{"type":"string"},"type":"array","title":"Control Refs"},"category_refs":{"items":{"type":"string"},"type":"array","title":"Category Refs"}},"type":"object","required":["treatment_type"],"title":"BundleMitigation","description":"A risk treatment, with the traceability links it declares."},"BundleParticipant":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"role":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Role"},"organization":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Organization"}},"type":"object","required":["name"],"title":"BundleParticipant"},"BundleProduct":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"manufacturer":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Manufacturer"},"product_family":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Product Family"},"cra_class":{"$ref":"#/components/schemas/CRAClass","default":"default"},"support_years":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Support Years"}},"type":"object","required":["name"],"title":"BundleProduct","description":"The product the TRA is about.\n\nCarried because a project cannot exist without one. On import an existing\nproduct with the same name in the target org is reused rather than\nduplicated — product names are unique per organization, and a second\n\"Gateway X\" would be a lie about the catalogue."},"BundleRequirement":{"properties":{"requirement_id":{"type":"string","maxLength":64,"minLength":1,"title":"Requirement Id"},"title":{"type":"string","maxLength":512,"minLength":1,"title":"Title"},"text":{"type":"string","minLength":1,"title":"Text"},"reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Reference"},"required":{"type":"boolean","title":"Required","default":true},"notes":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Notes"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"parent_requirement_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Requirement Id"}},"type":"object","required":["requirement_id","title","text"],"title":"BundleRequirement"},"BundleRequirementRef":{"properties":{"standard":{"type":"string","maxLength":64,"minLength":1,"title":"Standard"},"requirement_id":{"type":"string","maxLength":64,"minLength":1,"title":"Requirement Id"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale"},"position":{"type":"integer","maximum":2.0,"minimum":1.0,"title":"Position","default":1}},"type":"object","required":["standard","requirement_id"],"title":"BundleRequirementRef","description":"A requirement, referenced portably by its standard key + human id."},"BundleSecurityCategory":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["ref","name"],"title":"BundleSecurityCategory"},"BundleSecurityControl":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Category Ref"},"zone_refs":{"items":{"type":"string"},"type":"array","title":"Zone Refs"},"conduit_refs":{"items":{"type":"string"},"type":"array","title":"Conduit Refs"},"component_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Component Ref"}},"type":"object","required":["ref","name"],"title":"BundleSecurityControl"},"BundleThreat":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number","default":0},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"component_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Component Ref"},"security_control_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Security Control Ref"},"zone_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Zone Ref"},"conduit_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Conduit Ref"},"data_flow_ref":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Data Flow Ref"},"attack_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attack Action"},"attacker_type":{"anyOf":[{"$ref":"#/components/schemas/AttackerType"},{"type":"null"}]},"weakness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weakness"},"stride_category":{"anyOf":[{"$ref":"#/components/schemas/StrideCategory"},{"type":"null"}]},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"possible_measures":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Possible Measures"},"general_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"General Comments"},"catalog_source":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Catalog Source"},"external_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Ref"},"treatments":{"items":{"$ref":"#/components/schemas/BundleMitigation"},"type":"array","title":"Treatments"}},"type":"object","required":["ref","title"],"title":"BundleThreat"},"BundleUsageStatement":{"properties":{"kind":{"$ref":"#/components/schemas/UsageKind"},"ref_id":{"type":"string","maxLength":32,"minLength":1,"title":"Ref Id"},"text":{"type":"string","title":"Text"}},"type":"object","required":["kind","ref_id","text"],"title":"BundleUsageStatement"},"BundleWorkshop":{"properties":{"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Time"},"location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location"},"moderator":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Moderator"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"participants":{"items":{"$ref":"#/components/schemas/BundleParticipant"},"type":"array","title":"Participants"}},"type":"object","title":"BundleWorkshop"},"BundleZone":{"properties":{"ref":{"type":"string","maxLength":64,"minLength":1,"title":"Ref"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"external_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Ref"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"canvas_width":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Canvas Width"},"canvas_height":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Canvas Height"}},"type":"object","required":["ref","name"],"title":"BundleZone"},"CRAClass":{"type":"string","enum":["default","important_class_1","important_class_2","critical"],"title":"CRAClass","description":"CRA risk class (spec §6.2 decision tree output)."},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","maxLength":200,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"ChecklistItem":{"properties":{"requirement_id":{"type":"string","format":"uuid","title":"Requirement Id"},"standard_id":{"type":"string","format":"uuid","title":"Standard Id"},"standard_title":{"type":"string","title":"Standard Title"},"requirement_key":{"type":"string","title":"Requirement Key"},"title":{"type":"string","title":"Title"},"text":{"type":"string","title":"Text"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"done":{"type":"boolean","title":"Done"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"link_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Type"},"link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Link Id"},"link_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Label"}},"type":"object","required":["requirement_id","standard_id","standard_title","requirement_key","title","text","reference","notes","done","note","link_type","link_id","link_label"],"title":"ChecklistItem"},"ChecklistItemUpdate":{"properties":{"done":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Done"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"link_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Type"},"link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Link Id"}},"type":"object","title":"ChecklistItemUpdate"},"ChecklistLinkOption":{"properties":{"link_type":{"type":"string","title":"Link Type"},"link_id":{"type":"string","format":"uuid","title":"Link Id"},"label":{"type":"string","title":"Label"}},"type":"object","required":["link_type","link_id","label"],"title":"ChecklistLinkOption"},"ChecklistOut":{"properties":{"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"items":{"items":{"$ref":"#/components/schemas/ChecklistItem"},"type":"array","title":"Items"},"summary":{"$ref":"#/components/schemas/ChecklistSummary"}},"type":"object","required":["workflow_id","items","summary"],"title":"ChecklistOut"},"ChecklistSummary":{"properties":{"total":{"type":"integer","title":"Total"},"done":{"type":"integer","title":"Done"}},"type":"object","required":["total","done"],"title":"ChecklistSummary"},"CompletenessOut":{"properties":{"ready":{"type":"boolean","title":"Ready"},"issues":{"items":{"$ref":"#/components/schemas/ApprovalIssue"},"type":"array","title":"Issues"},"release_blockers":{"items":{"$ref":"#/components/schemas/BlockerIssue"},"type":"array","title":"Release Blockers"},"can_release":{"type":"boolean","title":"Can Release"}},"type":"object","required":["ready","issues","release_blockers","can_release"],"title":"CompletenessOut"},"ComponentCreate":{"properties":{"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"component_type":{"$ref":"#/components/schemas/ComponentType"},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"third_party":{"type":"boolean","title":"Third Party","default":false},"supplier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Supplier"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"interfaces":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interfaces"},"security_functions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Security Functions"},"known_weaknesses":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Known Weaknesses"},"physical_location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Physical Location"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["sequence_number","name","component_type"],"title":"ComponentCreate"},"ComponentImpactCreate":{"properties":{"security_control_id":{"type":"string","format":"uuid","title":"Security Control Id"},"impact_level":{"$ref":"#/components/schemas/ImpactLevel"},"impact_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Rationale"}},"type":"object","required":["security_control_id","impact_level"],"title":"ComponentImpactCreate"},"ComponentImpactOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"component_id":{"type":"string","format":"uuid","title":"Component Id"},"security_control_id":{"type":"string","format":"uuid","title":"Security Control Id"},"impact_level":{"$ref":"#/components/schemas/ImpactLevel"},"impact_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Rationale"}},"type":"object","required":["id","component_id","security_control_id","impact_level","impact_rationale"],"title":"ComponentImpactOut"},"ComponentImpactUpdate":{"properties":{"impact_level":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"impact_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Rationale"}},"type":"object","title":"ComponentImpactUpdate"},"ComponentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"sequence_number":{"type":"integer","title":"Sequence Number"},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"component_type":{"$ref":"#/components/schemas/ComponentType"},"third_party":{"type":"boolean","title":"Third Party"},"supplier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplier"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"interfaces":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interfaces"},"security_functions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Security Functions"},"known_weaknesses":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Known Weaknesses"},"physical_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Physical Location"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","project_id","sequence_number","zone_id","conduit_id","name","description","component_type","third_party","supplier","version","interfaces","security_functions","known_weaknesses","physical_location","notes","external_ref","canvas_x","canvas_y","created_at","updated_at"],"title":"ComponentOut"},"ComponentType":{"type":"string","enum":["software","firmware","hardware","network","external"],"title":"ComponentType"},"ComponentUpdate":{"properties":{"sequence_number":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sequence Number"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"component_type":{"anyOf":[{"$ref":"#/components/schemas/ComponentType"},{"type":"null"}]},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"third_party":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Third Party"},"supplier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Supplier"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"interfaces":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interfaces"},"security_functions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Security Functions"},"known_weaknesses":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Known Weaknesses"},"physical_location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Physical Location"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ComponentUpdate"},"ConduitCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Zone Id"},"dest_zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Dest Zone Id"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"}},"type":"object","required":["name"],"title":"ConduitCreate"},"ConduitOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Zone Id"},"dest_zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Dest Zone Id"},"sl_target":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sl Target"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"}},"type":"object","required":["id","project_id","name","description","source_zone_id","dest_zone_id","sl_target","external_ref"],"title":"ConduitOut"},"ConduitUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Zone Id"},"dest_zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Dest Zone Id"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"}},"type":"object","title":"ConduitUpdate"},"CoverageOut":{"properties":{"standards":{"items":{"$ref":"#/components/schemas/CoverageStandard"},"type":"array","title":"Standards"},"summary":{"$ref":"#/components/schemas/CoverageSummary"}},"type":"object","required":["standards","summary"],"title":"CoverageOut"},"CoverageRequirement":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"type":"string","title":"Requirement Id"},"title":{"type":"string","title":"Title"},"text":{"type":"string","title":"Text"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"required":{"type":"boolean","title":"Required"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"assigned_sdlc_item_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Assigned Sdlc Item Ids"},"covered":{"type":"boolean","title":"Covered"},"delegated":{"type":"boolean","title":"Delegated"},"delegated_to_child":{"type":"boolean","title":"Delegated To Child","default":false},"child_workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Child Workflow Id"},"child_resolution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Child Resolution"},"covered_by_parent":{"type":"boolean","title":"Covered By Parent","default":false},"owned":{"type":"boolean","title":"Owned","default":true},"claimable":{"type":"boolean","title":"Claimable","default":false},"not_applicable":{"type":"boolean","title":"Not Applicable","default":false},"not_relevant":{"type":"boolean","title":"Not Relevant","default":false},"not_relevant_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Not Relevant Rationale"},"is_checklist_item":{"type":"boolean","title":"Is Checklist Item","default":false}},"type":"object","required":["id","parent_id","requirement_id","title","text","reference","required","notes","assigned_sdlc_item_ids","covered","delegated"],"title":"CoverageRequirement"},"CoverageStandard":{"properties":{"standard_id":{"type":"string","format":"uuid","title":"Standard Id"},"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"requirements":{"items":{"$ref":"#/components/schemas/CoverageRequirement"},"type":"array","title":"Requirements"},"summary":{"$ref":"#/components/schemas/CoverageSummary"}},"type":"object","required":["standard_id","key","title","version","requirements","summary"],"title":"CoverageStandard"},"CoverageSummary":{"properties":{"total":{"type":"integer","title":"Total"},"covered":{"type":"integer","title":"Covered"},"gap_count":{"type":"integer","title":"Gap Count"},"required_gaps":{"type":"integer","title":"Required Gaps"},"delegated":{"type":"integer","title":"Delegated"},"not_relevant":{"type":"integer","title":"Not Relevant","default":0},"resolved":{"type":"integer","title":"Resolved","default":0},"covered_percent":{"type":"number","title":"Covered Percent"}},"type":"object","required":["total","covered","gap_count","required_gaps","delegated","covered_percent"],"title":"CoverageSummary","description":"Where the workflow stands.\n\n``total = covered + delegated + not_relevant + gap_count``, and\n``resolved = covered + delegated + not_relevant`` — everything that is not an\nopen gap. See :mod:`app.services.coverage` for how each bucket is decided."},"CoveredProductCreate":{"properties":{"same_architecture":{"type":"boolean","title":"Same Architecture"},"same_security_design":{"type":"boolean","title":"Same Security Design"},"same_intended_purpose":{"type":"boolean","title":"Same Intended Purpose"},"same_risk_profile":{"type":"boolean","title":"Same Risk Profile"},"differences":{"type":"string","title":"Differences"},"rationale":{"type":"string","title":"Rationale"},"product_id":{"type":"string","format":"uuid","title":"Product Id"}},"type":"object","required":["same_architecture","same_security_design","same_intended_purpose","same_risk_profile","differences","rationale","product_id"],"title":"CoveredProductCreate","description":"A further product named when the TRA is created, with the same checks."},"CoveredProductIn":{"properties":{"same_architecture":{"type":"boolean","title":"Same Architecture"},"same_security_design":{"type":"boolean","title":"Same Security Design"},"same_intended_purpose":{"type":"boolean","title":"Same Intended Purpose"},"same_risk_profile":{"type":"boolean","title":"Same Risk Profile"},"differences":{"type":"string","title":"Differences"},"rationale":{"type":"string","title":"Rationale"}},"type":"object","required":["same_architecture","same_security_design","same_intended_purpose","same_risk_profile","differences","rationale"],"title":"CoveredProductIn","description":"Reuse this TRA for one more product.\n\nAll four criteria have to be confirmed: the guidance allows one risk\nassessment for several products only when every one of them holds. A product\nthat fails any of them needs its own TRA, and saying so is the honest answer —\nso this is refused, not recorded with a caveat."},"CoveredProductOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"product_name":{"type":"string","title":"Product Name"},"same_architecture":{"type":"boolean","title":"Same Architecture"},"same_security_design":{"type":"boolean","title":"Same Security Design"},"same_intended_purpose":{"type":"boolean","title":"Same Intended Purpose"},"same_risk_profile":{"type":"boolean","title":"Same Risk Profile"},"differences":{"type":"string","title":"Differences"},"rationale":{"type":"string","title":"Rationale"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["product_id","product_name","same_architecture","same_security_design","same_intended_purpose","same_risk_profile","differences","rationale","created_at","updated_at"],"title":"CoveredProductOut"},"DataFlowCreate":{"properties":{"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Component Id"},"target_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Component Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"protocol":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Protocol"}},"type":"object","required":["sequence_number","name"],"title":"DataFlowCreate"},"DataFlowOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"sequence_number":{"type":"integer","title":"Sequence Number"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Component Id"},"target_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Component Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"protocol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","project_id","sequence_number","name","description","source_component_id","target_component_id","conduit_id","protocol","external_ref","created_at","updated_at"],"title":"DataFlowOut"},"DataFlowUpdate":{"properties":{"sequence_number":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sequence Number"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Component Id"},"target_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Component Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"protocol":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Protocol"}},"type":"object","title":"DataFlowUpdate"},"DecisionIn":{"properties":{"decision":{"$ref":"#/components/schemas/ApprovalDecision"},"comment":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Comment"}},"type":"object","required":["decision"],"title":"DecisionIn","description":"A reviewer's decision on a project in review."},"DeleteAccountRequest":{"properties":{"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"},"confirm":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Confirm"}},"type":"object","required":["password"],"title":"DeleteAccountRequest"},"DeletionPreview":{"properties":{"orgs_to_delete":{"items":{"$ref":"#/components/schemas/OrgRef"},"type":"array","title":"Orgs To Delete"},"orgs_to_leave":{"items":{"$ref":"#/components/schemas/OrgRef"},"type":"array","title":"Orgs To Leave"},"blocked_orgs":{"items":{"$ref":"#/components/schemas/OrgRef"},"type":"array","title":"Blocked Orgs"},"confirmation_required":{"type":"boolean","title":"Confirmation Required"},"confirmation_phrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Phrase"}},"type":"object","required":["orgs_to_delete","orgs_to_leave","blocked_orgs","confirmation_required","confirmation_phrase"],"title":"DeletionPreview","description":"What closing the account would do — drives the confirmation dialog."},"DiagramComponentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"width":{"type":"number","title":"Width"},"height":{"type":"number","title":"Height"},"placed":{"type":"boolean","title":"Placed"},"component_type":{"type":"string","title":"Component Type"},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"}},"type":"object","required":["id","name","x","y","width","height","placed","component_type","zone_id"],"title":"DiagramComponentOut"},"DiagramFlowOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"protocol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"},"source_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Component Id"},"target_component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Component Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"x1":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"X1"},"y1":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Y1"},"x2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"X2"},"y2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Y2"}},"type":"object","required":["id","name","protocol","source_component_id","target_component_id","conduit_id","x1","y1","x2","y2"],"title":"DiagramFlowOut"},"DiagramOut":{"properties":{"zones":{"items":{"$ref":"#/components/schemas/DiagramZoneOut"},"type":"array","title":"Zones"},"components":{"items":{"$ref":"#/components/schemas/DiagramComponentOut"},"type":"array","title":"Components"},"flows":{"items":{"$ref":"#/components/schemas/DiagramFlowOut"},"type":"array","title":"Flows"},"width":{"type":"number","title":"Width"},"height":{"type":"number","title":"Height"},"unplaced":{"type":"integer","title":"Unplaced"}},"type":"object","required":["zones","components","flows","width","height","unplaced"],"title":"DiagramOut"},"DiagramZoneOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"x":{"type":"number","title":"X"},"y":{"type":"number","title":"Y"},"width":{"type":"number","title":"Width"},"height":{"type":"number","title":"Height"},"placed":{"type":"boolean","title":"Placed"},"sl_target":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sl Target"}},"type":"object","required":["id","name","x","y","width","height","placed","sl_target"],"title":"DiagramZoneOut"},"DocumentLink":{"properties":{"sdlc_item_id":{"type":"string","format":"uuid","title":"Sdlc Item Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"workflow_name":{"type":"string","title":"Workflow Name"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"title":{"type":"string","title":"Title"}},"type":"object","required":["sdlc_item_id","workflow_id","workflow_name","code","title"],"title":"DocumentLink","description":"A workflow activity that names this document as its artifact."},"DocumentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"doc_id":{"type":"string","title":"Doc Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"uploaded_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Uploaded By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"links":{"items":{"$ref":"#/components/schemas/DocumentLink"},"type":"array","title":"Links"}},"type":"object","required":["id","organization_id","project_id","doc_id","name","description","filename","content_type","size_bytes","uploaded_by","created_at","updated_at"],"title":"DocumentOut"},"DocumentUpdate":{"properties":{"doc_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Doc Id"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},"type":"object","title":"DocumentUpdate","description":"Editable metadata. ``doc_id`` may change — nothing links by that string."},"ErrorLogOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"status_code":{"type":"integer","title":"Status Code"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organization Id"},"exception_type":{"type":"string","title":"Exception Type"},"message":{"type":"string","title":"Message"},"traceback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceback"}},"type":"object","required":["id","created_at","method","path","status_code","user_id","organization_id","exception_type","message","traceback"],"title":"ErrorLogOut"},"EvidenceItem":{"properties":{"sdlc_item_id":{"type":"string","format":"uuid","title":"Sdlc Item Id"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"},"responsible":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Responsible"},"artifact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Artifact"},"done":{"type":"boolean","title":"Done"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"link_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Type"},"link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Link Id"},"link_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Label"},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name"},"editable":{"type":"boolean","title":"Editable","default":true},"recorded_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recorded In"}},"type":"object","required":["sdlc_item_id","code","title","description","evidence","responsible","artifact","done","note","link_type","link_id","link_label"],"title":"EvidenceItem"},"EvidenceItemUpdate":{"properties":{"done":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Done"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"link_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Type"},"link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Link Id"}},"type":"object","title":"EvidenceItemUpdate"},"EvidenceOut":{"properties":{"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"items":{"items":{"$ref":"#/components/schemas/EvidenceItem"},"type":"array","title":"Items"},"summary":{"$ref":"#/components/schemas/EvidenceSummary"},"delegated":{"$ref":"#/components/schemas/EvidenceSummary"}},"type":"object","required":["workflow_id","items","summary"],"title":"EvidenceOut"},"EvidenceSummary":{"properties":{"total":{"type":"integer","title":"Total"},"done":{"type":"integer","title":"Done"}},"type":"object","required":["total","done"],"title":"EvidenceSummary"},"ExploitabilityRating":{"type":"string","enum":["high","med","low"],"title":"ExploitabilityRating","description":"How feasible exploiting the weakness is."},"ExposureRating":{"type":"string","enum":["high","med","low"],"title":"ExposureRating","description":"How reachable the attack surface is."},"FlowCoverageOut":{"properties":{"flows":{"type":"integer","title":"Flows"},"crossings":{"type":"integer","title":"Crossings"},"assigned_crossings":{"type":"integer","title":"Assigned Crossings"},"findings":{"items":{"$ref":"#/components/schemas/FlowFindingOut"},"type":"array","title":"Findings"}},"type":"object","required":["flows","crossings","assigned_crossings","findings"],"title":"FlowCoverageOut","description":"Whether the channel model holds together (TM-PROC-001 §8)."},"FlowFindingOut":{"properties":{"data_flow_id":{"type":"string","format":"uuid","title":"Data Flow Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["data_flow_id","name","kind","detail"],"title":"FlowFindingOut","description":"One flow the zone/conduit model cannot account for."},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"GapOut":{"properties":{"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"field":{"type":"string","title":"Field"}},"type":"object","required":["entity_type","entity_id","field"],"title":"GapOut"},"Gate":{"properties":{"sdlc_item_id":{"type":"string","format":"uuid","title":"Sdlc Item Id"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"responsible":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Responsible"},"checks":{"items":{"$ref":"#/components/schemas/GateCheck"},"type":"array","title":"Checks"},"summary":{"$ref":"#/components/schemas/GateSummary"},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name"},"editable":{"type":"boolean","title":"Editable","default":true}},"type":"object","required":["sdlc_item_id","code","title","description","responsible","checks","summary"],"title":"Gate"},"GateCheck":{"properties":{"gate_check_id":{"type":"string","format":"uuid","title":"Gate Check Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"requirement_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Key"},"requirement_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Title"},"standard_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Standard Key"},"done":{"type":"boolean","title":"Done"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"link_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Type"},"link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Link Id"},"link_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Label"},"recorded_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recorded In"}},"type":"object","required":["gate_check_id","title","description","done","note","link_type","link_id","link_label"],"title":"GateCheck"},"GateCheckUpdate":{"properties":{"done":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Done"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"link_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Type"},"link_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Link Id"}},"type":"object","title":"GateCheckUpdate"},"GateChecklistItemCreate":{"properties":{"requirement_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requirement Id"},"title":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GateChecklistItemCreate"},"GateChecklistItemMove":{"properties":{"direction":{"type":"string","enum":["up","down"],"title":"Direction"}},"type":"object","required":["direction"],"title":"GateChecklistItemMove","description":"Reorder a check one step within its gate's checklist."},"GateChecklistItemOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"sdlc_item_id":{"type":"string","format":"uuid","title":"Sdlc Item Id"},"requirement_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requirement Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sort_order":{"type":"integer","title":"Sort Order"},"requirement_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Key"},"requirement_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Title"},"standard_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Standard Key"},"standard_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Standard Title"}},"type":"object","required":["id","sdlc_item_id","requirement_id","title","description","sort_order"],"title":"GateChecklistItemOut"},"GateChecklistItemUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GateChecklistItemUpdate"},"GateSummary":{"properties":{"total":{"type":"integer","title":"Total"},"done":{"type":"integer","title":"Done"}},"type":"object","required":["total","done"],"title":"GateSummary"},"GatedResourceOut":{"properties":{"slug":{"type":"string","title":"Slug"},"body":{"type":"string","title":"Body"}},"type":"object","required":["slug","body"],"title":"GatedResourceOut","description":"A published resource whose body is part of a paid subscription."},"GatesOut":{"properties":{"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"gates":{"items":{"$ref":"#/components/schemas/Gate"},"type":"array","title":"Gates"},"summary":{"$ref":"#/components/schemas/GateSummary"},"delegated":{"$ref":"#/components/schemas/GateSummary"}},"type":"object","required":["workflow_id","gates","summary"],"title":"GatesOut"},"GlobalRequirementCreate":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"type":"string","maxLength":64,"minLength":1,"title":"Requirement Id"},"title":{"type":"string","maxLength":512,"minLength":1,"title":"Title"},"text":{"type":"string","minLength":1,"title":"Text"},"reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Reference"},"required":{"type":"boolean","title":"Required","default":true},"notes":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Notes"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["requirement_id","title","text"],"title":"GlobalRequirementCreate"},"GlobalRequirementOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"standard_id":{"type":"string","format":"uuid","title":"Standard Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"type":"string","title":"Requirement Id"},"title":{"type":"string","title":"Title"},"text":{"type":"string","title":"Text"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"required":{"type":"boolean","title":"Required"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","standard_id","parent_id","requirement_id","title","text","reference","required","notes","sort_order"],"title":"GlobalRequirementOut"},"GlobalRequirementUpdate":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Requirement Id"},"title":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Title"},"text":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Text"},"reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Reference"},"required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Required"},"notes":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Notes"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GlobalRequirementUpdate"},"GlobalStandardCreate":{"properties":{"key":{"type":"string","maxLength":64,"minLength":1,"title":"Key"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"language":{"type":"string","pattern":"^[A-Z]{2}$","title":"Language","default":"EN"},"keywords":{"items":{"type":"string"},"type":"array","maxItems":32,"title":"Keywords"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["key","title"],"title":"GlobalStandardCreate"},"GlobalStandardOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"type":"string","title":"Language"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","key","title","version","description","language","keywords","sort_order"],"title":"GlobalStandardOut"},"GlobalStandardUpdate":{"properties":{"key":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Key"},"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}],"title":"Language"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":32},{"type":"null"}],"title":"Keywords"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GlobalStandardUpdate"},"GlobalStandardsReseedResult":{"properties":{"added":{"items":{"type":"string"},"type":"array","title":"Added"},"backfilled":{"items":{"type":"string"},"type":"array","title":"Backfilled"},"refreshed":{"items":{"type":"string"},"type":"array","title":"Refreshed"},"stale":{"items":{"type":"string"},"type":"array","title":"Stale"},"pruned":{"items":{"type":"string"},"type":"array","title":"Pruned"},"orphaned":{"items":{"type":"string"},"type":"array","title":"Orphaned"}},"type":"object","title":"GlobalStandardsReseedResult","description":"Summary of a superuser reseed pass over the bundled standard files."},"GlobalWorkflowOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"type":"string","title":"Version"},"standards":{"items":{"type":"string"},"type":"array","title":"Standards"},"items":{"type":"integer","title":"Items","default":0},"children":{"type":"integer","title":"Children","default":0},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","key","name","description","version","sort_order"],"title":"GlobalWorkflowOut","description":"A catalog row, with the bundle's headline fields read out of the JSON.\n\nNot ``from_attributes``: name/description/version/standards live inside\n:attr:`~app.models.global_workflow.GlobalWorkflow.bundle` rather than as\ncolumns, so the route builds this from the parsed bundle."},"GlobalWorkflowUpdate":{"properties":{"key":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Key"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"version":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Version"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"GlobalWorkflowUpdate","description":"Editable metadata.\n\nThe template's *content* — its SDLC tree and requirement assignments — is\nauthored as a JSON bundle and replaced by re-uploading it, so only the\nheadline fields and the catalog ordering are patchable here."},"GlobalWorkflowsReseedResult":{"properties":{"added":{"items":{"type":"string"},"type":"array","title":"Added"},"refreshed":{"items":{"type":"string"},"type":"array","title":"Refreshed"},"stale":{"items":{"type":"string"},"type":"array","title":"Stale"},"pruned":{"items":{"type":"string"},"type":"array","title":"Pruned"},"orphaned":{"items":{"type":"string"},"type":"array","title":"Orphaned"}},"type":"object","title":"GlobalWorkflowsReseedResult","description":"Summary of a superuser reseed pass over the bundled template files."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthStatus":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"HealthStatus"},"ImpactLevel":{"type":"integer","enum":[1,2,3,4],"title":"ImpactLevel","description":"Severity of impact. 1 (Catastrophic) is most severe, 4 (Negligible) least."},"ImportStandardRequest":{"properties":{"global_standard_id":{"type":"string","format":"uuid","title":"Global Standard Id"}},"type":"object","required":["global_standard_id"],"title":"ImportStandardRequest"},"ImportedModelOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"source_tool":{"type":"string","title":"Source Tool"},"original_filename":{"type":"string","title":"Original Filename"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"size_bytes":{"type":"integer","title":"Size Bytes"},"imported_at":{"type":"string","format":"date-time","title":"Imported At"}},"type":"object","required":["id","project_id","source_tool","original_filename","model_name","size_bytes","imported_at"],"title":"ImportedModelOut"},"InvitationCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/Role","default":"contributor"}},"type":"object","required":["email"],"title":"InvitationCreate"},"InvitationOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"org_role":{"$ref":"#/components/schemas/Role"},"status":{"$ref":"#/components/schemas/InvitationStatus"},"token":{"type":"string","title":"Token"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["id","email","org_role","status","token","created_at","expires_at"],"title":"InvitationOut"},"InvitationStatus":{"type":"string","enum":["pending","accepted","revoked"],"title":"InvitationStatus"},"Likelihood":{"type":"string","enum":["very_high","high","med","low","very_low"],"title":"Likelihood","description":"Derived likelihood of a threat materializing."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"LoginResponse":{"properties":{"mfa_challenge":{"type":"boolean","title":"Mfa Challenge","default":false},"mfa_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mfa Token"},"session":{"anyOf":[{"$ref":"#/components/schemas/MeResponse"},{"type":"null"}]}},"type":"object","title":"LoginResponse","description":"Result of the first login step.\n\nEither the login completed (``session`` set) or a second factor is needed\n(``mfa_challenge`` true + a short-lived ``mfa_token`` to pass to\n``POST /auth/login/mfa``)."},"MakeChildRequest":{"properties":{"parent_id":{"type":"string","format":"uuid","title":"Parent Id"}},"type":"object","required":["parent_id"],"title":"MakeChildRequest"},"MatrixCell":{"properties":{"likelihood":{"$ref":"#/components/schemas/Likelihood"},"impact":{"type":"integer","title":"Impact"},"risk":{"type":"integer","title":"Risk"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["likelihood","impact","risk","count"],"title":"MatrixCell"},"MeResponse":{"properties":{"user":{"$ref":"#/components/schemas/UserOut"},"organization_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Organization Id"},"role":{"$ref":"#/components/schemas/Role"},"is_desktop":{"type":"boolean","title":"Is Desktop"},"mfa_enabled":{"type":"boolean","title":"Mfa Enabled","default":false},"mfa_available":{"type":"boolean","title":"Mfa Available","default":false},"mfa_required":{"type":"boolean","title":"Mfa Required","default":false}},"type":"object","required":["user","organization_id","role","is_desktop"],"title":"MeResponse","description":"Current session: the user plus their resolved organization role."},"MemberOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"type":"string","title":"Email"},"display_name":{"type":"string","title":"Display Name"},"role":{"$ref":"#/components/schemas/Role"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["user_id","email","display_name","role","is_active"],"title":"MemberOut"},"MfaEnableRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":1,"title":"Code"}},"type":"object","required":["code"],"title":"MfaEnableRequest"},"MfaLoginRequest":{"properties":{"mfa_token":{"type":"string","maxLength":1024,"minLength":1,"title":"Mfa Token"},"code":{"type":"string","maxLength":64,"minLength":1,"title":"Code"}},"type":"object","required":["mfa_token","code"],"title":"MfaLoginRequest"},"MfaPasswordRequest":{"properties":{"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"}},"type":"object","required":["password"],"title":"MfaPasswordRequest","description":"Re-authentication for a sensitive MFA change (disable / regenerate)."},"MfaRecoveryCodesResponse":{"properties":{"recovery_codes":{"items":{"type":"string"},"type":"array","title":"Recovery Codes"}},"type":"object","required":["recovery_codes"],"title":"MfaRecoveryCodesResponse"},"MfaSetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"otpauth_uri":{"type":"string","title":"Otpauth Uri"},"qr_svg":{"type":"string","title":"Qr Svg"}},"type":"object","required":["secret","otpauth_uri","qr_svg"],"title":"MfaSetupResponse","description":"Enrolment material, returned once when setup begins."},"MitigationCreate":{"properties":{"treatment_type":{"$ref":"#/components/schemas/TreatmentType"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Owner"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"progress":{"$ref":"#/components/schemas/Progress","default":"not_started"},"completion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Completion Date"},"evidence_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Evidence Ref"},"acceptance_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceptance Rationale"},"control_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Control Ids"},"category_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Category Ids"}},"type":"object","required":["treatment_type"],"title":"MitigationCreate"},"MitigationOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"threat_id":{"type":"string","format":"uuid","title":"Threat Id"},"treatment_type":{"$ref":"#/components/schemas/TreatmentType"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"residual_likelihood_calculated":{"anyOf":[{"$ref":"#/components/schemas/Likelihood"},{"type":"null"}]},"residual_risk_calculated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Residual Risk Calculated"},"progress":{"$ref":"#/components/schemas/Progress"},"completion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Completion Date"},"evidence_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Ref"},"acceptance_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceptance Rationale"},"control_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Control Ids","default":[]},"category_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Category Ids","default":[]},"op_work_package_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Op Work Package Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","threat_id","treatment_type","description","owner","due_date","exposure_comment","exposure_rating","exploitability_comment","exploitability_rating","impact_comment","impact_rating","residual_likelihood_calculated","residual_risk_calculated","progress","completion_date","evidence_ref","acceptance_rationale","op_work_package_id","created_at","updated_at"],"title":"MitigationOut"},"MitigationUpdate":{"properties":{"treatment_type":{"anyOf":[{"$ref":"#/components/schemas/TreatmentType"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Owner"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"progress":{"anyOf":[{"$ref":"#/components/schemas/Progress"},{"type":"null"}]},"completion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Completion Date"},"evidence_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Evidence Ref"},"acceptance_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceptance Rationale"},"control_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Control Ids"},"category_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Category Ids"}},"type":"object","title":"MitigationUpdate"},"ModelGapsOut":{"properties":{"gaps":{"items":{"$ref":"#/components/schemas/GapOut"},"type":"array","title":"Gaps"}},"type":"object","required":["gaps"],"title":"ModelGapsOut"},"NamedCount":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["id","name","count"],"title":"NamedCount"},"NewVersionIn":{"properties":{"version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Version"}},"type":"object","title":"NewVersionIn","description":"Optional explicit version for a new copy; defaults to a minor bump."},"NotRelevantIn":{"properties":{"rationale":{"type":"string","title":"Rationale"}},"type":"object","required":["rationale"],"title":"NotRelevantIn","description":"Marking a requirement not relevant requires a justification (Art. 13(4))."},"NoticeStatus":{"properties":{"key":{"type":"string","title":"Key"},"current_version":{"type":"integer","title":"Current Version"},"acknowledged_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Acknowledged Version"},"acknowledged_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Acknowledged At"},"outstanding":{"type":"boolean","title":"Outstanding"}},"type":"object","required":["key","current_version","acknowledged_version","acknowledged_at","outstanding"],"title":"NoticeStatus","description":"Per-user state of one notice: whether it still needs acknowledging."},"OpenProjectConnectionOut":{"properties":{"ok":{"type":"boolean","title":"Ok"},"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User"}},"type":"object","required":["ok"],"title":"OpenProjectConnectionOut","description":"Result of the \"Test connection\" button (GET /api/v3/users/me)."},"OpenProjectExportRequest":{"properties":{"project_id":{"type":"string","maxLength":255,"minLength":1,"title":"Project Id"}},"type":"object","required":["project_id"],"title":"OpenProjectExportRequest"},"OpenProjectExportResult":{"properties":{"project_id":{"type":"string","title":"Project Id"},"created":{"type":"integer","title":"Created"},"updated":{"type":"integer","title":"Updated"},"project_url":{"type":"string","title":"Project Url"}},"type":"object","required":["project_id","created","updated","project_url"],"title":"OpenProjectExportResult"},"OpenProjectProjectCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"OpenProjectProjectCreate","description":"A new OpenProject project to export into. The URL slug is derived from\nthe name server-side (and made unique), so the caller only picks a name."},"OpenProjectProjectOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"}},"type":"object","required":["id","name"],"title":"OpenProjectProjectOut","description":"One selectable target project, as offered in the export dialog."},"OpenProjectSettingsOut":{"properties":{"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url"},"has_token":{"type":"boolean","title":"Has Token","default":false},"enabled":{"type":"boolean","title":"Enabled","default":false},"configured":{"type":"boolean","title":"Configured","default":false}},"type":"object","title":"OpenProjectSettingsOut"},"OpenProjectSettingsUpdate":{"properties":{"base_url":{"type":"string","maxLength":512,"minLength":1,"title":"Base Url"},"api_token":{"anyOf":[{"type":"string","maxLength":4096,"minLength":1},{"type":"null"}],"title":"Api Token"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["base_url"],"title":"OpenProjectSettingsUpdate"},"OpenProjectTaskOut":{"properties":{"mitigation_id":{"type":"string","format":"uuid","title":"Mitigation Id"},"work_package_id":{"type":"integer","title":"Work Package Id"},"url":{"type":"string","title":"Url"},"created":{"type":"boolean","title":"Created"}},"type":"object","required":["mitigation_id","work_package_id","url","created"],"title":"OpenProjectTaskOut","description":"The work package a treatment was raised as, and where to find it."},"OrgPlan":{"type":"string","enum":["free","starter","professional","enterprise"],"title":"OrgPlan"},"OrgRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"OrgRef"},"OrganizationOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"vat_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Id"},"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"billing_street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Street"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Country"},"billing_complete":{"type":"boolean","title":"Billing Complete"},"has_logo":{"type":"boolean","title":"Has Logo"},"has_icon":{"type":"boolean","title":"Has Icon"},"plan":{"$ref":"#/components/schemas/OrgPlan"},"seat_step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seat Step"},"seats_used":{"type":"integer","title":"Seats Used"},"seats_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats Limit"},"products_used":{"type":"integer","title":"Products Used"},"products_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Products Limit"},"workflows_used":{"type":"integer","title":"Workflows Used"},"workflows_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflows Limit"},"billing_cycle":{"$ref":"#/components/schemas/BillingCycle"},"current_period_start":{"type":"string","format":"date-time","title":"Current Period Start"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"scheduled_plan":{"anyOf":[{"$ref":"#/components/schemas/OrgPlan"},{"type":"null"}]},"scheduled_seat_step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scheduled Seat Step"},"scheduled_billing_cycle":{"anyOf":[{"$ref":"#/components/schemas/BillingCycle"},{"type":"null"}]},"next_period_start":{"type":"string","format":"date-time","title":"Next Period Start"},"next_period_end":{"type":"string","format":"date-time","title":"Next Period End"},"terminate_at_period_end":{"type":"boolean","title":"Terminate At Period End"},"terminated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Terminated At"},"support_access_enabled":{"type":"boolean","title":"Support Access Enabled"},"support_access_locked":{"type":"boolean","title":"Support Access Locked"}},"type":"object","required":["id","name","legal_name","address","contact_email","website","vat_id","billing_email","billing_street","billing_postal_code","billing_city","billing_country","billing_complete","has_logo","has_icon","plan","seat_step","seats_used","seats_limit","products_used","products_limit","workflows_used","workflows_limit","billing_cycle","current_period_start","current_period_end","scheduled_plan","scheduled_seat_step","scheduled_billing_cycle","next_period_start","next_period_end","terminate_at_period_end","terminated_at","support_access_enabled","support_access_locked"],"title":"OrganizationOut"},"OrganizationSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"plan":{"$ref":"#/components/schemas/OrgPlan"},"seat_step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seat Step"},"support_access_enabled":{"type":"boolean","title":"Support Access Enabled"},"support_access_locked":{"type":"boolean","title":"Support Access Locked"},"members":{"type":"integer","title":"Members"},"support_write_allowed":{"type":"boolean","title":"Support Write Allowed"}},"type":"object","required":["id","name","slug","plan","seat_step","support_access_enabled","support_access_locked","members","support_write_allowed"],"title":"OrganizationSummary","description":"A row in the superuser's cross-org switcher / customer-management list."},"OrganizationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"legal_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Legal Name"},"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Address"},"contact_email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Contact Email"},"website":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Website"},"vat_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Vat Id"},"billing_email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Billing Email"},"billing_street":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Billing Street"},"billing_postal_code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Billing Postal Code"},"billing_city":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Billing City"},"billing_country":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Billing Country"},"plan":{"anyOf":[{"$ref":"#/components/schemas/OrgPlan"},{"type":"null"}]},"seat_step":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Seat Step"},"billing_cycle":{"anyOf":[{"$ref":"#/components/schemas/BillingCycle"},{"type":"null"}]},"support_access_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Support Access Enabled"}},"type":"object","title":"OrganizationUpdate"},"ParticipantCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"role":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Role"},"organization":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Organization"}},"type":"object","required":["name"],"title":"ParticipantCreate"},"ParticipantOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"name":{"type":"string","title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"}},"type":"object","required":["id","session_id","name","role","organization"],"title":"ParticipantOut"},"ParticipantUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"role":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Role"},"organization":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Organization"}},"type":"object","title":"ParticipantUpdate"},"PlatformSettingsOut":{"properties":{"registration_enabled":{"type":"boolean","title":"Registration Enabled"}},"type":"object","required":["registration_enabled"],"title":"PlatformSettingsOut","description":"Operator switches the frontend needs to know about.\n\nReadable unauthenticated: the sign-up page has to know whether to render its\nform before anyone has an account. Only non-sensitive flags belong here."},"PlatformSettingsUpdate":{"properties":{"registration_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Registration Enabled"}},"type":"object","title":"PlatformSettingsUpdate","description":"Partial update — omitted fields are left as they are."},"PortfolioResidual":{"properties":{"threat_total":{"type":"integer","title":"Threat Total"},"critical":{"type":"integer","title":"Critical"},"high":{"type":"integer","title":"High"},"unrated":{"type":"integer","title":"Unrated"}},"type":"object","required":["threat_total","critical","high","unrated"],"title":"PortfolioResidual","description":"Residual risk of the valid TRA (risk levels 1 = Critical, 2 = High)."},"PortfolioRow":{"properties":{"product":{"$ref":"#/components/schemas/ProductOut"},"effective_tra":{"anyOf":[{"$ref":"#/components/schemas/PortfolioTra"},{"type":"null"}]},"in_progress":{"anyOf":[{"$ref":"#/components/schemas/PortfolioTra"},{"type":"null"}]},"residual":{"anyOf":[{"$ref":"#/components/schemas/PortfolioResidual"},{"type":"null"}]},"workflow":{"anyOf":[{"$ref":"#/components/schemas/PortfolioWorkflow"},{"type":"null"}]},"warnings":{"items":{"type":"string","enum":["no_released_tra","multiple_released_tras","product_changed_since_release","support_period_missing"]},"type":"array","title":"Warnings"}},"type":"object","required":["product","effective_tra","in_progress","residual","workflow","warnings"],"title":"PortfolioRow"},"PortfolioTra":{"properties":{"project_id":{"type":"string","format":"uuid","title":"Project Id"},"version":{"type":"string","title":"Version"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"released_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Released At"},"lead_product_id":{"type":"string","format":"uuid","title":"Lead Product Id"},"lead_product_name":{"type":"string","title":"Lead Product Name"},"via_reuse":{"type":"boolean","title":"Via Reuse"}},"type":"object","required":["project_id","version","status","released_at","lead_product_id","lead_product_name","via_reuse"],"title":"PortfolioTra","description":"A TRA version as it relates to one product."},"PortfolioWorkflow":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"covered_percent":{"type":"number","title":"Covered Percent"}},"type":"object","required":["id","name","covered_percent"],"title":"PortfolioWorkflow"},"ProductCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"manufacturer":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Manufacturer"},"product_family":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Product Family"},"cra_class":{"$ref":"#/components/schemas/CRAClass","default":"default"},"support_years":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Support Years"}},"type":"object","required":["name"],"title":"ProductCreate"},"ProductOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"manufacturer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manufacturer"},"product_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Family"},"cra_class":{"$ref":"#/components/schemas/CRAClass"},"support_years":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Support Years"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","description","manufacturer","product_family","cra_class","support_years","created_at","updated_at"],"title":"ProductOut"},"ProductUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"manufacturer":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Manufacturer"},"product_family":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Product Family"},"cra_class":{"anyOf":[{"$ref":"#/components/schemas/CRAClass"},{"type":"null"}]},"support_years":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Support Years"}},"type":"object","title":"ProductUpdate","description":"All fields optional; only provided fields are changed."},"Progress":{"type":"string","enum":["not_started","in_progress","on_hold","completed"],"title":"Progress"},"ProjectBundle":{"properties":{"product":{"$ref":"#/components/schemas/BundleProduct"},"covered_products":{"items":{"$ref":"#/components/schemas/BundleCoveredProduct"},"type":"array","title":"Covered Products"},"version":{"type":"string","maxLength":32,"title":"Version","default":"1.0"},"target_area":{"$ref":"#/components/schemas/TargetArea","default":"system"},"scope_statement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Statement"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"managed_risk_threshold":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Managed Risk Threshold"},"zones":{"items":{"$ref":"#/components/schemas/BundleZone"},"type":"array","title":"Zones"},"conduits":{"items":{"$ref":"#/components/schemas/BundleConduit"},"type":"array","title":"Conduits"},"security_categories":{"items":{"$ref":"#/components/schemas/BundleSecurityCategory"},"type":"array","title":"Security Categories"},"components":{"items":{"$ref":"#/components/schemas/BundleComponent"},"type":"array","title":"Components"},"security_controls":{"items":{"$ref":"#/components/schemas/BundleSecurityControl"},"type":"array","title":"Security Controls"},"data_flows":{"items":{"$ref":"#/components/schemas/BundleDataFlow"},"type":"array","title":"Data Flows"},"threats":{"items":{"$ref":"#/components/schemas/BundleThreat"},"type":"array","title":"Threats"},"assumptions":{"items":{"$ref":"#/components/schemas/BundleAssumption"},"type":"array","title":"Assumptions"},"usage_statements":{"items":{"$ref":"#/components/schemas/BundleUsageStatement"},"type":"array","title":"Usage Statements"},"workshops":{"items":{"$ref":"#/components/schemas/BundleWorkshop"},"type":"array","title":"Workshops"}},"type":"object","required":["product"],"title":"ProjectBundle","description":"Import payload. Envelope fields (``schema``/``schema_version``) are\nignored, as they are for a workflow bundle."},"ProjectCreate":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"target_area":{"$ref":"#/components/schemas/TargetArea"},"version":{"type":"string","maxLength":32,"title":"Version","default":"1.0"},"scope_statement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Statement"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"managed_risk_threshold":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Managed Risk Threshold"},"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"covered_products":{"items":{"$ref":"#/components/schemas/CoveredProductCreate"},"type":"array","maxItems":100,"title":"Covered Products"}},"type":"object","required":["product_id","target_area"],"title":"ProjectCreate"},"ProjectDocumentsOut":{"properties":{"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"own":{"items":{"$ref":"#/components/schemas/DocumentOut"},"type":"array","title":"Own"},"inherited":{"items":{"$ref":"#/components/schemas/DocumentOut"},"type":"array","title":"Inherited"}},"type":"object","required":["workflow_id"],"title":"ProjectDocumentsOut"},"ProjectImportResult":{"properties":{"project":{"$ref":"#/components/schemas/ProjectOut"},"warnings":{"$ref":"#/components/schemas/ProjectImportWarnings"}},"type":"object","required":["project","warnings"],"title":"ProjectImportResult"},"ProjectImportWarnings":{"properties":{"reused_product":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reused Product"},"unresolved_refs":{"items":{"type":"string"},"type":"array","title":"Unresolved Refs"},"skipped_covered_products":{"items":{"type":"string"},"type":"array","title":"Skipped Covered Products"}},"type":"object","title":"ProjectImportWarnings","description":"What the import could not take at face value.\n\nReported rather than raised, for the same reason a workflow import degrades\ngracefully: a bundle that is 95% importable is worth having, and the caller\nshould be told which 5% did not come rather than being handed a 422."},"ProjectMitigationOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"threat_id":{"type":"string","format":"uuid","title":"Threat Id"},"treatment_type":{"$ref":"#/components/schemas/TreatmentType"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"residual_likelihood_calculated":{"anyOf":[{"$ref":"#/components/schemas/Likelihood"},{"type":"null"}]},"residual_risk_calculated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Residual Risk Calculated"},"progress":{"$ref":"#/components/schemas/Progress"},"completion_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Completion Date"},"evidence_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Ref"},"acceptance_rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acceptance Rationale"},"control_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Control Ids","default":[]},"category_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Category Ids","default":[]},"op_work_package_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Op Work Package Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"threat_title":{"type":"string","title":"Threat Title"},"threat_risk_calculated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Threat Risk Calculated"},"component_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component Name"}},"type":"object","required":["id","threat_id","treatment_type","description","owner","due_date","exposure_comment","exposure_rating","exploitability_comment","exploitability_rating","impact_comment","impact_rating","residual_likelihood_calculated","residual_risk_calculated","progress","completion_date","evidence_ref","acceptance_rationale","op_work_package_id","created_at","updated_at","threat_title","threat_risk_calculated","component_name"],"title":"ProjectMitigationOut","description":"A treatment as the project-wide Risk Treatment page lists it.\n\nCarries the threat it treats, because that page is read across threats: a\ntreatment on its own says what will be done but not what it is for, and the\nrow has to be legible without opening the threat it hangs under."},"ProjectOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"product_id":{"type":"string","format":"uuid","title":"Product Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"version":{"type":"string","title":"Version"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"target_area":{"$ref":"#/components/schemas/TargetArea"},"scope_statement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Statement"},"sl_target":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sl Target"},"managed_risk_threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Managed Risk Threshold"},"released_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Released At"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"archived_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Archived By"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"released_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Released By"},"predecessor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Predecessor Id"},"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"op_project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Op Project Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"default_managed_risk_threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Managed Risk Threshold","description":"The threshold \"Auto\" resolves to for this SL-T (frontend label).","readOnly":true}},"type":"object","required":["id","product_id","organization_id","version","status","target_area","scope_statement","sl_target","managed_risk_threshold","released_at","archived_at","archived_by","created_by","released_by","predecessor_id","workflow_id","op_project_id","created_at","updated_at","default_managed_risk_threshold"],"title":"ProjectOut"},"ProjectRoleAssign":{"properties":{"project_role":{"$ref":"#/components/schemas/Role"},"qualification":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Qualification"}},"type":"object","required":["project_role"],"title":"ProjectRoleAssign"},"ProjectRoleOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"project_role":{"$ref":"#/components/schemas/Role"},"qualification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Qualification"},"display_name":{"type":"string","title":"Display Name","default":""},"email":{"type":"string","title":"Email","default":""}},"type":"object","required":["user_id","project_id","project_role"],"title":"ProjectRoleOut"},"ProjectStatus":{"type":"string","enum":["draft","in_review","approved","released"],"title":"ProjectStatus"},"ProjectUpdate":{"properties":{"version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Version"},"target_area":{"anyOf":[{"$ref":"#/components/schemas/TargetArea"},{"type":"null"}]},"scope_statement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Statement"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"managed_risk_threshold":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Managed Risk Threshold"},"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"op_project_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Op Project Id"}},"type":"object","title":"ProjectUpdate","description":"Editable project content. The ``status`` lifecycle is NOT editable here —\nit is driven only through the approval workflow (see routes/approvals.py)."},"RegisterRequest":{"properties":{"organization_name":{"type":"string","maxLength":255,"minLength":1,"title":"Organization Name"},"display_name":{"type":"string","maxLength":255,"minLength":1,"title":"Display Name"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"plan":{"$ref":"#/components/schemas/OrgPlan","default":"starter"}},"type":"object","required":["organization_name","display_name","email","password"],"title":"RegisterRequest","description":"Self-service sign-up: a new organization plus its first (admin) user."},"ReleaseIn":{"properties":{"version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Version"}},"type":"object","title":"ReleaseIn","description":"The final version number assigned at release (must exceed the previous\nreleased version). Defaults to the project's current version."},"RequirementCreate":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"type":"string","maxLength":64,"minLength":1,"title":"Requirement Id"},"title":{"type":"string","maxLength":512,"minLength":1,"title":"Title"},"text":{"type":"string","minLength":1,"title":"Text"},"reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Reference"},"required":{"type":"boolean","title":"Required","default":true},"notes":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Notes"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["requirement_id","title","text"],"title":"RequirementCreate"},"RequirementOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"standard_id":{"type":"string","format":"uuid","title":"Standard Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"type":"string","title":"Requirement Id"},"title":{"type":"string","title":"Title"},"text":{"type":"string","title":"Text"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"required":{"type":"boolean","title":"Required"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","standard_id","parent_id","requirement_id","title","text","reference","required","notes","sort_order"],"title":"RequirementOut"},"RequirementUpdate":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"requirement_id":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Requirement Id"},"title":{"anyOf":[{"type":"string","maxLength":512,"minLength":1},{"type":"null"}],"title":"Title"},"text":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Text"},"reference":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Reference"},"required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Required"},"notes":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Notes"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"RequirementUpdate"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","maxLength":200,"minLength":1,"title":"Token"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"RiskCounts":{"properties":{"by_level":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Level"},"unrated":{"type":"integer","title":"Unrated"}},"type":"object","required":["by_level","unrated"],"title":"RiskCounts"},"RiskSummaryOut":{"properties":{"threat_total":{"type":"integer","title":"Threat Total"},"sl_target":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sl Target"},"sl_capability":{"$ref":"#/components/schemas/SlCapability"},"initial":{"$ref":"#/components/schemas/RiskCounts"},"residual":{"$ref":"#/components/schemas/RiskCounts"},"initial_matrix":{"items":{"$ref":"#/components/schemas/MatrixCell"},"type":"array","title":"Initial Matrix"},"residual_matrix":{"items":{"$ref":"#/components/schemas/MatrixCell"},"type":"array","title":"Residual Matrix"},"by_security_control":{"items":{"$ref":"#/components/schemas/NamedCount"},"type":"array","title":"By Security Control"},"by_attacker_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Attacker Type"},"treatment":{"$ref":"#/components/schemas/TreatmentSummary"}},"type":"object","required":["threat_total","sl_target","sl_capability","initial","residual","initial_matrix","residual_matrix","by_security_control","by_attacker_type","treatment"],"title":"RiskSummaryOut"},"Role":{"type":"string","enum":["viewer","reviewer","contributor","tra_manager","admin"],"title":"Role","description":"Organization / project role. Ordered least → most privileged below."},"RoleUpdate":{"properties":{"role":{"$ref":"#/components/schemas/Role"}},"type":"object","required":["role"],"title":"RoleUpdate"},"RollupChild":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"summary":{"$ref":"#/components/schemas/CoverageSummary"}},"type":"object","required":["id","name","summary"],"title":"RollupChild","description":"One child workflow's contribution, so the Overview can name the sources."},"RollupRole":{"properties":{"name":{"type":"string","title":"Name"},"in_registry":{"type":"boolean","title":"In Registry"},"activities":{"items":{"type":"string"},"type":"array","title":"Activities"}},"type":"object","required":["name","in_registry","activities"],"title":"RollupRole"},"SdlcItemCreate":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"item_type":{"$ref":"#/components/schemas/SdlcItemType","default":"activity"},"child_workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Child Workflow Id"},"code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Code"},"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"evidence":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Evidence"},"track_evidence":{"type":"boolean","title":"Track Evidence","default":false},"responsible":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Responsible"},"artifact":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Artifact"},"document_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Document Id"},"tool":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Tool"},"process_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Process Url"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"lane_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lane Id"}},"type":"object","title":"SdlcItemCreate"},"SdlcItemMove":{"properties":{"direction":{"type":"string","enum":["up","down"],"title":"Direction"}},"type":"object","required":["direction"],"title":"SdlcItemMove","description":"Reorder an item one step within its sibling group."},"SdlcItemOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"item_type":{"$ref":"#/components/schemas/SdlcItemType"},"child_workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Child Workflow Id"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"evidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence"},"track_evidence":{"type":"boolean","title":"Track Evidence"},"responsible":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Responsible"},"artifact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Artifact"},"document_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Document Id"},"tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"},"process_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Process Url"},"sort_order":{"type":"integer","title":"Sort Order"},"lane_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lane Id"}},"type":"object","required":["id","workflow_id","parent_id","item_type","child_workflow_id","code","title","description","evidence","track_evidence","responsible","artifact","document_id","tool","process_url","sort_order","lane_id"],"title":"SdlcItemOut"},"SdlcItemType":{"type":"string","enum":["activity","gate"],"title":"SdlcItemType","description":"What an SDLC item *is*. Fixed at creation — an activity and a gate carry\ndifferent data, so converting one into the other would strand it."},"SdlcItemUpdate":{"properties":{"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Code"},"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"evidence":{"anyOf":[{"type":"string","maxLength":8000},{"type":"null"}],"title":"Evidence"},"track_evidence":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Track Evidence"},"responsible":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Responsible"},"artifact":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Artifact"},"document_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Document Id"},"tool":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Tool"},"process_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Process Url"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"lane_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lane Id"}},"type":"object","title":"SdlcItemUpdate"},"SecurityCategoryCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"SecurityCategoryCreate"},"SecurityCategoryOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","project_id","name","description","sort_order"],"title":"SecurityCategoryOut"},"SecurityCategoryUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"SecurityCategoryUpdate"},"SecurityControlCreate":{"properties":{"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"zone_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Zone Ids"},"conduit_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Conduit Ids"},"component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Component Id"}},"type":"object","required":["name"],"title":"SecurityControlCreate"},"SecurityControlOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"zone_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Zone Ids"},"conduit_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Conduit Ids"},"component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Component Id"},"op_work_package_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Op Work Package Id"}},"type":"object","required":["id","project_id","category_id","name","description","zone_ids","conduit_ids","component_id"],"title":"SecurityControlOut"},"SecurityControlTaskOut":{"properties":{"security_control_id":{"type":"string","format":"uuid","title":"Security Control Id"},"work_package_id":{"type":"integer","title":"Work Package Id"},"url":{"type":"string","title":"Url"},"created":{"type":"boolean","title":"Created"}},"type":"object","required":["security_control_id","work_package_id","url","created"],"title":"SecurityControlTaskOut","description":"The work package a security control was raised as, and where to find it.\n\nA sibling of :class:`app.schemas.mitigation.OpenProjectTaskOut` rather than\na shared generic one: each names the thing it tracks, and an ``entity_id``\nthat could be either would make both ends guess."},"SecurityControlUpdate":{"properties":{"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"zone_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Zone Ids"},"conduit_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Conduit Ids"},"component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Component Id"}},"type":"object","title":"SecurityControlUpdate"},"SignatureVerifyOut":{"properties":{"has_approval":{"type":"boolean","title":"Has Approval"},"matches":{"type":"boolean","title":"Matches"},"approved_signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved Signature"},"current_signature":{"type":"string","title":"Current Signature"}},"type":"object","required":["has_approval","matches","approved_signature","current_signature"],"title":"SignatureVerifyOut","description":"Whether the current TRA content still matches the last approval's token."},"SlCapability":{"properties":{"threshold":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Threshold"},"managed":{"type":"integer","title":"Managed"},"total":{"type":"integer","title":"Total"},"percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percent"}},"type":"object","required":["threshold","managed","total","percent"],"title":"SlCapability","description":"SL-C as the share of rated threats whose residual risk is 'managed'\n(residual risk level >= ``threshold``). ``percent`` is 0-100, or null when\nthere is no target/threshold or no rated threats to measure against."},"StandardBundle":{"properties":{"standard":{"$ref":"#/components/schemas/StandardMeta"},"requirements":{"items":{"$ref":"#/components/schemas/BundleRequirement"},"type":"array","title":"Requirements"}},"type":"object","required":["standard"],"title":"StandardBundle","description":"Import payload. Any extra envelope fields (schema/…) are ignored."},"StandardCreate":{"properties":{"key":{"type":"string","maxLength":64,"minLength":1,"title":"Key"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"language":{"type":"string","pattern":"^[A-Z]{2}$","title":"Language","default":"EN"},"keywords":{"items":{"type":"string"},"type":"array","maxItems":32,"title":"Keywords"}},"type":"object","required":["key","title"],"title":"StandardCreate"},"StandardMeta":{"properties":{"key":{"type":"string","maxLength":64,"minLength":1,"title":"Key"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"language":{"type":"string","pattern":"^[A-Z]{2}$","title":"Language","default":"EN"},"keywords":{"items":{"type":"string"},"type":"array","maxItems":32,"title":"Keywords"}},"type":"object","required":["key","title"],"title":"StandardMeta"},"StandardOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"source_global_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Global Id"},"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"language":{"type":"string","title":"Language"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"imported_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Imported At"},"sort_order":{"type":"integer","title":"Sort Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","organization_id","source_global_id","key","title","version","description","language","keywords","imported_at","sort_order","created_at","updated_at"],"title":"StandardOut"},"StandardRequestCreate":{"properties":{"standard":{"type":"string","maxLength":255,"minLength":1,"title":"Standard"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","required":["standard"],"title":"StandardRequestCreate"},"StandardRequestOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"standard":{"type":"string","title":"Standard"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","standard","created_at"],"title":"StandardRequestOut"},"StandardUpdate":{"properties":{"key":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Key"},"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Version"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"language":{"anyOf":[{"type":"string","pattern":"^[A-Z]{2}$"},{"type":"null"}],"title":"Language"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":32},{"type":"null"}],"title":"Keywords"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"StandardUpdate"},"StrideCategory":{"type":"string","enum":["S","T","R","I","D","E","multiple"],"title":"StrideCategory"},"StrideGenerateResult":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run"},"crossing_flows":{"type":"integer","title":"Crossing Flows"},"exposed_components":{"type":"integer","title":"Exposed Components"},"internal_flows":{"type":"integer","title":"Internal Flows"},"internal_components":{"type":"integer","title":"Internal Components"},"created":{"type":"integer","title":"Created"},"skipped_existing":{"type":"integer","title":"Skipped Existing"},"templates_used":{"type":"integer","title":"Templates Used"},"threats":{"items":{"$ref":"#/components/schemas/StrideThreatPreview"},"type":"array","title":"Threats"}},"type":"object","required":["dry_run","crossing_flows","exposed_components","internal_flows","internal_components","created","skipped_existing","templates_used","threats"],"title":"StrideGenerateResult"},"StrideThreatPreview":{"properties":{"template_key":{"type":"string","title":"Template Key"},"external_ref":{"type":"string","title":"External Ref"},"title":{"type":"string","title":"Title"},"stride_category":{"type":"string","title":"Stride Category"},"element":{"type":"string","title":"Element"},"element_kind":{"type":"string","title":"Element Kind"},"exists":{"type":"boolean","title":"Exists"}},"type":"object","required":["template_key","external_ref","title","stride_category","element","element_kind","exists"],"title":"StrideThreatPreview","description":"One threat the pass would create, or found already present."},"SubmitOut":{"properties":{"status":{"$ref":"#/components/schemas/ProjectStatus"},"issues":{"items":{"$ref":"#/components/schemas/ApprovalIssue"},"type":"array","title":"Issues"}},"type":"object","required":["status","issues"],"title":"SubmitOut","description":"Result of submitting for review: the new status plus any open issues\n(non-blocking — issues are informational, spec §6.10)."},"TargetArea":{"type":"string","enum":["component","system","management"],"title":"TargetArea","description":"Scope of the analysis. ``MANAGEMENT`` is deferred to v1.1 (OQ-9) and is\nrejected at the API layer, but kept here so stored values stay stable."},"TemplateTarget":{"type":"string","enum":["component","data_flow"],"title":"TemplateTarget","description":"The kind of diagram element a template speaks about."},"ThreatCreate":{"properties":{"sequence_number":{"type":"integer","minimum":0.0,"title":"Sequence Number"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Component Id"},"security_control_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Security Control Id"},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"data_flow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Data Flow Id"},"attack_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attack Action"},"attacker_type":{"anyOf":[{"$ref":"#/components/schemas/AttackerType"},{"type":"null"}]},"weakness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weakness"},"stride_category":{"anyOf":[{"$ref":"#/components/schemas/StrideCategory"},{"type":"null"}]},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"possible_measures":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Possible Measures"},"general_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"General Comments"},"catalog_source":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Catalog Source"}},"type":"object","required":["sequence_number","title"],"title":"ThreatCreate"},"ThreatOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"sequence_number":{"type":"integer","title":"Sequence Number"},"component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Component Id"},"security_control_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Security Control Id"},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"data_flow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Data Flow Id"},"title":{"type":"string","title":"Title"},"attack_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attack Action"},"attacker_type":{"anyOf":[{"$ref":"#/components/schemas/AttackerType"},{"type":"null"}]},"weakness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weakness"},"stride_category":{"anyOf":[{"$ref":"#/components/schemas/StrideCategory"},{"type":"null"}]},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"likelihood_calculated":{"anyOf":[{"$ref":"#/components/schemas/Likelihood"},{"type":"null"}]},"risk_calculated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Risk Calculated"},"possible_measures":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Possible Measures"},"general_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"General Comments"},"catalog_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Source"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","project_id","sequence_number","component_id","security_control_id","zone_id","conduit_id","data_flow_id","title","attack_action","attacker_type","weakness","stride_category","exposure_comment","exposure_rating","exploitability_comment","exploitability_rating","impact_comment","impact_rating","likelihood_calculated","risk_calculated","possible_measures","general_comments","catalog_source","external_ref","created_at","updated_at"],"title":"ThreatOut"},"ThreatTemplateOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"target":{"$ref":"#/components/schemas/TemplateTarget"},"component_type":{"anyOf":[{"$ref":"#/components/schemas/ComponentType"},{"type":"null"}]},"stride_category":{"$ref":"#/components/schemas/StrideCategory"},"title":{"type":"string","title":"Title"},"attack_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attack Action"},"weakness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weakness"},"possible_measures":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Possible Measures"},"attacker_type":{"anyOf":[{"$ref":"#/components/schemas/AttackerType"},{"type":"null"}]},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impact Rating"},"enabled":{"type":"boolean","title":"Enabled"},"sort_order":{"type":"integer","title":"Sort Order"},"bundle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bundle"},"packaged":{"type":"boolean","title":"Packaged"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","key","target","component_type","stride_category","title","attack_action","weakness","possible_measures","attacker_type","exposure_rating","exploitability_rating","impact_rating","enabled","sort_order","bundle","packaged","created_at","updated_at"],"title":"ThreatTemplateOut"},"ThreatTemplateReseedResult":{"properties":{"added":{"items":{"type":"string"},"type":"array","title":"Added"},"refreshed":{"items":{"type":"string"},"type":"array","title":"Refreshed"},"stale":{"items":{"type":"string"},"type":"array","title":"Stale"},"pruned":{"items":{"type":"string"},"type":"array","title":"Pruned"},"orphaned":{"items":{"type":"string"},"type":"array","title":"Orphaned"}},"type":"object","required":["added","refreshed","stale","pruned","orphaned"],"title":"ThreatTemplateReseedResult","description":"What a reseed pass changed, by template key."},"ThreatTemplateUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"attack_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attack Action"},"weakness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weakness"},"possible_measures":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Possible Measures"},"attacker_type":{"anyOf":[{"$ref":"#/components/schemas/AttackerType"},{"type":"null"}]},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ThreatTemplateUpdate","description":"What a superuser may change on a catalog row.\n\n``key``, ``target`` and ``stride_category`` are not editable: they are the\nrow's identity and what it applies to, and changing either would orphan the\nthreats already generated from it."},"ThreatUpdate":{"properties":{"sequence_number":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sequence Number"},"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"component_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Component Id"},"security_control_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Security Control Id"},"zone_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Zone Id"},"conduit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conduit Id"},"data_flow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Data Flow Id"},"attack_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attack Action"},"attacker_type":{"anyOf":[{"$ref":"#/components/schemas/AttackerType"},{"type":"null"}]},"weakness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Weakness"},"stride_category":{"anyOf":[{"$ref":"#/components/schemas/StrideCategory"},{"type":"null"}]},"exposure_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Comment"},"exposure_rating":{"anyOf":[{"$ref":"#/components/schemas/ExposureRating"},{"type":"null"}]},"exploitability_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploitability Comment"},"exploitability_rating":{"anyOf":[{"$ref":"#/components/schemas/ExploitabilityRating"},{"type":"null"}]},"impact_comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Comment"},"impact_rating":{"anyOf":[{"$ref":"#/components/schemas/ImpactLevel"},{"type":"null"}]},"possible_measures":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Possible Measures"},"general_comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"General Comments"},"catalog_source":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Catalog Source"}},"type":"object","title":"ThreatUpdate"},"Tm7ImportResult":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run"},"model_name":{"type":"string","title":"Model Name"},"diagrams":{"items":{"type":"string"},"type":"array","title":"Diagrams"},"threats_in_file":{"type":"integer","title":"Threats In File"},"threats_created":{"type":"integer","title":"Threats Created"},"threats_skipped_existing":{"type":"integer","title":"Threats Skipped Existing"},"threats_skipped_not_applicable":{"type":"integer","title":"Threats Skipped Not Applicable"},"components_created":{"type":"integer","title":"Components Created"},"components_matched":{"type":"integer","title":"Components Matched"},"zones_created":{"type":"integer","title":"Zones Created"},"zones_matched":{"type":"integer","title":"Zones Matched"},"conduits_created":{"type":"integer","title":"Conduits Created"},"conduits_matched":{"type":"integer","title":"Conduits Matched"},"data_flows_created":{"type":"integer","title":"Data Flows Created"},"unmapped_categories":{"items":{"type":"string"},"type":"array","title":"Unmapped Categories"},"threats":{"items":{"$ref":"#/components/schemas/Tm7ThreatPreview"},"type":"array","title":"Threats","default":[]}},"type":"object","required":["dry_run","model_name","diagrams","threats_in_file","threats_created","threats_skipped_existing","threats_skipped_not_applicable","components_created","components_matched","zones_created","zones_matched","conduits_created","conduits_matched","data_flows_created","unmapped_categories"],"title":"Tm7ImportResult","description":"What an import did — or, when ``dry_run`` was set, would do."},"Tm7ThreatPreview":{"properties":{"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"stride_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stride Category"},"component":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Component"},"priority":{"type":"string","title":"Priority"},"state":{"type":"string","title":"State"},"already_imported":{"type":"boolean","title":"Already Imported"}},"type":"object","required":["title","category","stride_category","component","priority","state","already_imported"],"title":"Tm7ThreatPreview","description":"One threat as it will appear in the list, for the confirmation dialog."},"TreatmentSummary":{"properties":{"by_progress":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Progress"},"overdue":{"type":"integer","title":"Overdue"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["by_progress","overdue","total"],"title":"TreatmentSummary"},"TreatmentType":{"type":"string","enum":["mitigate","accept","avoid","transfer"],"title":"TreatmentType"},"UpdateProfileRequest":{"properties":{"display_name":{"type":"string","maxLength":255,"minLength":1,"title":"Display Name"}},"type":"object","required":["display_name"],"title":"UpdateProfileRequest"},"UsageKind":{"type":"string","enum":["intended_purpose","foreseeable_use"],"title":"UsageKind"},"UsageStatementCreate":{"properties":{"kind":{"$ref":"#/components/schemas/UsageKind","default":"intended_purpose"},"ref_id":{"type":"string","maxLength":32,"minLength":1,"title":"Ref Id"},"text":{"type":"string","minLength":1,"title":"Text"}},"type":"object","required":["ref_id","text"],"title":"UsageStatementCreate"},"UsageStatementOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"kind":{"$ref":"#/components/schemas/UsageKind"},"ref_id":{"type":"string","title":"Ref Id"},"text":{"type":"string","title":"Text"}},"type":"object","required":["id","project_id","kind","ref_id","text"],"title":"UsageStatementOut"},"UsageStatementUpdate":{"properties":{"kind":{"anyOf":[{"$ref":"#/components/schemas/UsageKind"},{"type":"null"}]},"ref_id":{"anyOf":[{"type":"string","maxLength":32,"minLength":1},{"type":"null"}],"title":"Ref Id"},"text":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Text"}},"type":"object","title":"UsageStatementUpdate"},"UserOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"display_name":{"type":"string","title":"Display Name"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false},"email_verified":{"type":"boolean","title":"Email Verified","default":false}},"type":"object","required":["id","email","display_name","is_admin"],"title":"UserOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationStatus":{"type":"string","enum":["open","validated","rejected"],"title":"ValidationStatus"},"VerifyEmailRequest":{"properties":{"token":{"type":"string","maxLength":200,"minLength":1,"title":"Token"}},"type":"object","required":["token"],"title":"VerifyEmailRequest"},"VersionSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"version":{"type":"string","title":"Version"},"status":{"$ref":"#/components/schemas/ProjectStatus"},"predecessor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Predecessor Id"},"released_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Released At"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","version","status","predecessor_id","released_at","archived_at","created_at"],"title":"VersionSummary","description":"One entry in a product's version overview."},"WorkflowApprovalOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"approver_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Approver Id"},"approver_name":{"type":"string","title":"Approver Name"},"approver_role":{"type":"string","title":"Approver Role"},"decision":{"$ref":"#/components/schemas/ApprovalDecision"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"signature_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature Token"},"from_status":{"type":"string","title":"From Status"},"to_status":{"type":"string","title":"To Status"},"decided_at":{"type":"string","format":"date-time","title":"Decided At"}},"type":"object","required":["id","workflow_id","approver_id","approver_name","approver_role","decision","comment","signature_token","from_status","to_status","decided_at"],"title":"WorkflowApprovalOut"},"WorkflowBundle":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"type":"string","maxLength":32,"title":"Version","default":"1.0"},"standards":{"items":{"type":"string"},"type":"array","title":"Standards"},"single_requirements_page":{"type":"boolean","title":"Single Requirements Page","default":false},"lanes":{"items":{"type":"string"},"type":"array","title":"Lanes"},"roles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Roles"},"items":{"items":{"$ref":"#/components/schemas/BundleItem"},"type":"array","title":"Items"},"delegations":{"items":{"$ref":"#/components/schemas/BundleRequirementRef"},"type":"array","title":"Delegations"},"not_relevant":{"items":{"$ref":"#/components/schemas/BundleRequirementRef"},"type":"array","title":"Not Relevant"},"children":{"items":{"$ref":"#/components/schemas/WorkflowBundle"},"type":"array","title":"Children"}},"type":"object","required":["name"],"title":"WorkflowBundle","description":"Import payload. Extra envelope fields (schema/…) are ignored."},"WorkflowCloneRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"as_parent":{"type":"boolean","title":"As Parent","default":false}},"type":"object","title":"WorkflowCloneRequest"},"WorkflowCompletenessOut":{"properties":{"ready":{"type":"boolean","title":"Ready"},"issues":{"items":{"$ref":"#/components/schemas/WorkflowGapIssue"},"type":"array","title":"Issues"},"release_blockers":{"items":{"$ref":"#/components/schemas/WorkflowGapIssue"},"type":"array","title":"Release Blockers"},"can_release":{"type":"boolean","title":"Can Release"}},"type":"object","required":["ready","issues","release_blockers","can_release"],"title":"WorkflowCompletenessOut"},"WorkflowCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["name"],"title":"WorkflowCreate"},"WorkflowDecisionIn":{"properties":{"decision":{"$ref":"#/components/schemas/ApprovalDecision"},"comment":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Comment"}},"type":"object","required":["decision"],"title":"WorkflowDecisionIn"},"WorkflowGapIssue":{"properties":{"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"standard_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Standard Title"},"requirement_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Key"},"child_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Child Name"}},"type":"object","required":["code","title"],"title":"WorkflowGapIssue","description":"A release/completeness issue. Usually an in-scope required requirement\nthat is neither covered nor delegated (``code == \"open_gap\"``), but also the\nchild-delegation blockers (``child_not_released`` / ``child_missing_delegation``)\nwhere the standard/requirement fields may be absent and ``child_name`` is set."},"WorkflowImportResult":{"properties":{"workflow":{"$ref":"#/components/schemas/WorkflowOut"},"warnings":{"$ref":"#/components/schemas/WorkflowImportWarnings"}},"type":"object","required":["workflow","warnings"],"title":"WorkflowImportResult"},"WorkflowImportWarnings":{"properties":{"missing_standards":{"items":{"type":"string"},"type":"array","title":"Missing Standards"},"skipped_assignments":{"type":"integer","title":"Skipped Assignments","default":0},"skipped_delegations":{"type":"integer","title":"Skipped Delegations","default":0},"skipped_not_relevant":{"type":"integer","title":"Skipped Not Relevant","default":0},"skipped_gate_checks":{"type":"integer","title":"Skipped Gate Checks","default":0}},"type":"object","title":"WorkflowImportWarnings","description":"What the importer could not fully resolve against the org library."},"WorkflowLaneCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"WorkflowLaneCreate"},"WorkflowLaneOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"name":{"type":"string","title":"Name"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","workflow_id","name","sort_order"],"title":"WorkflowLaneOut"},"WorkflowLaneUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"WorkflowLaneUpdate"},"WorkflowLibraryEntry":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"standards":{"items":{"type":"string"},"type":"array","title":"Standards"},"children":{"type":"integer","title":"Children","default":0}},"type":"object","required":["key","name"],"title":"WorkflowLibraryEntry","description":"A bundled workflow template, listed in the import-from-library picker."},"WorkflowOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","format":"uuid","title":"Organization Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"type":"string","title":"Version"},"status":{"type":"string","title":"Status"},"released_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Released At"},"released_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Released By"},"predecessor_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Predecessor Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"single_requirements_page":{"type":"boolean","title":"Single Requirements Page"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","organization_id","name","description","version","status","released_at","released_by","predecessor_id","parent_id","single_requirements_page","created_by","created_at","updated_at"],"title":"WorkflowOut"},"WorkflowReleaseIn":{"properties":{"version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Version"}},"type":"object","title":"WorkflowReleaseIn"},"WorkflowReportOut":{"properties":{"parts":{"items":{"$ref":"#/components/schemas/WorkflowReportPart"},"type":"array","title":"Parts"}},"type":"object","required":["parts"],"title":"WorkflowReportOut"},"WorkflowReportPart":{"properties":{"workflow":{"$ref":"#/components/schemas/WorkflowOut"},"items":{"items":{"$ref":"#/components/schemas/SdlcItemOut"},"type":"array","title":"Items"},"gate_checks":{"items":{"$ref":"#/components/schemas/GateChecklistItemOut"},"type":"array","title":"Gate Checks"},"roles":{"items":{"$ref":"#/components/schemas/WorkflowRoleOut"},"type":"array","title":"Roles"},"lanes":{"items":{"$ref":"#/components/schemas/WorkflowLaneOut"},"type":"array","title":"Lanes"},"coverage":{"$ref":"#/components/schemas/CoverageOut"}},"type":"object","required":["workflow","items","gate_checks","roles","lanes","coverage"],"title":"WorkflowReportPart","description":"Everything the document prints about one workflow of the program."},"WorkflowRoleCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"WorkflowRoleCreate"},"WorkflowRoleOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"name":{"type":"string","title":"Name"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","workflow_id","name","sort_order"],"title":"WorkflowRoleOut"},"WorkflowRoleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"WorkflowRoleUpdate"},"WorkflowRollupOut":{"properties":{"children":{"items":{"$ref":"#/components/schemas/RollupChild"},"type":"array","title":"Children"},"summary":{"$ref":"#/components/schemas/CoverageSummary"},"roles":{"items":{"$ref":"#/components/schemas/RollupRole"},"type":"array","title":"Roles"},"unassigned_activities":{"type":"integer","title":"Unassigned Activities"}},"type":"object","required":["children","summary","roles","unassigned_activities"],"title":"WorkflowRollupOut"},"WorkflowSignatureVerifyOut":{"properties":{"has_approval":{"type":"boolean","title":"Has Approval"},"matches":{"type":"boolean","title":"Matches"},"approved_signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved Signature"},"current_signature":{"type":"string","title":"Current Signature"}},"type":"object","required":["has_approval","matches","approved_signature","current_signature"],"title":"WorkflowSignatureVerifyOut"},"WorkflowStandardOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"title":{"type":"string","title":"Title"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"}},"type":"object","required":["id","key","title","version"],"title":"WorkflowStandardOut","description":"A standard that is in scope for a plan (echoes the org standard basics)."},"WorkflowSubmitOut":{"properties":{"status":{"type":"string","title":"Status"},"issues":{"items":{"$ref":"#/components/schemas/WorkflowGapIssue"},"type":"array","title":"Issues"}},"type":"object","required":["status","issues"],"title":"WorkflowSubmitOut"},"WorkflowUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"single_requirements_page":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Single Requirements Page"}},"type":"object","title":"WorkflowUpdate"},"WorkflowVersionSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"version":{"type":"string","title":"Version"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","version","status","created_at"],"title":"WorkflowVersionSummary"},"WorkshopSessionCreate":{"properties":{"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Time"},"location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location"},"moderator":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Moderator"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"WorkshopSessionCreate"},"WorkshopSessionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"moderator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Moderator"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id","project_id","date","time","location","moderator","notes"],"title":"WorkshopSessionOut"},"WorkshopSessionUpdate":{"properties":{"date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"},"time":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Time"},"location":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Location"},"moderator":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Moderator"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"WorkshopSessionUpdate"},"ZoneCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"canvas_width":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Canvas Width"},"canvas_height":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Canvas Height"}},"type":"object","required":["name"],"title":"ZoneCreate"},"ZoneOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sl_target":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sl Target"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"canvas_width":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Width"},"canvas_height":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Height"}},"type":"object","required":["id","project_id","name","description","sl_target","external_ref","canvas_x","canvas_y","canvas_width","canvas_height"],"title":"ZoneOut"},"ZoneUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sl_target":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sl Target"},"canvas_x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas X"},"canvas_y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Canvas Y"},"canvas_width":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Canvas Width"},"canvas_height":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Canvas Height"}},"type":"object","title":"ZoneUpdate"}}}}