{
  "components": {
    "schemas": {
      "ADRCardLink": {
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          }
        },
        "required": [
          "card_id"
        ],
        "title": "ADRCardLink",
        "type": "object"
      },
      "ADRCreate": {
        "additionalProperties": false,
        "properties": {
          "alternatives_considered": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alternatives Considered"
          },
          "consequences": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Consequences"
          },
          "context": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context"
          },
          "decision": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decision"
          },
          "linked_card_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Linked Card Ids"
          },
          "related_decisions": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Related Decisions",
            "type": "array"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "ADRCreate",
        "type": "object"
      },
      "ADRRejectRequest": {
        "properties": {
          "comment": {
            "title": "Comment",
            "type": "string"
          }
        },
        "required": [
          "comment"
        ],
        "title": "ADRRejectRequest",
        "type": "object"
      },
      "ADRSignRequest": {
        "additionalProperties": false,
        "properties": {
          "comment": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Comment"
          }
        },
        "title": "ADRSignRequest",
        "type": "object"
      },
      "ADRSignatureRequest": {
        "properties": {
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "user_ids": {
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "title": "User Ids",
            "type": "array"
          }
        },
        "required": [
          "user_ids"
        ],
        "title": "ADRSignatureRequest",
        "type": "object"
      },
      "ADRUpdate": {
        "additionalProperties": false,
        "properties": {
          "alternatives_considered": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alternatives Considered"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "consequences": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Consequences"
          },
          "context": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context"
          },
          "decision": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decision"
          },
          "linked_card_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Linked Card Ids"
          },
          "related_decisions": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Related Decisions"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 500,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "ADRUpdate",
        "type": "object"
      },
      "AiFieldSuggestion": {
        "properties": {
          "confidence": {
            "default": 0.0,
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Confidence",
            "type": "number"
          },
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source"
          },
          "value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Value"
          }
        },
        "title": "AiFieldSuggestion",
        "type": "object"
      },
      "AiSettingsPayload": {
        "properties": {
          "api_key": {
            "default": "",
            "title": "Api Key",
            "type": "string"
          },
          "api_version": {
            "default": "2025-01-01",
            "title": "Api Version",
            "type": "string"
          },
          "enabled": {
            "default": false,
            "title": "Enabled",
            "type": "boolean"
          },
          "enabled_types": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Enabled Types",
            "type": "array"
          },
          "model": {
            "default": "",
            "title": "Model",
            "type": "string"
          },
          "portfolio_insights_enabled": {
            "default": false,
            "title": "Portfolio Insights Enabled",
            "type": "boolean"
          },
          "provider_type": {
            "default": "ollama",
            "title": "Provider Type",
            "type": "string"
          },
          "provider_url": {
            "default": "",
            "title": "Provider Url",
            "type": "string"
          },
          "search_provider": {
            "default": "duckduckgo",
            "title": "Search Provider",
            "type": "string"
          },
          "search_url": {
            "default": "",
            "title": "Search Url",
            "type": "string"
          }
        },
        "title": "AiSettingsPayload",
        "type": "object"
      },
      "AiSourceRef": {
        "properties": {
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "title": "AiSourceRef",
        "type": "object"
      },
      "AiSuggestRequest": {
        "properties": {
          "context": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Context"
          },
          "name": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "maxLength": 100,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type_key": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Type Key",
            "type": "string"
          }
        },
        "required": [
          "type_key",
          "name"
        ],
        "title": "AiSuggestRequest",
        "type": "object"
      },
      "AiSuggestResponse": {
        "properties": {
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "search_provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Search Provider"
          },
          "sources": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AiSourceRef"
            },
            "title": "Sources",
            "type": "array"
          },
          "suggestions": {
            "additionalProperties": {
              "$ref": "#/components/schemas/AiFieldSuggestion"
            },
            "default": {},
            "title": "Suggestions",
            "type": "object"
          }
        },
        "title": "AiSuggestResponse",
        "type": "object"
      },
      "AnnounceUpgradesEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "AnnounceUpgradesEnabledPayload",
        "type": "object"
      },
      "AppTitlePayload": {
        "properties": {
          "app_title": {
            "default": "",
            "maxLength": 64,
            "title": "App Title",
            "type": "string"
          }
        },
        "title": "AppTitlePayload",
        "type": "object"
      },
      "ApplyBody": {
        "properties": {
          "response_ids": {
            "items": {
              "type": "string"
            },
            "title": "Response Ids",
            "type": "array"
          }
        },
        "required": [
          "response_ids"
        ],
        "title": "ApplyBody",
        "type": "object"
      },
      "ApplyInstallIn": {
        "description": "Optional apply-time flags. The body may be omitted entirely.",
        "properties": {
          "confirm_downgrade": {
            "default": false,
            "title": "Confirm Downgrade",
            "type": "boolean"
          }
        },
        "title": "ApplyInstallIn",
        "type": "object"
      },
      "ArchiveImpactCardRef": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type"
        ],
        "title": "ArchiveImpactCardRef",
        "type": "object"
      },
      "ArchiveImpactChild": {
        "properties": {
          "approval_status": {
            "default": "DRAFT",
            "title": "Approval Status",
            "type": "string"
          },
          "descendants_count": {
            "default": 0,
            "title": "Descendants Count",
            "type": "integer"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type"
        ],
        "title": "ArchiveImpactChild",
        "type": "object"
      },
      "ArchiveImpactRelatedCard": {
        "properties": {
          "direction": {
            "enum": [
              "outgoing",
              "incoming"
            ],
            "title": "Direction",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "relation_id": {
            "title": "Relation Id",
            "type": "string"
          },
          "relation_label": {
            "title": "Relation Label",
            "type": "string"
          },
          "relation_type_key": {
            "title": "Relation Type Key",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "relation_id",
          "relation_type_key",
          "relation_label",
          "direction"
        ],
        "title": "ArchiveImpactRelatedCard",
        "type": "object"
      },
      "ArchiveImpactResponse": {
        "properties": {
          "approved_descendant_count": {
            "title": "Approved Descendant Count",
            "type": "integer"
          },
          "child_count": {
            "title": "Child Count",
            "type": "integer"
          },
          "children": {
            "items": {
              "$ref": "#/components/schemas/ArchiveImpactChild"
            },
            "title": "Children",
            "type": "array"
          },
          "descendant_count": {
            "title": "Descendant Count",
            "type": "integer"
          },
          "grandparent": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ArchiveImpactCardRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "related_cards": {
            "items": {
              "$ref": "#/components/schemas/ArchiveImpactRelatedCard"
            },
            "title": "Related Cards",
            "type": "array"
          }
        },
        "required": [
          "child_count",
          "descendant_count",
          "approved_descendant_count",
          "children",
          "related_cards"
        ],
        "title": "ArchiveImpactResponse",
        "type": "object"
      },
      "ArchiveRetentionPayload": {
        "properties": {
          "days": {
            "title": "Days",
            "type": "integer"
          }
        },
        "required": [
          "days"
        ],
        "title": "ArchiveRetentionPayload",
        "type": "object"
      },
      "AutoMappedColumn": {
        "description": "One source-platform column that the parser auto-routes to a TEA slot.\n\nSourced from the adapter's ``auto_mapped_columns`` table. Surfaced\nverbatim in the admin's \"Map imported fields\" tab so the admin can\nsee at a glance which native columns are already handled and don't\nneed an entry in the per-field list.",
        "properties": {
          "source_column": {
            "title": "Source Column",
            "type": "string"
          },
          "tea_target": {
            "title": "Tea Target",
            "type": "string"
          }
        },
        "required": [
          "source_column",
          "tea_target"
        ],
        "title": "AutoMappedColumn",
        "type": "object"
      },
      "Body_import_bpmn_api_v1_bpm_processes__process_id__diagram_import_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_import_bpmn_api_v1_bpm_processes__process_id__diagram_import_post",
        "type": "object"
      },
      "Body_replace_file_attachment_api_v1_file_attachments__attachment_id__content_put": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_replace_file_attachment_api_v1_file_attachments__attachment_id__content_put",
        "type": "object"
      },
      "Body_upload_bundle_api_v1_admin_extensions_install_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_upload_bundle_api_v1_admin_extensions_install_post",
        "type": "object"
      },
      "Body_upload_card_logo_api_v1_cards__card_id__logo_post": {
        "properties": {
          "file": {
            "anyOf": [
              {
                "contentMediaType": "application/octet-stream",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "File"
          },
          "icon_slug": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon Slug"
          }
        },
        "title": "Body_upload_card_logo_api_v1_cards__card_id__logo_post",
        "type": "object"
      },
      "Body_upload_favicon_api_v1_settings_favicon_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_upload_favicon_api_v1_settings_favicon_post",
        "type": "object"
      },
      "Body_upload_file_attachment_api_v1_cards__card_id__file_attachments_post": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_upload_file_attachment_api_v1_cards__card_id__file_attachments_post",
        "type": "object"
      },
      "Body_upload_logo_api_v1_settings_logo_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_upload_logo_api_v1_settings_logo_post",
        "type": "object"
      },
      "Body_upload_snapshot_api_v1_migration_upload_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          },
          "include_archived": {
            "default": false,
            "title": "Include Archived",
            "type": "boolean"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "source_key": {
            "description": "Registered source adapter key (e.g. 'leanix')",
            "title": "Source Key",
            "type": "string"
          }
        },
        "required": [
          "source_key",
          "name",
          "file"
        ],
        "title": "Body_upload_snapshot_api_v1_migration_upload_post",
        "type": "object"
      },
      "Body_upload_workspace_api_v1_admin_workspace_import_post": {
        "properties": {
          "file": {
            "contentMediaType": "application/octet-stream",
            "title": "File",
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "title": "Body_upload_workspace_api_v1_admin_workspace_import_post",
        "type": "object"
      },
      "BookmarkCreate": {
        "properties": {
          "card_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Type"
          },
          "column_filter_model": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column Filter Model"
          },
          "column_state": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column State"
          },
          "columns": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Columns"
          },
          "filters": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filters"
          },
          "is_default": {
            "default": false,
            "title": "Is Default",
            "type": "boolean"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "odata_enabled": {
            "default": false,
            "title": "Odata Enabled",
            "type": "boolean"
          },
          "shared_with": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/BookmarkShareEntry"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shared With"
          },
          "sort": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort"
          },
          "visibility": {
            "default": "private",
            "title": "Visibility",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "BookmarkCreate",
        "type": "object"
      },
      "BookmarkShareEntry": {
        "properties": {
          "can_edit": {
            "default": false,
            "title": "Can Edit",
            "type": "boolean"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "user_id"
        ],
        "title": "BookmarkShareEntry",
        "type": "object"
      },
      "BookmarkUpdate": {
        "properties": {
          "card_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Type"
          },
          "column_filter_model": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column Filter Model"
          },
          "column_state": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Column State"
          },
          "columns": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Columns"
          },
          "filters": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filters"
          },
          "is_default": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Default"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "odata_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Odata Enabled"
          },
          "shared_with": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/BookmarkShareEntry"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shared With"
          },
          "sort": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort"
          },
          "visibility": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Visibility"
          }
        },
        "title": "BookmarkUpdate",
        "type": "object"
      },
      "BpmEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "BpmEnabledPayload",
        "type": "object"
      },
      "BpmPublicFlow": {
        "description": "The published BPMN flow for one in-scope process.\n\n``bpmn_xml`` is ``None`` and ``steps`` empty when the process has no\npublished version \u2014 including when it has only drafts, only archived or\nwithdrawn revisions, or only a legacy ``process_diagrams`` row. That is not\nan error: the House marks such a process as having no flow, and the drawer\nrenders its empty state.",
        "properties": {
          "bpmn_xml": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bpmn Xml"
          },
          "published_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Published At"
          },
          "revision": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revision"
          },
          "steps": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BpmPublicStep"
            },
            "title": "Steps",
            "type": "array"
          },
          "svg_thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Svg Thumbnail"
          }
        },
        "title": "BpmPublicFlow",
        "type": "object"
      },
      "BpmPublicProcess": {
        "description": "One node of the published Process House.\n\n``parent_id`` shares the id space with ``id`` so the client's ``buildTree``\nstill assembles the hierarchy. A process whose parent is out of the portal's\nscope simply becomes a root \u2014 the same re-rooting the authenticated\nnavigator already does for a filtered tree.",
        "properties": {
          "attributes": {
            "additionalProperties": true,
            "default": {},
            "title": "Attributes",
            "type": "object"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "has_flow": {
            "default": false,
            "title": "Has Flow",
            "type": "boolean"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "lifecycle": {
            "additionalProperties": true,
            "default": {},
            "title": "Lifecycle",
            "type": "object"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "org_tokens": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Org Tokens",
            "type": "array"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "step_count": {
            "default": 0,
            "title": "Step Count",
            "type": "integer"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "BpmPublicProcess",
        "type": "object"
      },
      "BpmPublicProcessMap": {
        "description": "Everything the published Process House needs, in one round-trip.\n\n``row_order`` rides along rather than being a second request. It is served\nby ``GET /settings/bpm-row-order``, which happens to be unauthenticated\ntoday, but a portal must not depend on another route's incidental\npublic-ness \u2014 and one round-trip is the posture the PPM board set.",
        "properties": {
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BpmPublicProcess"
            },
            "title": "Items",
            "type": "array"
          },
          "organizations": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BpmPublicRef"
            },
            "title": "Organizations",
            "type": "array"
          },
          "row_order": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Row Order",
            "type": "array"
          }
        },
        "title": "BpmPublicProcessMap",
        "type": "object"
      },
      "BpmPublicRef": {
        "description": "A named thing referenced by an opaque, per-response token.\n\nUsed for Organizations, which the House's organization filter matches on\nclient-side within a single payload \u2014 so the token only has to be stable\nfor the life of one response, and a real card id would be published for\nnothing.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token",
          "name"
        ],
        "title": "BpmPublicRef",
        "type": "object"
      },
      "BpmPublicStep": {
        "description": "One step of a published BPMN flow.\n\n``bpmn_element_id`` is an id local to the BPMN XML, not a card id, and it is\nthe correlation key the viewer needs to place overlays \u2014 it is already\ninside the XML the visitor is holding.\n\nThe five link fields are populated only when the portal enables\n``show_element_links``; they carry **names, never ids**. The viewer's and the\nSteps tab's existing truthiness guards then render the reduced row with no\nextra branching.",
        "properties": {
          "application_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Application Name"
          },
          "bpmn_element_id": {
            "title": "Bpmn Element Id",
            "type": "string"
          },
          "called_process_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Called Process Name"
          },
          "data_object_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Object Name"
          },
          "definition_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Definition Name"
          },
          "documentation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Documentation"
          },
          "element_type": {
            "title": "Element Type",
            "type": "string"
          },
          "event_definition_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Event Definition Type"
          },
          "is_automated": {
            "default": false,
            "title": "Is Automated",
            "type": "boolean"
          },
          "it_component_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "It Component Name"
          },
          "lane_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lane Name"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "organizations": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/BpmPublicRef"
            },
            "title": "Organizations",
            "type": "array"
          },
          "sequence_order": {
            "default": 0,
            "title": "Sequence Order",
            "type": "integer"
          }
        },
        "required": [
          "bpmn_element_id",
          "element_type"
        ],
        "title": "BpmPublicStep",
        "type": "object"
      },
      "BpmRowOrderPayload": {
        "properties": {
          "row_order": {
            "items": {
              "type": "string"
            },
            "title": "Row Order",
            "type": "array"
          }
        },
        "required": [
          "row_order"
        ],
        "title": "BpmRowOrderPayload",
        "type": "object"
      },
      "CalculationCreate": {
        "properties": {
          "blanks_as_zero": {
            "default": false,
            "title": "Blanks As Zero",
            "type": "boolean"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "execution_order": {
            "default": 0,
            "title": "Execution Order",
            "type": "integer"
          },
          "formula": {
            "maxLength": 5000,
            "title": "Formula",
            "type": "string"
          },
          "name": {
            "maxLength": 300,
            "title": "Name",
            "type": "string"
          },
          "target_field_key": {
            "maxLength": 200,
            "title": "Target Field Key",
            "type": "string"
          },
          "target_type_key": {
            "maxLength": 100,
            "title": "Target Type Key",
            "type": "string"
          }
        },
        "required": [
          "name",
          "target_type_key",
          "target_field_key",
          "formula"
        ],
        "title": "CalculationCreate",
        "type": "object"
      },
      "CalculationResponse": {
        "properties": {
          "blanks_as_zero": {
            "default": false,
            "title": "Blanks As Zero",
            "type": "boolean"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "execution_order": {
            "title": "Execution Order",
            "type": "integer"
          },
          "formula": {
            "title": "Formula",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "last_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Error"
          },
          "last_run_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Run At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "target_field_key": {
            "title": "Target Field Key",
            "type": "string"
          },
          "target_type_key": {
            "title": "Target Type Key",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "title": "Warnings",
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "target_type_key",
          "target_field_key",
          "formula",
          "is_active",
          "execution_order"
        ],
        "title": "CalculationResponse",
        "type": "object"
      },
      "CalculationUpdate": {
        "properties": {
          "blanks_as_zero": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Blanks As Zero"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "execution_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Execution Order"
          },
          "formula": {
            "anyOf": [
              {
                "maxLength": 5000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Formula"
          },
          "name": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "target_field_key": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Field Key"
          },
          "target_type_key": {
            "anyOf": [
              {
                "maxLength": 100,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Type Key"
          }
        },
        "title": "CalculationUpdate",
        "type": "object"
      },
      "CardArchiveRequest": {
        "properties": {
          "cascade_all_related": {
            "default": false,
            "title": "Cascade All Related",
            "type": "boolean"
          },
          "child_strategy": {
            "anyOf": [
              {
                "enum": [
                  "cascade",
                  "disconnect",
                  "reparent"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Child Strategy"
          },
          "related_card_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 200,
            "title": "Related Card Ids",
            "type": "array"
          }
        },
        "title": "CardArchiveRequest",
        "type": "object"
      },
      "CardArchiveResponse": {
        "properties": {
          "affected_children_ids": {
            "items": {
              "type": "string"
            },
            "title": "Affected Children Ids",
            "type": "array"
          },
          "affected_related_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Affected Related Card Ids",
            "type": "array"
          },
          "primary": {
            "$ref": "#/components/schemas/CardResponse"
          }
        },
        "required": [
          "primary",
          "affected_children_ids",
          "affected_related_card_ids"
        ],
        "title": "CardArchiveResponse",
        "type": "object"
      },
      "CardBulkArchiveRequest": {
        "properties": {
          "card_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "minItems": 1,
            "title": "Card Ids",
            "type": "array"
          },
          "cascade_all_related": {
            "default": false,
            "title": "Cascade All Related",
            "type": "boolean"
          },
          "child_strategy": {
            "anyOf": [
              {
                "enum": [
                  "cascade",
                  "disconnect",
                  "reparent"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Child Strategy"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          }
        },
        "required": [
          "card_ids"
        ],
        "title": "CardBulkArchiveRequest",
        "type": "object"
      },
      "CardBulkArchiveResponse": {
        "properties": {
          "archived_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Archived Card Ids",
            "type": "array"
          },
          "cascaded_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Cascaded Card Ids",
            "type": "array"
          },
          "requested": {
            "title": "Requested",
            "type": "integer"
          },
          "skipped": {
            "items": {
              "$ref": "#/components/schemas/CardBulkSkippedEntry"
            },
            "title": "Skipped",
            "type": "array"
          }
        },
        "required": [
          "requested",
          "archived_card_ids",
          "cascaded_card_ids",
          "skipped"
        ],
        "title": "CardBulkArchiveResponse",
        "type": "object"
      },
      "CardBulkCreateItem": {
        "description": "One row of a bulk-create request. Mirrors `CardCreate` plus an\noptional parent reference + a stable `row_index` so the caller can\npair the response back to its spreadsheet row.\n\nEither `parent_id` (UUID) or `parent_ref` may be supplied \u2014 never both.\nServer-side topological sort handles parents that are themselves rows\nin the same request (referenced by `parent_ref` and the row's own\n`(parent_path, name)` identity).",
        "properties": {
          "alias": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alias"
          },
          "approval_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approval Status"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "external_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Id"
          },
          "lifecycle": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lifecycle"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "parent_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Label"
          },
          "parent_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Name"
          },
          "parent_path": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Path"
          },
          "row_index": {
            "title": "Row Index",
            "type": "integer"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "row_index",
          "type",
          "name"
        ],
        "title": "CardBulkCreateItem",
        "type": "object"
      },
      "CardBulkCreateRequest": {
        "properties": {
          "cards": {
            "items": {
              "$ref": "#/components/schemas/CardBulkCreateItem"
            },
            "maxItems": 2000,
            "minItems": 1,
            "title": "Cards",
            "type": "array"
          },
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          }
        },
        "required": [
          "cards"
        ],
        "title": "CardBulkCreateRequest",
        "type": "object"
      },
      "CardBulkCreateResponse": {
        "properties": {
          "created": {
            "title": "Created",
            "type": "integer"
          },
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "failed": {
            "title": "Failed",
            "type": "integer"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/CardBulkCreateResult"
            },
            "title": "Results",
            "type": "array"
          }
        },
        "required": [
          "results",
          "created",
          "failed"
        ],
        "title": "CardBulkCreateResponse",
        "type": "object"
      },
      "CardBulkCreateResult": {
        "description": "Per-row outcome. `id` is set on success, `error` on failure.",
        "properties": {
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "row_index": {
            "title": "Row Index",
            "type": "integer"
          },
          "status": {
            "enum": [
              "created",
              "failed"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "row_index",
          "status"
        ],
        "title": "CardBulkCreateResult",
        "type": "object"
      },
      "CardBulkDeleteRequest": {
        "properties": {
          "card_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "minItems": 1,
            "title": "Card Ids",
            "type": "array"
          },
          "cascade_all_related": {
            "default": false,
            "title": "Cascade All Related",
            "type": "boolean"
          },
          "child_strategy": {
            "anyOf": [
              {
                "enum": [
                  "cascade",
                  "disconnect",
                  "reparent"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Child Strategy"
          }
        },
        "required": [
          "card_ids"
        ],
        "title": "CardBulkDeleteRequest",
        "type": "object"
      },
      "CardBulkDeleteResponse": {
        "properties": {
          "cascaded_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Cascaded Card Ids",
            "type": "array"
          },
          "deleted_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Deleted Card Ids",
            "type": "array"
          },
          "requested": {
            "title": "Requested",
            "type": "integer"
          },
          "skipped": {
            "items": {
              "$ref": "#/components/schemas/CardBulkDeleteSkippedEntry"
            },
            "title": "Skipped",
            "type": "array"
          }
        },
        "required": [
          "requested",
          "deleted_card_ids",
          "cascaded_card_ids",
          "skipped"
        ],
        "title": "CardBulkDeleteResponse",
        "type": "object"
      },
      "CardBulkDeleteSkippedEntry": {
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "reason": {
            "const": "not_found",
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "card_id",
          "reason"
        ],
        "title": "CardBulkDeleteSkippedEntry",
        "type": "object"
      },
      "CardBulkRestoreRequest": {
        "properties": {
          "card_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 10000,
            "minItems": 1,
            "title": "Card Ids",
            "type": "array"
          }
        },
        "required": [
          "card_ids"
        ],
        "title": "CardBulkRestoreRequest",
        "type": "object"
      },
      "CardBulkRestoreResponse": {
        "properties": {
          "requested": {
            "title": "Requested",
            "type": "integer"
          },
          "restored_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Restored Card Ids",
            "type": "array"
          },
          "skipped": {
            "items": {
              "$ref": "#/components/schemas/CardBulkRestoreSkippedEntry"
            },
            "title": "Skipped",
            "type": "array"
          }
        },
        "required": [
          "requested",
          "restored_card_ids",
          "skipped"
        ],
        "title": "CardBulkRestoreResponse",
        "type": "object"
      },
      "CardBulkRestoreSkippedEntry": {
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "reason": {
            "enum": [
              "already_active",
              "not_found"
            ],
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "card_id",
          "reason"
        ],
        "title": "CardBulkRestoreSkippedEntry",
        "type": "object"
      },
      "CardBulkSkippedEntry": {
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "reason": {
            "enum": [
              "already_archived",
              "not_found"
            ],
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "card_id",
          "reason"
        ],
        "title": "CardBulkSkippedEntry",
        "type": "object"
      },
      "CardBulkUpdate": {
        "properties": {
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "ids": {
            "items": {
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          },
          "updates": {
            "$ref": "#/components/schemas/CardUpdate"
          }
        },
        "required": [
          "ids",
          "updates"
        ],
        "title": "CardBulkUpdate",
        "type": "object"
      },
      "CardCountsResponse": {
        "properties": {
          "by_type": {
            "items": {
              "$ref": "#/components/schemas/CardTypeCount"
            },
            "title": "By Type",
            "type": "array"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "by_type",
          "total"
        ],
        "title": "CardCountsResponse",
        "type": "object"
      },
      "CardCreate": {
        "properties": {
          "alias": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alias"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "external_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Id"
          },
          "lifecycle": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lifecycle"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "parent_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Label"
          },
          "strict_attributes": {
            "default": false,
            "title": "Strict Attributes",
            "type": "boolean"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "name"
        ],
        "title": "CardCreate",
        "type": "object"
      },
      "CardDeleteRequest": {
        "properties": {
          "cascade_all_related": {
            "default": false,
            "title": "Cascade All Related",
            "type": "boolean"
          },
          "child_strategy": {
            "anyOf": [
              {
                "enum": [
                  "cascade",
                  "disconnect",
                  "reparent"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Child Strategy"
          },
          "related_card_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 200,
            "title": "Related Card Ids",
            "type": "array"
          }
        },
        "title": "CardDeleteRequest",
        "type": "object"
      },
      "CardDeleteResponse": {
        "properties": {
          "affected_children_ids": {
            "items": {
              "type": "string"
            },
            "title": "Affected Children Ids",
            "type": "array"
          },
          "affected_related_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Affected Related Card Ids",
            "type": "array"
          },
          "deleted_card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Deleted Card Ids",
            "type": "array"
          }
        },
        "required": [
          "deleted_card_ids",
          "affected_children_ids",
          "affected_related_card_ids"
        ],
        "title": "CardDeleteResponse",
        "type": "object"
      },
      "CardListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/CardResponse"
            },
            "title": "Items",
            "type": "array"
          },
          "page": {
            "title": "Page",
            "type": "integer"
          },
          "page_size": {
            "title": "Page Size",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          },
          "withheld_ids": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Withheld Ids",
            "type": "array"
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "CardListResponse",
        "type": "object"
      },
      "CardRef": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "type",
          "name"
        ],
        "title": "CardRef",
        "type": "object"
      },
      "CardRefCandidate": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "path": {
            "title": "Path",
            "type": "string"
          }
        },
        "required": [
          "id",
          "path"
        ],
        "title": "CardRefCandidate",
        "type": "object"
      },
      "CardRefInput": {
        "description": "One ref to resolve, with `row` / `column` echoed back so the caller\ncan pin the result to the originating spreadsheet cell.\n\n`ref` is the user-typed string (`\"NexaCore ERP\"` or\n`\"Sales / Customer Mgmt / CRM\"`, using the same escape rules as\n`parent_path`). `type` is the expected card type for the lookup \u2014\ninferred by the importer from the relation type's `target_type_key`\n(for relation cells) or from the row's own `type` column (for parent\nrefs).",
        "properties": {
          "column": {
            "title": "Column",
            "type": "string"
          },
          "ref": {
            "title": "Ref",
            "type": "string"
          },
          "row": {
            "title": "Row",
            "type": "integer"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "row",
          "column",
          "type",
          "ref"
        ],
        "title": "CardRefInput",
        "type": "object"
      },
      "CardRefResolveRequest": {
        "properties": {
          "refs": {
            "items": {
              "$ref": "#/components/schemas/CardRefInput"
            },
            "maxItems": 5000,
            "title": "Refs",
            "type": "array"
          }
        },
        "required": [
          "refs"
        ],
        "title": "CardRefResolveRequest",
        "type": "object"
      },
      "CardRefResolveResponse": {
        "properties": {
          "results": {
            "items": {
              "$ref": "#/components/schemas/CardRefResolveResult"
            },
            "title": "Results",
            "type": "array"
          }
        },
        "required": [
          "results"
        ],
        "title": "CardRefResolveResponse",
        "type": "object"
      },
      "CardRefResolveResult": {
        "properties": {
          "candidates": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CardRefCandidate"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Candidates"
          },
          "column": {
            "title": "Column",
            "type": "string"
          },
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "row": {
            "title": "Row",
            "type": "integer"
          },
          "status": {
            "enum": [
              "resolved",
              "ambiguous",
              "missing"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "row",
          "column",
          "status"
        ],
        "title": "CardRefResolveResult",
        "type": "object"
      },
      "CardRelationSummaryEntry": {
        "description": "One row of the relation-summary endpoint \u2014 counts neighbours per\nrelation-type / direction so the diagram editor can render LeanIX-style\nShow Dependency / Drill-Down / Roll-Up submenus with live counts.",
        "properties": {
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "direction": {
            "title": "Direction",
            "type": "string"
          },
          "label": {
            "title": "Label",
            "type": "string"
          },
          "peer_type_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Peer Type Key"
          },
          "relation_type_key": {
            "title": "Relation Type Key",
            "type": "string"
          }
        },
        "required": [
          "relation_type_key",
          "label",
          "direction",
          "count"
        ],
        "title": "CardRelationSummaryEntry",
        "type": "object"
      },
      "CardRelationSummaryHierarchy": {
        "description": "Hierarchy snapshot returned alongside relation counts so the diagram\neditor can enable/disable the Drill-Down + Roll-Up menu sections without\na second fetch.",
        "properties": {
          "children_count": {
            "title": "Children Count",
            "type": "integer"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "parent_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Label"
          },
          "parent_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Name"
          },
          "parent_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Type"
          }
        },
        "required": [
          "children_count"
        ],
        "title": "CardRelationSummaryHierarchy",
        "type": "object"
      },
      "CardRelationSummaryResponse": {
        "properties": {
          "by_type": {
            "items": {
              "$ref": "#/components/schemas/CardRelationSummaryEntry"
            },
            "title": "By Type",
            "type": "array"
          },
          "hierarchy": {
            "$ref": "#/components/schemas/CardRelationSummaryHierarchy"
          }
        },
        "required": [
          "by_type",
          "hierarchy"
        ],
        "title": "CardRelationSummaryResponse",
        "type": "object"
      },
      "CardResponse": {
        "properties": {
          "alias": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alias"
          },
          "approval_status": {
            "title": "Approval Status",
            "type": "string"
          },
          "archived_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived At"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "data_quality": {
            "title": "Data Quality",
            "type": "number"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "external_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Id"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "lifecycle": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lifecycle"
          },
          "logo_updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Updated At"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "parent_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Label"
          },
          "reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference"
          },
          "stakeholders": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/StakeholderRef"
            },
            "title": "Stakeholders",
            "type": "array"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "tags": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/TagRef"
            },
            "title": "Tags",
            "type": "array"
          },
          "type": {
            "title": "Type",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "updated_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated By"
          }
        },
        "required": [
          "id",
          "type",
          "name",
          "status",
          "approval_status",
          "data_quality"
        ],
        "title": "CardResponse",
        "type": "object"
      },
      "CardRestoreRequest": {
        "properties": {
          "also_restore_card_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 200,
            "title": "Also Restore Card Ids",
            "type": "array"
          }
        },
        "title": "CardRestoreRequest",
        "type": "object"
      },
      "CardRestoreResponse": {
        "properties": {
          "primary": {
            "$ref": "#/components/schemas/CardResponse"
          },
          "restored_passenger_ids": {
            "items": {
              "type": "string"
            },
            "title": "Restored Passenger Ids",
            "type": "array"
          }
        },
        "required": [
          "primary",
          "restored_passenger_ids"
        ],
        "title": "CardRestoreResponse",
        "type": "object"
      },
      "CardTypeCount": {
        "properties": {
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "count"
        ],
        "title": "CardTypeCount",
        "type": "object"
      },
      "CardUpdate": {
        "properties": {
          "alias": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alias"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "external_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Id"
          },
          "lifecycle": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lifecycle"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "parent_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Label"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "strict_attributes": {
            "default": false,
            "title": "Strict Attributes",
            "type": "boolean"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          }
        },
        "title": "CardUpdate",
        "type": "object"
      },
      "CommentCreate": {
        "properties": {
          "content": {
            "maxLength": 10000,
            "minLength": 1,
            "title": "Content",
            "type": "string"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          }
        },
        "required": [
          "content"
        ],
        "title": "CommentCreate",
        "type": "object"
      },
      "CommentUpdate": {
        "properties": {
          "content": {
            "maxLength": 10000,
            "minLength": 1,
            "title": "Content",
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "title": "CommentUpdate",
        "type": "object"
      },
      "ComplianceBundleOut": {
        "properties": {
          "findings": {
            "items": {
              "$ref": "#/components/schemas/ComplianceFindingOut"
            },
            "title": "Findings",
            "type": "array"
          },
          "is_enabled": {
            "default": true,
            "title": "Is Enabled",
            "type": "boolean"
          },
          "is_known": {
            "default": true,
            "title": "Is Known",
            "type": "boolean"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "regulation": {
            "title": "Regulation",
            "type": "string"
          },
          "score": {
            "default": 0,
            "title": "Score",
            "type": "integer"
          }
        },
        "required": [
          "regulation"
        ],
        "title": "ComplianceBundleOut",
        "type": "object"
      },
      "ComplianceFindingAiVerdict": {
        "description": "Body for ``POST /security/compliance-findings/{id}/ai-verdict``.\n\nCaptures the user's verdict on the scanner's AI-detection claim and\npersists it on the impacted card's ``hasAiFeatures`` attribute.",
        "properties": {
          "verdict": {
            "title": "Verdict",
            "type": "string"
          }
        },
        "required": [
          "verdict"
        ],
        "title": "ComplianceFindingAiVerdict",
        "type": "object"
      },
      "ComplianceFindingBulkDecisionUpdate": {
        "description": "Body for ``PATCH /security/compliance-findings/bulk``.\n\nBulk transition of multiple findings to a single new ``decision``.\nPer-row lifecycle validation still runs; rows where the transition\nisn't allowed (or that are tracked by an active Risk) are reported\nin the response's ``skipped`` list with a reason \u2014 the rest succeed.",
        "properties": {
          "decision": {
            "title": "Decision",
            "type": "string"
          },
          "ids": {
            "items": {
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          },
          "review_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Note"
          }
        },
        "required": [
          "ids",
          "decision"
        ],
        "title": "ComplianceFindingBulkDecisionUpdate",
        "type": "object"
      },
      "ComplianceFindingBulkDelete": {
        "description": "Body for ``DELETE /security/compliance-findings/bulk``.\n\nAccepts a list of finding ids; rows the caller can't see (or that\ndon't exist) are reported in the response's ``skipped`` list.",
        "properties": {
          "ids": {
            "items": {
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          }
        },
        "required": [
          "ids"
        ],
        "title": "ComplianceFindingBulkDelete",
        "type": "object"
      },
      "ComplianceFindingBulkResult": {
        "description": "Outcome of a bulk delete or bulk decision update.\n\n``updated`` is the count of rows the call actually changed.\n``skipped`` lists rows that were left untouched, each with a\n``reason`` (\"not_found\", \"illegal_transition\", \"risk_tracked\", \u2026).",
        "properties": {
          "skipped": {
            "default": [],
            "items": {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            "title": "Skipped",
            "type": "array"
          },
          "updated": {
            "title": "Updated",
            "type": "integer"
          }
        },
        "required": [
          "updated"
        ],
        "title": "ComplianceFindingBulkResult",
        "type": "object"
      },
      "ComplianceFindingCreate": {
        "description": "Body for ``POST /security/compliance-findings`` \u2014 manual finding entry.\n\nUsed by auditors / GRC analysts who want to record a finding the\nscanner didn't pick up. The endpoint creates a synthetic \"manual\"\n:class:`TurboLensAnalysisRun` to satisfy the FK and persists a row\nwith ``decision='new'`` so the lifecycle starts at the same place\nas scanner-emitted findings.",
        "properties": {
          "card_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Id"
          },
          "category": {
            "default": "",
            "title": "Category",
            "type": "string"
          },
          "evidence": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evidence"
          },
          "gap_description": {
            "default": "",
            "title": "Gap Description",
            "type": "string"
          },
          "regulation": {
            "title": "Regulation",
            "type": "string"
          },
          "regulation_article": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Regulation Article"
          },
          "remediation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remediation"
          },
          "requirement": {
            "title": "Requirement",
            "type": "string"
          },
          "severity": {
            "title": "Severity",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "regulation",
          "requirement",
          "status",
          "severity"
        ],
        "title": "ComplianceFindingCreate",
        "type": "object"
      },
      "ComplianceFindingDecisionUpdate": {
        "description": "Body for ``PATCH /security/compliance-findings/{id}``.\n\nUsers transition the decision through the compliance lifecycle\nstates ``new``, ``in_review``, ``mitigated``, ``verified``,\n``accepted`` and ``not_applicable``. Allowed transitions are\nenforced server-side by ``compliance_lifecycle_allowed``.\n``risk_tracked`` is set automatically when a finding is promoted to\na Risk (``POST /risks/promote/compliance/{id}``); ``auto_resolved``\nis set by the scanner when a re-scan no longer reports the finding.\nNeither is user-settable.",
        "properties": {
          "decision": {
            "title": "Decision",
            "type": "string"
          },
          "review_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Note"
          }
        },
        "required": [
          "decision"
        ],
        "title": "ComplianceFindingDecisionUpdate",
        "type": "object"
      },
      "ComplianceFindingDetailUpdate": {
        "description": "Body for ``PATCH /compliance-findings/{id}/details``.\n\nEdits the human-authored content of a finding \u2014 compliance\n``status``, ``severity``, ``requirement``, gap/evidence/remediation,\ncategory, article, regulation, and linked card \u2014 **without** touching\nthe lifecycle ``decision`` (that has its own endpoint). All fields are\noptional so callers can send a partial update.",
        "properties": {
          "card_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Id"
          },
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "evidence": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evidence"
          },
          "gap_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gap Description"
          },
          "regulation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Regulation"
          },
          "regulation_article": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Regulation Article"
          },
          "remediation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remediation"
          },
          "requirement": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requirement"
          },
          "severity": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Severity"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          }
        },
        "title": "ComplianceFindingDetailUpdate",
        "type": "object"
      },
      "ComplianceFindingOut": {
        "properties": {
          "ai_detected": {
            "default": false,
            "title": "Ai Detected",
            "type": "boolean"
          },
          "auto_resolved": {
            "default": false,
            "title": "Auto Resolved",
            "type": "boolean"
          },
          "card_has_ai_features": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Has Ai Features"
          },
          "card_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Id"
          },
          "card_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Name"
          },
          "card_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Type"
          },
          "category": {
            "default": "",
            "title": "Category",
            "type": "string"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "decision": {
            "default": "new",
            "title": "Decision",
            "type": "string"
          },
          "evidence": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evidence"
          },
          "gap_description": {
            "default": "",
            "title": "Gap Description",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "last_seen_run_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Seen Run Id"
          },
          "regulation": {
            "title": "Regulation",
            "type": "string"
          },
          "regulation_article": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Regulation Article"
          },
          "remediation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remediation"
          },
          "requirement": {
            "default": "",
            "title": "Requirement",
            "type": "string"
          },
          "review_note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Review Note"
          },
          "reviewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed At"
          },
          "reviewed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewed By"
          },
          "reviewer_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reviewer Name"
          },
          "risk_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Risk Id"
          },
          "risk_reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Risk Reference"
          },
          "run_id": {
            "title": "Run Id",
            "type": "string"
          },
          "scope_type": {
            "default": "landscape",
            "title": "Scope Type",
            "type": "string"
          },
          "severity": {
            "default": "info",
            "title": "Severity",
            "type": "string"
          },
          "status": {
            "default": "review_needed",
            "title": "Status",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "run_id",
          "regulation"
        ],
        "title": "ComplianceFindingOut",
        "type": "object"
      },
      "ComplianceRegulationCreate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "is_enabled": {
            "default": true,
            "title": "Is Enabled",
            "type": "boolean"
          },
          "key": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Key",
            "type": "string"
          },
          "label": {
            "maxLength": 300,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "sort_order": {
            "default": 0,
            "title": "Sort Order",
            "type": "integer"
          },
          "translations": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Translations"
          }
        },
        "required": [
          "key",
          "label"
        ],
        "title": "ComplianceRegulationCreate",
        "type": "object"
      },
      "ComplianceRegulationUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "is_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Enabled"
          },
          "label": {
            "anyOf": [
              {
                "maxLength": 300,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "translations": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Translations"
          }
        },
        "title": "ComplianceRegulationUpdate",
        "type": "object"
      },
      "ConnectionCreate": {
        "properties": {
          "auth_type": {
            "default": "basic",
            "pattern": "^(basic|oauth2)$",
            "title": "Auth Type",
            "type": "string"
          },
          "client_id": {
            "default": "",
            "title": "Client Id",
            "type": "string"
          },
          "client_secret": {
            "default": "",
            "title": "Client Secret",
            "type": "string"
          },
          "instance_url": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Instance Url",
            "type": "string"
          },
          "name": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "password": {
            "default": "",
            "title": "Password",
            "type": "string"
          },
          "username": {
            "default": "",
            "title": "Username",
            "type": "string"
          }
        },
        "required": [
          "name",
          "instance_url"
        ],
        "title": "ConnectionCreate",
        "type": "object"
      },
      "ConnectionOut": {
        "properties": {
          "auth_type": {
            "title": "Auth Type",
            "type": "string"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "instance_url": {
            "title": "Instance Url",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "last_tested_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Tested At"
          },
          "mapping_count": {
            "default": 0,
            "title": "Mapping Count",
            "type": "integer"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "test_status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Test Status"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "name",
          "instance_url",
          "auth_type",
          "is_active"
        ],
        "title": "ConnectionOut",
        "type": "object"
      },
      "ConnectionUpdate": {
        "properties": {
          "auth_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Type"
          },
          "client_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Id"
          },
          "client_secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Client Secret"
          },
          "instance_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Instance Url"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "password": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Password"
          },
          "username": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Username"
          }
        },
        "title": "ConnectionUpdate",
        "type": "object"
      },
      "CurrencyPayload": {
        "properties": {
          "currency": {
            "default": "USD",
            "title": "Currency",
            "type": "string"
          }
        },
        "title": "CurrencyPayload",
        "type": "object"
      },
      "DateFormatPayload": {
        "properties": {
          "date_format": {
            "default": "DD MMM YYYY",
            "title": "Date Format",
            "type": "string"
          }
        },
        "title": "DateFormatPayload",
        "type": "object"
      },
      "DescendantRelationRow": {
        "description": "One rolled-up peer card, deduped across every descendant that links it.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "lifecycle": {
            "additionalProperties": {
              "type": "string"
            },
            "title": "Lifecycle",
            "type": "object"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          },
          "via": {
            "items": {
              "$ref": "#/components/schemas/DescendantRelationVia"
            },
            "title": "Via",
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "via"
        ],
        "title": "DescendantRelationRow",
        "type": "object"
      },
      "DescendantRelationSummaryEntry": {
        "description": "One row of the descendant-relation summary \u2014 how many *additional*\ndistinct cards are reachable through this card's descendants for a given\nrelation type.\n\nPowers the \"+N in sub-items\" chip on the Relations section. The count\nexcludes peers the card is already directly related to, so the chip only\never advertises rows the user cannot already see in the list above it.",
        "properties": {
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "direction": {
            "enum": [
              "outgoing",
              "incoming"
            ],
            "title": "Direction",
            "type": "string"
          },
          "relation_type_key": {
            "title": "Relation Type Key",
            "type": "string"
          }
        },
        "required": [
          "relation_type_key",
          "direction",
          "count"
        ],
        "title": "DescendantRelationSummaryEntry",
        "type": "object"
      },
      "DescendantRelationVia": {
        "description": "The descendant that actually owns the relation \u2014 the provenance chip.",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type"
        ],
        "title": "DescendantRelationVia",
        "type": "object"
      },
      "DescendantRelationsResponse": {
        "properties": {
          "rows": {
            "items": {
              "$ref": "#/components/schemas/DescendantRelationRow"
            },
            "title": "Rows",
            "type": "array"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          },
          "via_total": {
            "default": 0,
            "title": "Via Total",
            "type": "integer"
          }
        },
        "required": [
          "rows",
          "total"
        ],
        "title": "DescendantRelationsResponse",
        "type": "object"
      },
      "DiagramCreate": {
        "properties": {
          "card_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Ids"
          },
          "data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "DiagramCreate",
        "type": "object"
      },
      "DiagramGroupsUpdate": {
        "properties": {
          "group_ids": {
            "items": {
              "type": "string"
            },
            "title": "Group Ids",
            "type": "array"
          }
        },
        "required": [
          "group_ids"
        ],
        "title": "DiagramGroupsUpdate",
        "type": "object"
      },
      "DiagramPublishRequest": {
        "properties": {
          "access_mode": {
            "default": "public",
            "title": "Access Mode",
            "type": "string"
          },
          "allowed_email_domains": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Allowed Email Domains"
          }
        },
        "title": "DiagramPublishRequest",
        "type": "object"
      },
      "DiagramSave": {
        "properties": {
          "bpmn_xml": {
            "title": "Bpmn Xml",
            "type": "string"
          },
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "svg_thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Svg Thumbnail"
          }
        },
        "required": [
          "bpmn_xml"
        ],
        "title": "DiagramSave",
        "type": "object"
      },
      "DiagramSsoCallbackRequest": {
        "properties": {
          "code": {
            "title": "Code",
            "type": "string"
          },
          "redirect_uri": {
            "title": "Redirect Uri",
            "type": "string"
          }
        },
        "required": [
          "code",
          "redirect_uri"
        ],
        "title": "DiagramSsoCallbackRequest",
        "type": "object"
      },
      "DiagramUpdate": {
        "properties": {
          "card_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Ids"
          },
          "data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "DiagramUpdate",
        "type": "object"
      },
      "DocumentCreate": {
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "type": {
            "default": "link",
            "title": "Type",
            "type": "string"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "required": [
          "name"
        ],
        "title": "DocumentCreate",
        "type": "object"
      },
      "DocumentUpdate": {
        "description": "Partial update of a document link \u2014 omitted fields stay unchanged.\n\n``url`` may be set to ``null`` (or ``\"\"``) to clear it; ``name`` and\n``type`` cannot be blanked.",
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "title": "DocumentUpdate",
        "type": "object"
      },
      "DuplicateClusterOut": {
        "properties": {
          "analysed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Analysed At"
          },
          "card_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Ids"
          },
          "card_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Names"
          },
          "card_type": {
            "title": "Card Type",
            "type": "string"
          },
          "cluster_name": {
            "title": "Cluster Name",
            "type": "string"
          },
          "evidence": {
            "default": "",
            "title": "Evidence",
            "type": "string"
          },
          "functional_domain": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Functional Domain"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "recommendation": {
            "default": "",
            "title": "Recommendation",
            "type": "string"
          },
          "status": {
            "default": "pending",
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "cluster_name",
          "card_type"
        ],
        "title": "DuplicateClusterOut",
        "type": "object"
      },
      "ElementUpdate": {
        "description": "Update EA cross-references on an extracted BPMN element.",
        "properties": {
          "application_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Application Id"
          },
          "business_process_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Business Process Id"
          },
          "custom_fields": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Fields"
          },
          "data_object_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Object Id"
          },
          "it_component_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "It Component Id"
          },
          "organization_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Organization Ids"
          }
        },
        "title": "ElementUpdate",
        "type": "object"
      },
      "EmailSettingsPayload": {
        "properties": {
          "app_base_url": {
            "default": "",
            "title": "App Base Url",
            "type": "string"
          },
          "graph_sender": {
            "default": "",
            "title": "Graph Sender",
            "type": "string"
          },
          "method": {
            "default": "smtp_basic",
            "title": "Method",
            "type": "string"
          },
          "oauth_client_id": {
            "default": "",
            "title": "Oauth Client Id",
            "type": "string"
          },
          "oauth_client_secret": {
            "default": "",
            "title": "Oauth Client Secret",
            "type": "string"
          },
          "oauth_provider": {
            "default": "microsoft",
            "title": "Oauth Provider",
            "type": "string"
          },
          "oauth_scope": {
            "default": "",
            "title": "Oauth Scope",
            "type": "string"
          },
          "oauth_tenant_id": {
            "default": "",
            "title": "Oauth Tenant Id",
            "type": "string"
          },
          "oauth_token_endpoint": {
            "default": "",
            "title": "Oauth Token Endpoint",
            "type": "string"
          },
          "service_account_json": {
            "default": "",
            "title": "Service Account Json",
            "type": "string"
          },
          "smtp_from": {
            "default": "noreply@turboea.local",
            "title": "Smtp From",
            "type": "string"
          },
          "smtp_host": {
            "default": "",
            "title": "Smtp Host",
            "type": "string"
          },
          "smtp_password": {
            "default": "",
            "title": "Smtp Password",
            "type": "string"
          },
          "smtp_port": {
            "default": 587,
            "title": "Smtp Port",
            "type": "integer"
          },
          "smtp_tls": {
            "default": true,
            "title": "Smtp Tls",
            "type": "boolean"
          },
          "smtp_user": {
            "default": "",
            "title": "Smtp User",
            "type": "string"
          }
        },
        "title": "EmailSettingsPayload",
        "type": "object"
      },
      "EnabledIn": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "EnabledIn",
        "type": "object"
      },
      "EnabledLocalesPayload": {
        "properties": {
          "locales": {
            "items": {
              "type": "string"
            },
            "title": "Locales",
            "type": "array"
          }
        },
        "required": [
          "locales"
        ],
        "title": "EnabledLocalesPayload",
        "type": "object"
      },
      "EntitlementOut": {
        "properties": {
          "auto_renew": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auto Renew"
          },
          "expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "grace_until": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Grace Until"
          },
          "state": {
            "title": "State",
            "type": "string"
          },
          "trial": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trial"
          }
        },
        "required": [
          "state"
        ],
        "title": "EntitlementOut",
        "type": "object"
      },
      "EolCardStatus": {
        "description": "The resolved end-of-life picture for one card.",
        "properties": {
          "eol_cycle": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eol Cycle"
          },
          "eol_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eol Date"
          },
          "eol_product": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eol Product"
          },
          "latest": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latest"
          },
          "source": {
            "description": "api (endoflife.date link) | manual (lifecycle date)",
            "title": "Source",
            "type": "string"
          },
          "status": {
            "description": "eol | approaching | supported | unknown",
            "title": "Status",
            "type": "string"
          },
          "support_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Support Date"
          }
        },
        "required": [
          "status",
          "source"
        ],
        "title": "EolCardStatus",
        "type": "object"
      },
      "EolCardStatusResponse": {
        "description": "Card id \u2192 status, for every card of the type that carries EOL data.",
        "properties": {
          "items": {
            "additionalProperties": {
              "$ref": "#/components/schemas/EolCardStatus"
            },
            "title": "Items",
            "type": "object"
          }
        },
        "required": [
          "items"
        ],
        "title": "EolCardStatusResponse",
        "type": "object"
      },
      "EolCycle": {
        "description": "A single release cycle for a product.",
        "properties": {
          "codename": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Codename"
          },
          "cycle": {
            "title": "Cycle",
            "type": "string"
          },
          "discontinued": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Discontinued"
          },
          "eol": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eol"
          },
          "latest": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latest"
          },
          "latestReleaseDate": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latestreleasedate"
          },
          "link": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Link"
          },
          "lts": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lts"
          },
          "releaseDate": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Releasedate"
          },
          "support": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Support"
          }
        },
        "required": [
          "cycle"
        ],
        "title": "EolCycle",
        "type": "object"
      },
      "EolProduct": {
        "description": "A product identifier returned from the product list.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "EolProduct",
        "type": "object"
      },
      "EolProductMatch": {
        "description": "A product with a fuzzy match score.",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "score": {
            "title": "Score",
            "type": "number"
          }
        },
        "required": [
          "name",
          "score"
        ],
        "title": "EolProductMatch",
        "type": "object"
      },
      "ExtensionInstallOut": {
        "properties": {
          "applied_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Applied At"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "diff": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Diff"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "extension_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Extension Key"
          },
          "extension_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Extension Version"
          },
          "filename": {
            "title": "Filename",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "previewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previewed At"
          },
          "result": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "filename",
          "status"
        ],
        "title": "ExtensionInstallOut",
        "type": "object"
      },
      "ExtensionNotesOut": {
        "description": "Resolved release notes for one extension version.",
        "properties": {
          "changelog_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Changelog Url"
          },
          "from_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "From Version"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "notes": {
            "title": "Notes",
            "type": "string"
          },
          "source": {
            "title": "Source",
            "type": "string"
          },
          "version": {
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "key",
          "version",
          "notes",
          "source"
        ],
        "title": "ExtensionNotesOut",
        "type": "object"
      },
      "ExtensionNoticesEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "ExtensionNoticesEnabledPayload",
        "type": "object"
      },
      "ExtensionOut": {
        "properties": {
          "capabilities": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Capabilities",
            "type": "array"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          },
          "entitlement": {
            "$ref": "#/components/schemas/EntitlementOut"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "last_error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Error"
          },
          "logo_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Logo Url"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "version": {
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "version",
          "status",
          "enabled",
          "entitlement"
        ],
        "title": "ExtensionOut",
        "type": "object"
      },
      "ExtensionStatusOut": {
        "properties": {
          "entitlement_state": {
            "title": "Entitlement State",
            "type": "string"
          },
          "grants": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Grants",
            "type": "array"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "version": {
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "key",
          "version",
          "entitlement_state"
        ],
        "title": "ExtensionStatusOut",
        "type": "object"
      },
      "FieldMappingIn": {
        "properties": {
          "default_value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Default Value"
          },
          "direction": {
            "default": "snow_leads",
            "pattern": "^(snow_leads|turbo_leads)$",
            "title": "Direction",
            "type": "string"
          },
          "is_identity": {
            "default": false,
            "title": "Is Identity",
            "type": "boolean"
          },
          "snow_field": {
            "default": "",
            "title": "Snow Field",
            "type": "string"
          },
          "transform_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transform Config"
          },
          "transform_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transform Type"
          },
          "turbo_field": {
            "title": "Turbo Field",
            "type": "string"
          }
        },
        "required": [
          "turbo_field"
        ],
        "title": "FieldMappingIn",
        "type": "object"
      },
      "FieldMappingOptions": {
        "description": "Payload for the field-mapping admin UI.\n\nOne block per ``(native_type, target_tea_type)`` pair surfacing the\nsource fields the parser discovered alongside the list of TEA\ntarget fields the admin can map them onto.",
        "properties": {
          "auto_mapped_columns": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/AutoMappedColumn"
            },
            "title": "Auto Mapped Columns",
            "type": "array"
          },
          "blocks": {
            "items": {
              "$ref": "#/components/schemas/FieldMappingTypeBlock"
            },
            "title": "Blocks",
            "type": "array"
          }
        },
        "required": [
          "blocks"
        ],
        "title": "FieldMappingOptions",
        "type": "object"
      },
      "FieldMappingOut": {
        "properties": {
          "default_value": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Default Value"
          },
          "direction": {
            "title": "Direction",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "is_identity": {
            "title": "Is Identity",
            "type": "boolean"
          },
          "snow_field": {
            "title": "Snow Field",
            "type": "string"
          },
          "transform_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transform Config"
          },
          "transform_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Transform Type"
          },
          "turbo_field": {
            "title": "Turbo Field",
            "type": "string"
          }
        },
        "required": [
          "id",
          "turbo_field",
          "snow_field",
          "direction",
          "is_identity"
        ],
        "title": "FieldMappingOut",
        "type": "object"
      },
      "FieldMappingTypeBlock": {
        "properties": {
          "available_targets": {
            "items": {
              "$ref": "#/components/schemas/TargetFieldOption"
            },
            "title": "Available Targets",
            "type": "array"
          },
          "native_type": {
            "title": "Native Type",
            "type": "string"
          },
          "source_fields": {
            "items": {
              "$ref": "#/components/schemas/SourceFieldRow"
            },
            "title": "Source Fields",
            "type": "array"
          },
          "target_tea_type": {
            "title": "Target Tea Type",
            "type": "string"
          },
          "target_type_label": {
            "title": "Target Type Label",
            "type": "string"
          }
        },
        "required": [
          "native_type",
          "target_tea_type",
          "target_type_label",
          "source_fields",
          "available_targets"
        ],
        "title": "FieldMappingTypeBlock",
        "type": "object"
      },
      "FieldMappingUpdate": {
        "properties": {
          "field_mappings": {
            "additionalProperties": {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            "title": "Field Mappings",
            "type": "object"
          }
        },
        "required": [
          "field_mappings"
        ],
        "title": "FieldMappingUpdate",
        "type": "object"
      },
      "FileAttachmentUpdate": {
        "description": "Rename or re-categorise a file attachment \u2014 omitted fields stay as is.\n\nThe bytes are untouched (that is what ``PUT \u2026/content`` is for), so a new\n``name`` must keep an extension that maps to the stored format; the route\nchecks that against the row. ``category`` set to ``\"\"`` or ``null`` clears.",
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "FileAttachmentUpdate",
        "type": "object"
      },
      "FileUploadsEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "FileUploadsEnabledPayload",
        "type": "object"
      },
      "FiscalYearStartPayload": {
        "properties": {
          "month": {
            "title": "Month",
            "type": "integer"
          }
        },
        "required": [
          "month"
        ],
        "title": "FiscalYearStartPayload",
        "type": "object"
      },
      "ForgotPasswordRequest": {
        "properties": {
          "email": {
            "title": "Email",
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "title": "ForgotPasswordRequest",
        "type": "object"
      },
      "GrcEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "GrcEnabledPayload",
        "type": "object"
      },
      "GroupCreate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          }
        },
        "required": [
          "name"
        ],
        "title": "GroupCreate",
        "type": "object"
      },
      "GroupUpdate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          }
        },
        "title": "GroupUpdate",
        "type": "object"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "title": "Detail",
            "type": "array"
          }
        },
        "title": "HTTPValidationError",
        "type": "object"
      },
      "ImpersonateRequest": {
        "properties": {
          "role": {
            "maxLength": 64,
            "minLength": 1,
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "role"
        ],
        "title": "ImpersonateRequest",
        "type": "object"
      },
      "ImportPrinciplesRequest": {
        "properties": {
          "catalogue_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 200,
            "minItems": 1,
            "title": "Catalogue Ids",
            "type": "array"
          }
        },
        "required": [
          "catalogue_ids"
        ],
        "title": "ImportPrinciplesRequest",
        "type": "object"
      },
      "ImportRequest": {
        "properties": {
          "catalogue_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 2000,
            "minItems": 1,
            "title": "Catalogue Ids",
            "type": "array"
          },
          "locale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Locale"
          }
        },
        "required": [
          "catalogue_ids"
        ],
        "title": "ImportRequest",
        "type": "object"
      },
      "InstanceOut": {
        "properties": {
          "instance_id": {
            "title": "Instance Id",
            "type": "string"
          }
        },
        "required": [
          "instance_id"
        ],
        "title": "InstanceOut",
        "type": "object"
      },
      "LicenseIn": {
        "properties": {
          "confirm": {
            "default": false,
            "title": "Confirm",
            "type": "boolean"
          },
          "text": {
            "title": "Text",
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "title": "LicenseIn",
        "type": "object"
      },
      "LicenseOut": {
        "properties": {
          "customer_id": {
            "default": "",
            "title": "Customer Id",
            "type": "string"
          },
          "entitlements": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Entitlements",
            "type": "array"
          },
          "grace_days": {
            "title": "Grace Days",
            "type": "integer"
          },
          "issued_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Issued At"
          },
          "key_id": {
            "default": "",
            "title": "Key Id",
            "type": "string"
          },
          "licensee": {
            "title": "Licensee",
            "type": "string"
          },
          "problem": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Problem"
          },
          "store_managed": {
            "default": false,
            "title": "Store Managed",
            "type": "boolean"
          },
          "uploaded_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uploaded At"
          }
        },
        "required": [
          "licensee",
          "grace_days",
          "entitlements"
        ],
        "title": "LicenseOut",
        "type": "object"
      },
      "LoginBrandingPayload": {
        "properties": {
          "login_help_link": {
            "default": "",
            "maxLength": 300,
            "title": "Login Help Link",
            "type": "string"
          },
          "login_help_text": {
            "default": "",
            "maxLength": 500,
            "title": "Login Help Text",
            "type": "string"
          },
          "login_tagline": {
            "default": "",
            "maxLength": 200,
            "title": "Login Tagline",
            "type": "string"
          },
          "login_tagline_hidden": {
            "default": false,
            "title": "Login Tagline Hidden",
            "type": "boolean"
          }
        },
        "title": "LoginBrandingPayload",
        "type": "object"
      },
      "LoginRequest": {
        "properties": {
          "email": {
            "format": "email",
            "title": "Email",
            "type": "string"
          },
          "password": {
            "title": "Password",
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ],
        "title": "LoginRequest",
        "type": "object"
      },
      "MappingCreate": {
        "properties": {
          "card_type_key": {
            "title": "Card Type Key",
            "type": "string"
          },
          "connection_id": {
            "title": "Connection Id",
            "type": "string"
          },
          "field_mappings": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/FieldMappingIn"
            },
            "title": "Field Mappings",
            "type": "array"
          },
          "filter_query": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filter Query"
          },
          "max_deletion_ratio": {
            "default": 0.5,
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Max Deletion Ratio",
            "type": "number"
          },
          "skip_staging": {
            "default": false,
            "title": "Skip Staging",
            "type": "boolean"
          },
          "snow_table": {
            "title": "Snow Table",
            "type": "string"
          },
          "sync_direction": {
            "default": "snow_to_turbo",
            "pattern": "^(snow_to_turbo|turbo_to_snow|bidirectional)$",
            "title": "Sync Direction",
            "type": "string"
          },
          "sync_mode": {
            "default": "conservative",
            "pattern": "^(additive|conservative|strict)$",
            "title": "Sync Mode",
            "type": "string"
          }
        },
        "required": [
          "connection_id",
          "card_type_key",
          "snow_table"
        ],
        "title": "MappingCreate",
        "type": "object"
      },
      "MappingOut": {
        "properties": {
          "card_type_key": {
            "title": "Card Type Key",
            "type": "string"
          },
          "connection_id": {
            "title": "Connection Id",
            "type": "string"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "field_mappings": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/FieldMappingOut"
            },
            "title": "Field Mappings",
            "type": "array"
          },
          "filter_query": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filter Query"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "max_deletion_ratio": {
            "title": "Max Deletion Ratio",
            "type": "number"
          },
          "skip_staging": {
            "default": false,
            "title": "Skip Staging",
            "type": "boolean"
          },
          "snow_table": {
            "title": "Snow Table",
            "type": "string"
          },
          "sync_direction": {
            "title": "Sync Direction",
            "type": "string"
          },
          "sync_mode": {
            "title": "Sync Mode",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "connection_id",
          "card_type_key",
          "snow_table",
          "sync_direction",
          "sync_mode",
          "max_deletion_ratio",
          "is_active"
        ],
        "title": "MappingOut",
        "type": "object"
      },
      "MappingUpdate": {
        "properties": {
          "card_type_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Type Key"
          },
          "field_mappings": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/FieldMappingIn"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field Mappings"
          },
          "filter_query": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filter Query"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "max_deletion_ratio": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Deletion Ratio"
          },
          "skip_staging": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Skip Staging"
          },
          "snow_table": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Snow Table"
          },
          "sync_direction": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sync Direction"
          },
          "sync_mode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sync Mode"
          }
        },
        "title": "MappingUpdate",
        "type": "object"
      },
      "MassEolCandidate": {
        "description": "A candidate EOL match for a card.",
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "card_name": {
            "title": "Card Name",
            "type": "string"
          },
          "card_type": {
            "title": "Card Type",
            "type": "string"
          },
          "eol_product": {
            "title": "Eol Product",
            "type": "string"
          },
          "score": {
            "title": "Score",
            "type": "number"
          }
        },
        "required": [
          "card_id",
          "card_name",
          "card_type",
          "eol_product",
          "score"
        ],
        "title": "MassEolCandidate",
        "type": "object"
      },
      "MassEolResult": {
        "description": "Result of mass EOL search for a single card.",
        "properties": {
          "candidates": {
            "items": {
              "$ref": "#/components/schemas/MassEolCandidate"
            },
            "title": "Candidates",
            "type": "array"
          },
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "card_name": {
            "title": "Card Name",
            "type": "string"
          },
          "card_type": {
            "title": "Card Type",
            "type": "string"
          },
          "current_eol_cycle": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Eol Cycle"
          },
          "current_eol_product": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Eol Product"
          }
        },
        "required": [
          "card_id",
          "card_name",
          "card_type",
          "candidates"
        ],
        "title": "MassEolResult",
        "type": "object"
      },
      "McpSettingsPayload": {
        "properties": {
          "enabled": {
            "default": false,
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "title": "McpSettingsPayload",
        "type": "object"
      },
      "MessageFlowUpdate": {
        "description": "Set (or clear, with ``null``) the Interface card a message flow realises.",
        "properties": {
          "interface_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Interface Id"
          }
        },
        "title": "MessageFlowUpdate",
        "type": "object"
      },
      "MigrationOut": {
        "properties": {
          "applied_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Applied At"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "field_mappings": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field Mappings"
          },
          "file_hash": {
            "title": "File Hash",
            "type": "string"
          },
          "file_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "File Size"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "metamodel_diff": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metamodel Diff"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "parsed_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parsed At"
          },
          "snapshot_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Snapshot Version"
          },
          "source_type": {
            "title": "Source Type",
            "type": "string"
          },
          "stats": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stats"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "name",
          "source_type",
          "status",
          "file_hash",
          "file_size",
          "snapshot_version",
          "stats",
          "metamodel_diff",
          "field_mappings",
          "error_message",
          "parsed_at",
          "applied_at",
          "created_at",
          "updated_at"
        ],
        "title": "MigrationOut",
        "type": "object"
      },
      "MitigationTaskCreate": {
        "description": "Payload for ``POST /risks/{risk_id}/mitigation-tasks``.\n\n``lead_time_days`` is optional on create \u2014 when omitted the service\nlayer picks a smart default per ``recurrence_unit`` (1 / 2 / 7 / 14\nfor daily / weekly / monthly / yearly, capped at half the cycle so\nthe lead window never overlaps the previous occurrence). One-shot\ntasks default to 0 because there is no roll-forward to gate.",
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "lead_time_days": {
            "anyOf": [
              {
                "maximum": 3650.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead Time Days"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "recurrence_interval": {
            "default": 1,
            "maximum": 365.0,
            "minimum": 1.0,
            "title": "Recurrence Interval",
            "type": "integer"
          },
          "recurrence_unit": {
            "default": "none",
            "enum": [
              "none",
              "days",
              "weeks",
              "months",
              "years"
            ],
            "title": "Recurrence Unit",
            "type": "string"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "MitigationTaskCreate",
        "type": "object"
      },
      "MitigationTaskOccurrenceOut": {
        "properties": {
          "activated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Activated At"
          },
          "assigned_owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned Owner Id"
          },
          "assigned_owner_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned Owner Name"
          },
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "completed_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed By"
          },
          "completed_by_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed By Name"
          },
          "completion_notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completion Notes"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "owner_at_completion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner At Completion"
          },
          "owner_at_completion_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner At Completion Name"
          },
          "sequence": {
            "title": "Sequence",
            "type": "integer"
          },
          "status": {
            "enum": [
              "scheduled",
              "open",
              "done",
              "skipped"
            ],
            "title": "Status",
            "type": "string"
          },
          "task_id": {
            "title": "Task Id",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "task_id",
          "sequence",
          "status"
        ],
        "title": "MitigationTaskOccurrenceOut",
        "type": "object"
      },
      "MitigationTaskOut": {
        "properties": {
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "lead_time_days": {
            "title": "Lead Time Days",
            "type": "integer"
          },
          "occurrences": {
            "items": {
              "$ref": "#/components/schemas/MitigationTaskOccurrenceOut"
            },
            "title": "Occurrences",
            "type": "array"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "owner_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Name"
          },
          "recurrence_interval": {
            "title": "Recurrence Interval",
            "type": "integer"
          },
          "recurrence_unit": {
            "enum": [
              "none",
              "days",
              "weeks",
              "months",
              "years"
            ],
            "title": "Recurrence Unit",
            "type": "string"
          },
          "reference": {
            "title": "Reference",
            "type": "string"
          },
          "risk_id": {
            "title": "Risk Id",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "reference",
          "risk_id",
          "title",
          "recurrence_unit",
          "recurrence_interval",
          "lead_time_days",
          "is_active"
        ],
        "title": "MitigationTaskOut",
        "type": "object"
      },
      "MitigationTaskUpdate": {
        "description": "Partial update for ``PATCH /mitigation-tasks/{task_id}``.\n\n``owner_id`` changes propagate to the **current open occurrence** (its\n``assigned_owner_id``) so the Todo + notification flow reflects the\nnew assignee immediately. Past completed occurrences keep their\nhistorical owner snapshots and are not modified.\n\nRecurrence changes apply to **future** occurrences only \u2014 the current\nopen occurrence keeps its scheduled ``due_date``. Lead-time changes\ntake effect on future cycles too, but the API re-evaluates any\ncurrently-scheduled cycle against the new window so shortening the\nlead time can promote a cycle immediately instead of waiting for the\nnext daily promotion run.",
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "lead_time_days": {
            "anyOf": [
              {
                "maximum": 3650.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead Time Days"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "recurrence_interval": {
            "anyOf": [
              {
                "maximum": 365.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recurrence Interval"
          },
          "recurrence_unit": {
            "anyOf": [
              {
                "enum": [
                  "none",
                  "days",
                  "weeks",
                  "months",
                  "years"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recurrence Unit"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "MitigationTaskUpdate",
        "type": "object"
      },
      "ModernizationOut": {
        "properties": {
          "analysed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Analysed At"
          },
          "card_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Id"
          },
          "card_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Name"
          },
          "cluster_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cluster Id"
          },
          "current_tech": {
            "default": "",
            "title": "Current Tech",
            "type": "string"
          },
          "effort": {
            "default": "medium",
            "title": "Effort",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "modernization_type": {
            "default": "",
            "title": "Modernization Type",
            "type": "string"
          },
          "priority": {
            "default": "medium",
            "title": "Priority",
            "type": "string"
          },
          "recommendation": {
            "default": "",
            "title": "Recommendation",
            "type": "string"
          },
          "status": {
            "default": "pending",
            "title": "Status",
            "type": "string"
          },
          "target_type": {
            "title": "Target Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "target_type"
        ],
        "title": "ModernizationOut",
        "type": "object"
      },
      "MutationBatchCommit": {
        "description": "Close a batch after the wrapper's underlying writes complete.",
        "properties": {
          "confirm_token": {
            "anyOf": [
              {
                "maxLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confirm Token"
          },
          "summary": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          }
        },
        "title": "MutationBatchCommit",
        "type": "object"
      },
      "MutationBatchEvent": {
        "properties": {
          "card_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Id"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data"
          },
          "event_type": {
            "title": "Event Type",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "user_display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Display Name"
          },
          "user_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id"
          }
        },
        "required": [
          "id",
          "event_type",
          "data",
          "card_id",
          "user_id",
          "created_at"
        ],
        "title": "MutationBatchEvent",
        "type": "object"
      },
      "MutationBatchHistory": {
        "description": "Response for ``GET /mutation-batches/{id}/events`` \u2014 the batch\nmetadata plus every event emitted under it, in chronological order.",
        "properties": {
          "batch": {
            "$ref": "#/components/schemas/MutationBatchOut"
          },
          "events": {
            "items": {
              "$ref": "#/components/schemas/MutationBatchEvent"
            },
            "title": "Events",
            "type": "array"
          }
        },
        "required": [
          "batch",
          "events"
        ],
        "title": "MutationBatchHistory",
        "type": "object"
      },
      "MutationBatchListPage": {
        "description": "Paginated response for ``GET /mutation-batches``. Mirrors the\n``{items, total, page, page_size}`` envelope used by ``GET /cards``\nand the rest of the paginated read endpoints.",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/MutationBatchOut"
            },
            "title": "Items",
            "type": "array"
          },
          "page": {
            "title": "Page",
            "type": "integer"
          },
          "page_size": {
            "title": "Page Size",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "MutationBatchListPage",
        "type": "object"
      },
      "MutationBatchOpen": {
        "description": "Open a batch before a mutating tool wrapper performs writes.",
        "properties": {
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "tool_name": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Tool Name",
            "type": "string"
          }
        },
        "required": [
          "tool_name"
        ],
        "title": "MutationBatchOpen",
        "type": "object"
      },
      "MutationBatchOut": {
        "properties": {
          "actor_display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor Display Name"
          },
          "actor_user_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actor User Id"
          },
          "committed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Committed At"
          },
          "confirm_token": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confirm Token"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "dry_run": {
            "title": "Dry Run",
            "type": "boolean"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "origin": {
            "title": "Origin",
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "tool_name": {
            "title": "Tool Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tool_name",
          "actor_user_id",
          "origin",
          "dry_run",
          "created_at",
          "committed_at"
        ],
        "title": "MutationBatchOut",
        "type": "object"
      },
      "NavbarStylePayload": {
        "properties": {
          "navbar_bg": {
            "default": "#1a1a2e",
            "pattern": "^#[0-9a-fA-F]{6}$",
            "title": "Navbar Bg",
            "type": "string"
          },
          "navbar_fg": {
            "default": "#ffffff",
            "pattern": "^#[0-9a-fA-F]{6}$",
            "title": "Navbar Fg",
            "type": "string"
          }
        },
        "title": "NavbarStylePayload",
        "type": "object"
      },
      "NotificationPreferencesUpdate": {
        "properties": {
          "channels": {
            "anyOf": [
              {
                "additionalProperties": {
                  "additionalProperties": {
                    "type": "boolean"
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Channels"
          },
          "email": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "boolean"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "in_app": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "boolean"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "In App"
          }
        },
        "title": "NotificationPreferencesUpdate",
        "type": "object"
      },
      "OccurrenceCompleteRequest": {
        "description": "Optional notes when marking an occurrence done or skipped.",
        "properties": {
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          }
        },
        "title": "OccurrenceCompleteRequest",
        "type": "object"
      },
      "PortalSsoCallbackRequest": {
        "properties": {
          "code": {
            "title": "Code",
            "type": "string"
          },
          "redirect_uri": {
            "title": "Redirect Uri",
            "type": "string"
          }
        },
        "required": [
          "code",
          "redirect_uri"
        ],
        "title": "PortalSsoCallbackRequest",
        "type": "object"
      },
      "PortfolioInsightsRequest": {
        "description": "Summary data for AI portfolio analysis.",
        "properties": {
          "active_filters": {
            "description": "Human-readable descriptions of active filters",
            "items": {
              "type": "string"
            },
            "title": "Active Filters",
            "type": "array"
          },
          "attribute_summary": {
            "additionalProperties": true,
            "description": "Aggregated attribute distributions (e.g. hostingType counts)",
            "title": "Attribute Summary",
            "type": "object"
          },
          "color_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color By"
          },
          "group_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group By"
          },
          "groups": {
            "description": "List of {name, count, breakdown} dicts summarising each group",
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Groups",
            "type": "array"
          },
          "lifecycle_summary": {
            "additionalProperties": true,
            "description": "Counts by lifecycle phase",
            "title": "Lifecycle Summary",
            "type": "object"
          },
          "total_apps": {
            "default": 0,
            "minimum": 0.0,
            "title": "Total Apps",
            "type": "integer"
          }
        },
        "title": "PortfolioInsightsRequest",
        "type": "object"
      },
      "PortfolioInsightsResponse": {
        "properties": {
          "insights": {
            "description": "List of structured insight objects or plain strings",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/StructuredInsight"
                },
                {
                  "type": "string"
                },
                {}
              ]
            },
            "title": "Insights",
            "type": "array"
          },
          "model": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          }
        },
        "title": "PortfolioInsightsResponse",
        "type": "object"
      },
      "PpmBudgetLineCreate": {
        "properties": {
          "amount": {
            "default": 0,
            "title": "Amount",
            "type": "number"
          },
          "category": {
            "enum": [
              "capex",
              "opex"
            ],
            "title": "Category",
            "type": "string"
          },
          "fiscal_year": {
            "title": "Fiscal Year",
            "type": "integer"
          }
        },
        "required": [
          "fiscal_year",
          "category"
        ],
        "title": "PpmBudgetLineCreate",
        "type": "object"
      },
      "PpmBudgetLineOut": {
        "properties": {
          "amount": {
            "title": "Amount",
            "type": "number"
          },
          "category": {
            "title": "Category",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "fiscal_year": {
            "title": "Fiscal Year",
            "type": "integer"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "fiscal_year",
          "category",
          "amount",
          "created_at",
          "updated_at"
        ],
        "title": "PpmBudgetLineOut",
        "type": "object"
      },
      "PpmBudgetLineUpdate": {
        "properties": {
          "amount": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Amount"
          },
          "category": {
            "anyOf": [
              {
                "enum": [
                  "capex",
                  "opex"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "fiscal_year": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fiscal Year"
          }
        },
        "title": "PpmBudgetLineUpdate",
        "type": "object"
      },
      "PpmCostLineCreate": {
        "properties": {
          "actual": {
            "default": 0,
            "title": "Actual",
            "type": "number"
          },
          "category": {
            "enum": [
              "capex",
              "opex"
            ],
            "title": "Category",
            "type": "string"
          },
          "date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "planned": {
            "default": 0,
            "title": "Planned",
            "type": "number"
          }
        },
        "required": [
          "description",
          "category"
        ],
        "title": "PpmCostLineCreate",
        "type": "object"
      },
      "PpmCostLineOut": {
        "properties": {
          "actual": {
            "title": "Actual",
            "type": "number"
          },
          "category": {
            "title": "Category",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "planned": {
            "title": "Planned",
            "type": "number"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "description",
          "category",
          "planned",
          "actual",
          "created_at",
          "updated_at"
        ],
        "title": "PpmCostLineOut",
        "type": "object"
      },
      "PpmCostLineUpdate": {
        "properties": {
          "actual": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Actual"
          },
          "category": {
            "anyOf": [
              {
                "enum": [
                  "capex",
                  "opex"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "planned": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Planned"
          }
        },
        "title": "PpmCostLineUpdate",
        "type": "object"
      },
      "PpmDependencyCreate": {
        "properties": {
          "kind": {
            "const": "FS",
            "default": "FS",
            "title": "Kind",
            "type": "string"
          },
          "pred_id": {
            "title": "Pred Id",
            "type": "string"
          },
          "pred_kind": {
            "enum": [
              "task",
              "wbs"
            ],
            "title": "Pred Kind",
            "type": "string"
          },
          "succ_id": {
            "title": "Succ Id",
            "type": "string"
          },
          "succ_kind": {
            "enum": [
              "task",
              "wbs"
            ],
            "title": "Succ Kind",
            "type": "string"
          }
        },
        "required": [
          "pred_kind",
          "pred_id",
          "succ_kind",
          "succ_id"
        ],
        "title": "PpmDependencyCreate",
        "type": "object"
      },
      "PpmDependencyOut": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "kind": {
            "title": "Kind",
            "type": "string"
          },
          "pred_id": {
            "title": "Pred Id",
            "type": "string"
          },
          "pred_kind": {
            "enum": [
              "task",
              "wbs"
            ],
            "title": "Pred Kind",
            "type": "string"
          },
          "succ_id": {
            "title": "Succ Id",
            "type": "string"
          },
          "succ_kind": {
            "enum": [
              "task",
              "wbs"
            ],
            "title": "Succ Kind",
            "type": "string"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "pred_kind",
          "pred_id",
          "succ_kind",
          "succ_id",
          "kind",
          "created_at"
        ],
        "title": "PpmDependencyOut",
        "type": "object"
      },
      "PpmEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "PpmEnabledPayload",
        "type": "object"
      },
      "PpmGanttItem": {
        "properties": {
          "capex_actual": {
            "default": 0,
            "title": "Capex Actual",
            "type": "number"
          },
          "capex_planned": {
            "default": 0,
            "title": "Capex Planned",
            "type": "number"
          },
          "cost_actual": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Actual"
          },
          "cost_budget": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Budget"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "group_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "latest_report": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PpmStatusReportOut"
              },
              {
                "type": "null"
              }
            ]
          },
          "latest_report_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latest Report Id"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "opex_actual": {
            "default": 0,
            "title": "Opex Actual",
            "type": "number"
          },
          "opex_planned": {
            "default": 0,
            "title": "Opex Planned",
            "type": "number"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "stakeholders": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PpmGanttStakeholder"
            },
            "title": "Stakeholders",
            "type": "array"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          }
        },
        "required": [
          "id",
          "name",
          "subtype",
          "status",
          "parent_id",
          "start_date",
          "end_date",
          "cost_budget",
          "cost_actual"
        ],
        "title": "PpmGanttItem",
        "type": "object"
      },
      "PpmGanttStakeholder": {
        "properties": {
          "display_name": {
            "title": "Display Name",
            "type": "string"
          },
          "role_key": {
            "title": "Role Key",
            "type": "string"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "user_id",
          "display_name",
          "role_key"
        ],
        "title": "PpmGanttStakeholder",
        "type": "object"
      },
      "PpmGroupOption": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "icon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon"
          },
          "translations": {
            "additionalProperties": true,
            "default": {},
            "title": "Translations",
            "type": "object"
          },
          "type_key": {
            "title": "Type Key",
            "type": "string"
          },
          "type_label": {
            "title": "Type Label",
            "type": "string"
          }
        },
        "required": [
          "type_key",
          "type_label"
        ],
        "title": "PpmGroupOption",
        "type": "object"
      },
      "PpmPublicDashboard": {
        "description": "The three KPI values the board actually renders.\n\nThe internal dashboard also carries ``by_subtype``, ``by_status``,\n``health_cost``, ``health_scope`` and ``total_actual``; none of them is drawn\non the board, so none of them is published.",
        "properties": {
          "health_schedule": {
            "additionalProperties": {
              "type": "integer"
            },
            "default": {},
            "title": "Health Schedule",
            "type": "object"
          },
          "total_budget": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Budget"
          },
          "total_initiatives": {
            "title": "Total Initiatives",
            "type": "integer"
          }
        },
        "required": [
          "total_initiatives"
        ],
        "title": "PpmPublicDashboard",
        "type": "object"
      },
      "PpmPublicGroupOption": {
        "description": "A card type the board can group by.\n\nShips the metamodel entity (``label`` + ``translations``) rather than a\nresolved string: label resolution lives on the client, in the shared\nresolvers, so there is exactly one implementation of it and no second place\nfor the key-as-fallback bug to reappear.",
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "icon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon"
          },
          "label": {
            "title": "Label",
            "type": "string"
          },
          "translations": {
            "additionalProperties": true,
            "default": {},
            "title": "Translations",
            "type": "object"
          },
          "type_key": {
            "title": "Type Key",
            "type": "string"
          }
        },
        "required": [
          "type_key",
          "label"
        ],
        "title": "PpmPublicGroupOption",
        "type": "object"
      },
      "PpmPublicItem": {
        "description": "One board row.\n\n``id`` is the initiative's real card UUID \u2014 a portfolio portal links its rows\nto ``/ppm/{id}`` behind the login wall, so it is exposed by design. Every\nother identifier is withheld: ``group_id`` is an opaque per-response token,\nand the parent, report, reporter and stakeholder ids are not emitted at all.",
        "properties": {
          "capex_actual": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capex Actual"
          },
          "capex_planned": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capex Planned"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "group_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "latest_report": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PpmPublicReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "opex_actual": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Opex Actual"
          },
          "opex_planned": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Opex Planned"
          },
          "stakeholders": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PpmPublicPerson"
            },
            "title": "Stakeholders",
            "type": "array"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "PpmPublicItem",
        "type": "object"
      },
      "PpmPublicPerson": {
        "description": "A named person. Carries **no** user id and never an email address.",
        "properties": {
          "display_name": {
            "title": "Display Name",
            "type": "string"
          },
          "role_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role Key"
          }
        },
        "required": [
          "display_name"
        ],
        "title": "PpmPublicPerson",
        "type": "object"
      },
      "PpmPublicPortfolio": {
        "description": "Everything the public board needs, in one round-trip.",
        "properties": {
          "dashboard": {
            "$ref": "#/components/schemas/PpmPublicDashboard"
          },
          "group_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group By"
          },
          "group_options": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PpmPublicGroupOption"
            },
            "title": "Group Options",
            "type": "array"
          },
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PpmPublicItem"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "dashboard"
        ],
        "title": "PpmPublicPortfolio",
        "type": "object"
      },
      "PpmPublicReport": {
        "description": "The latest status report, as shown in the board's hover overview.\n\n``reporter`` is populated only when the portal enables people, and the three\nnarrative fields only when it enables narrative \u2014 the viewer's existing\ntruthiness guards then render the reduced popover with no extra branching.",
        "properties": {
          "accomplishments": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accomplishments"
          },
          "cost_health": {
            "title": "Cost Health",
            "type": "string"
          },
          "next_steps": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Steps"
          },
          "report_date": {
            "format": "date",
            "title": "Report Date",
            "type": "string"
          },
          "reporter": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PpmPublicPerson"
              },
              {
                "type": "null"
              }
            ]
          },
          "schedule_health": {
            "title": "Schedule Health",
            "type": "string"
          },
          "scope_health": {
            "title": "Scope Health",
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          }
        },
        "required": [
          "report_date",
          "schedule_health",
          "cost_health",
          "scope_health"
        ],
        "title": "PpmPublicReport",
        "type": "object"
      },
      "PpmRiskCreate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "impact": {
            "default": 3,
            "maximum": 5.0,
            "minimum": 1.0,
            "title": "Impact",
            "type": "integer"
          },
          "mitigation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mitigation"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "probability": {
            "default": 3,
            "maximum": 5.0,
            "minimum": 1.0,
            "title": "Probability",
            "type": "integer"
          },
          "status": {
            "default": "open",
            "enum": [
              "open",
              "mitigating",
              "mitigated",
              "closed",
              "accepted"
            ],
            "title": "Status",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "PpmRiskCreate",
        "type": "object"
      },
      "PpmRiskOut": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "impact": {
            "title": "Impact",
            "type": "integer"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "mitigation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mitigation"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "owner_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Name"
          },
          "probability": {
            "title": "Probability",
            "type": "integer"
          },
          "risk_score": {
            "title": "Risk Score",
            "type": "integer"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "title",
          "description",
          "probability",
          "impact",
          "risk_score",
          "mitigation",
          "owner_id",
          "status",
          "created_at",
          "updated_at"
        ],
        "title": "PpmRiskOut",
        "type": "object"
      },
      "PpmRiskUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "impact": {
            "anyOf": [
              {
                "maximum": 5.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Impact"
          },
          "mitigation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mitigation"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "probability": {
            "anyOf": [
              {
                "maximum": 5.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Probability"
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "open",
                  "mitigating",
                  "mitigated",
                  "closed",
                  "accepted"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "PpmRiskUpdate",
        "type": "object"
      },
      "PpmStatusReportCreate": {
        "properties": {
          "accomplishments": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accomplishments"
          },
          "cost_health": {
            "default": "onTrack",
            "enum": [
              "onTrack",
              "atRisk",
              "offTrack"
            ],
            "title": "Cost Health",
            "type": "string"
          },
          "next_steps": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Steps"
          },
          "report_date": {
            "format": "date",
            "title": "Report Date",
            "type": "string"
          },
          "schedule_health": {
            "default": "onTrack",
            "enum": [
              "onTrack",
              "atRisk",
              "offTrack"
            ],
            "title": "Schedule Health",
            "type": "string"
          },
          "scope_health": {
            "default": "onTrack",
            "enum": [
              "onTrack",
              "atRisk",
              "offTrack"
            ],
            "title": "Scope Health",
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          }
        },
        "required": [
          "report_date"
        ],
        "title": "PpmStatusReportCreate",
        "type": "object"
      },
      "PpmStatusReportOut": {
        "properties": {
          "accomplishments": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accomplishments"
          },
          "cost_health": {
            "title": "Cost Health",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "next_steps": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Steps"
          },
          "report_date": {
            "format": "date",
            "title": "Report Date",
            "type": "string"
          },
          "reporter": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ReporterOut"
              },
              {
                "type": "null"
              }
            ]
          },
          "reporter_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reporter Id"
          },
          "schedule_health": {
            "title": "Schedule Health",
            "type": "string"
          },
          "scope_health": {
            "title": "Scope Health",
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "report_date",
          "schedule_health",
          "cost_health",
          "scope_health",
          "summary",
          "accomplishments",
          "next_steps",
          "created_at",
          "updated_at"
        ],
        "title": "PpmStatusReportOut",
        "type": "object"
      },
      "PpmStatusReportUpdate": {
        "properties": {
          "accomplishments": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accomplishments"
          },
          "cost_health": {
            "anyOf": [
              {
                "enum": [
                  "onTrack",
                  "atRisk",
                  "offTrack"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cost Health"
          },
          "next_steps": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Steps"
          },
          "report_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Report Date"
          },
          "schedule_health": {
            "anyOf": [
              {
                "enum": [
                  "onTrack",
                  "atRisk",
                  "offTrack"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schedule Health"
          },
          "scope_health": {
            "anyOf": [
              {
                "enum": [
                  "onTrack",
                  "atRisk",
                  "offTrack"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Scope Health"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          }
        },
        "title": "PpmStatusReportUpdate",
        "type": "object"
      },
      "PpmTaskCommentCreate": {
        "properties": {
          "content": {
            "maxLength": 10000,
            "minLength": 1,
            "title": "Content",
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "title": "PpmTaskCommentCreate",
        "type": "object"
      },
      "PpmTaskCommentOut": {
        "properties": {
          "content": {
            "title": "Content",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "task_id": {
            "title": "Task Id",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "user_display_name": {
            "title": "User Display Name",
            "type": "string"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "task_id",
          "user_id",
          "user_display_name",
          "content",
          "created_at",
          "updated_at"
        ],
        "title": "PpmTaskCommentOut",
        "type": "object"
      },
      "PpmTaskCommentUpdate": {
        "properties": {
          "content": {
            "maxLength": 10000,
            "minLength": 1,
            "title": "Content",
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "title": "PpmTaskCommentUpdate",
        "type": "object"
      },
      "PpmTaskCreate": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "priority": {
            "default": "medium",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Priority",
            "type": "string"
          },
          "sort_order": {
            "default": 0,
            "title": "Sort Order",
            "type": "integer"
          },
          "start_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "status": {
            "default": "todo",
            "enum": [
              "todo",
              "in_progress",
              "done",
              "blocked"
            ],
            "title": "Status",
            "type": "string"
          },
          "tags": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "wbs_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wbs Id"
          }
        },
        "required": [
          "title"
        ],
        "title": "PpmTaskCreate",
        "type": "object"
      },
      "PpmTaskOut": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "assignee_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Name"
          },
          "comment_count": {
            "default": 0,
            "title": "Comment Count",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "priority": {
            "title": "Priority",
            "type": "string"
          },
          "sort_order": {
            "title": "Sort Order",
            "type": "integer"
          },
          "start_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "wbs_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wbs Id"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "title",
          "description",
          "status",
          "priority",
          "assignee_id",
          "due_date",
          "sort_order",
          "tags",
          "created_at",
          "updated_at"
        ],
        "title": "PpmTaskOut",
        "type": "object"
      },
      "PpmTaskUpdate": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "due_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "priority": {
            "anyOf": [
              {
                "enum": [
                  "critical",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Priority"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "start_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "todo",
                  "in_progress",
                  "done",
                  "blocked"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "wbs_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wbs Id"
          }
        },
        "title": "PpmTaskUpdate",
        "type": "object"
      },
      "PpmWbsCreate": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "completion": {
            "default": 0,
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Completion",
            "type": "number"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "end_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "is_milestone": {
            "default": false,
            "title": "Is Milestone",
            "type": "boolean"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "sort_order": {
            "default": 0,
            "title": "Sort Order",
            "type": "integer"
          },
          "start_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "title": {
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "PpmWbsCreate",
        "type": "object"
      },
      "PpmWbsOut": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "assignee_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Name"
          },
          "completion": {
            "default": 0,
            "title": "Completion",
            "type": "number"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "end_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initiative_id": {
            "title": "Initiative Id",
            "type": "string"
          },
          "is_milestone": {
            "default": false,
            "title": "Is Milestone",
            "type": "boolean"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "progress": {
            "default": 0,
            "title": "Progress",
            "type": "number"
          },
          "sort_order": {
            "title": "Sort Order",
            "type": "integer"
          },
          "start_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "task_count": {
            "default": 0,
            "title": "Task Count",
            "type": "integer"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "initiative_id",
          "parent_id",
          "title",
          "description",
          "start_date",
          "end_date",
          "sort_order",
          "created_at",
          "updated_at"
        ],
        "title": "PpmWbsOut",
        "type": "object"
      },
      "PpmWbsUpdate": {
        "properties": {
          "assignee_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assignee Id"
          },
          "completion": {
            "anyOf": [
              {
                "maximum": 100.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completion"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "end_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "is_milestone": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Milestone"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "start_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "PpmWbsUpdate",
        "type": "object"
      },
      "PreviewPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/app__api__v1__migration__StagedRecordOut"
            },
            "title": "Items",
            "type": "array"
          },
          "limit": {
            "title": "Limit",
            "type": "integer"
          },
          "offset": {
            "title": "Offset",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "offset",
          "limit"
        ],
        "title": "PreviewPage",
        "type": "object"
      },
      "PrincipleCreate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "implications": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Implications"
          },
          "is_active": {
            "default": true,
            "title": "Is Active",
            "type": "boolean"
          },
          "rationale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rationale"
          },
          "sort_order": {
            "default": 0,
            "title": "Sort Order",
            "type": "integer"
          },
          "title": {
            "maxLength": 300,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "PrincipleCreate",
        "type": "object"
      },
      "PrincipleUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "implications": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Implications"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "rationale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rationale"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "PrincipleUpdate",
        "type": "object"
      },
      "ProcessAssessmentCreate": {
        "properties": {
          "action_items": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Action Items"
          },
          "assessment_date": {
            "format": "date",
            "title": "Assessment Date",
            "type": "string"
          },
          "automation": {
            "title": "Automation",
            "type": "integer"
          },
          "compliance": {
            "title": "Compliance",
            "type": "integer"
          },
          "effectiveness": {
            "title": "Effectiveness",
            "type": "integer"
          },
          "efficiency": {
            "title": "Efficiency",
            "type": "integer"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          },
          "overall_score": {
            "title": "Overall Score",
            "type": "integer"
          }
        },
        "required": [
          "assessment_date",
          "overall_score",
          "efficiency",
          "effectiveness",
          "compliance",
          "automation"
        ],
        "title": "ProcessAssessmentCreate",
        "type": "object"
      },
      "ProcessAssessmentUpdate": {
        "properties": {
          "action_items": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Action Items"
          },
          "automation": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Automation"
          },
          "compliance": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Compliance"
          },
          "effectiveness": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Effectiveness"
          },
          "efficiency": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Efficiency"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          },
          "overall_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Overall Score"
          }
        },
        "title": "ProcessAssessmentUpdate",
        "type": "object"
      },
      "ProcessFlowVersionCreate": {
        "description": "Create a new draft process flow.",
        "properties": {
          "based_on_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Based On Id"
          },
          "bpmn_xml": {
            "title": "Bpmn Xml",
            "type": "string"
          },
          "svg_thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Svg Thumbnail"
          }
        },
        "required": [
          "bpmn_xml"
        ],
        "title": "ProcessFlowVersionCreate",
        "type": "object"
      },
      "ProcessFlowVersionUpdate": {
        "description": "Update an existing draft process flow.",
        "properties": {
          "bpmn_xml": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bpmn Xml"
          },
          "svg_thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Svg Thumbnail"
          }
        },
        "title": "ProcessFlowVersionUpdate",
        "type": "object"
      },
      "ProcessFlowVersionWithdraw": {
        "description": "Withdraw (unpublish) a published process flow.\n\nThe reason is mandatory and is stored verbatim on the version: a withdrawal\nwithout a recorded justification is not auditable. ``min_length`` only stops\nan empty submission \u2014 the endpoint additionally rejects whitespace-only\ninput, mirroring the risk-acceptance rationale check in ``risks.py``.",
        "properties": {
          "reason": {
            "maxLength": 2000,
            "minLength": 10,
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "reason"
        ],
        "title": "ProcessFlowVersionWithdraw",
        "type": "object"
      },
      "RecalcCalculationReport": {
        "properties": {
          "calculation_id": {
            "title": "Calculation Id",
            "type": "string"
          },
          "failed": {
            "title": "Failed",
            "type": "integer"
          },
          "failures": {
            "items": {
              "$ref": "#/components/schemas/RecalcFailureGroup"
            },
            "title": "Failures",
            "type": "array"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "succeeded": {
            "title": "Succeeded",
            "type": "integer"
          },
          "target_field": {
            "title": "Target Field",
            "type": "string"
          }
        },
        "required": [
          "calculation_id",
          "name",
          "target_field",
          "succeeded",
          "failed"
        ],
        "title": "RecalcCalculationReport",
        "type": "object"
      },
      "RecalcCardRef": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "RecalcCardRef",
        "type": "object"
      },
      "RecalcFailureGroup": {
        "description": "One distinct error message, and the cards it was raised on.\n\nGrouped rather than one row per card: a formula that is wrong is wrong the\nsame way on every card, and a list of twenty-one identical messages hides\nthat it is a single fix.",
        "properties": {
          "cards": {
            "items": {
              "$ref": "#/components/schemas/RecalcCardRef"
            },
            "title": "Cards",
            "type": "array"
          },
          "cards_truncated": {
            "default": false,
            "title": "Cards Truncated",
            "type": "boolean"
          },
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "error": {
            "title": "Error",
            "type": "string"
          }
        },
        "required": [
          "error",
          "count"
        ],
        "title": "RecalcFailureGroup",
        "type": "object"
      },
      "RecalcReport": {
        "properties": {
          "calculations": {
            "items": {
              "$ref": "#/components/schemas/RecalcCalculationReport"
            },
            "title": "Calculations",
            "type": "array"
          },
          "calculations_failed": {
            "title": "Calculations Failed",
            "type": "integer"
          },
          "calculations_succeeded": {
            "title": "Calculations Succeeded",
            "type": "integer"
          },
          "cards_processed": {
            "title": "Cards Processed",
            "type": "integer"
          }
        },
        "required": [
          "cards_processed",
          "calculations_succeeded",
          "calculations_failed"
        ],
        "title": "RecalcReport",
        "type": "object"
      },
      "RegisterRequest": {
        "properties": {
          "display_name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Display Name",
            "type": "string"
          },
          "email": {
            "format": "email",
            "title": "Email",
            "type": "string"
          },
          "password": {
            "title": "Password",
            "type": "string"
          }
        },
        "required": [
          "email",
          "display_name",
          "password"
        ],
        "title": "RegisterRequest",
        "type": "object"
      },
      "RegistrationPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "RegistrationPayload",
        "type": "object"
      },
      "RejectRequest": {
        "properties": {
          "comment": {
            "title": "Comment",
            "type": "string"
          }
        },
        "required": [
          "comment"
        ],
        "title": "RejectRequest",
        "type": "object"
      },
      "RelationBulkOperation": {
        "description": "One row of a bulk-relation request.",
        "properties": {
          "action": {
            "default": "upsert",
            "enum": [
              "upsert",
              "delete"
            ],
            "title": "Action",
            "type": "string"
          },
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "row_index": {
            "title": "Row Index",
            "type": "integer"
          },
          "source": {
            "$ref": "#/components/schemas/RelationRefInput"
          },
          "target": {
            "$ref": "#/components/schemas/RelationRefInput"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "row_index",
          "type",
          "source",
          "target"
        ],
        "title": "RelationBulkOperation",
        "type": "object"
      },
      "RelationBulkRequest": {
        "properties": {
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "operations": {
            "items": {
              "$ref": "#/components/schemas/RelationBulkOperation"
            },
            "maxItems": 5000,
            "minItems": 1,
            "title": "Operations",
            "type": "array"
          }
        },
        "required": [
          "operations"
        ],
        "title": "RelationBulkRequest",
        "type": "object"
      },
      "RelationBulkResponse": {
        "properties": {
          "deleted": {
            "title": "Deleted",
            "type": "integer"
          },
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "failed": {
            "title": "Failed",
            "type": "integer"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/RelationBulkResult"
            },
            "title": "Results",
            "type": "array"
          },
          "upserted": {
            "title": "Upserted",
            "type": "integer"
          }
        },
        "required": [
          "results",
          "upserted",
          "deleted",
          "failed"
        ],
        "title": "RelationBulkResponse",
        "type": "object"
      },
      "RelationBulkResult": {
        "properties": {
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "relation_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Relation Id"
          },
          "row_index": {
            "title": "Row Index",
            "type": "integer"
          },
          "status": {
            "enum": [
              "upserted",
              "deleted",
              "noop",
              "failed"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "row_index",
          "status"
        ],
        "title": "RelationBulkResult",
        "type": "object"
      },
      "RelationCreate": {
        "properties": {
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "source_id": {
            "title": "Source Id",
            "type": "string"
          },
          "target_id": {
            "title": "Target Id",
            "type": "string"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "type",
          "source_id",
          "target_id"
        ],
        "title": "RelationCreate",
        "type": "object"
      },
      "RelationRefInput": {
        "description": "Either a resolved UUID or a name+path tuple. Exactly one of `id` or\n(`type` + `name`) must be supplied.",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "parent_path": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Path"
          },
          "type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Type"
          }
        },
        "title": "RelationRefInput",
        "type": "object"
      },
      "RelationResponse": {
        "properties": {
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "source": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CardRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_id": {
            "title": "Source Id",
            "type": "string"
          },
          "target": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CardRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "target_id": {
            "title": "Target Id",
            "type": "string"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "type",
          "source_id",
          "target_id"
        ],
        "title": "RelationResponse",
        "type": "object"
      },
      "RelationUpdate": {
        "properties": {
          "attributes": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attributes"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          }
        },
        "title": "RelationUpdate",
        "type": "object"
      },
      "ReporterOut": {
        "properties": {
          "display_name": {
            "title": "Display Name",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "display_name"
        ],
        "title": "ReporterOut",
        "type": "object"
      },
      "RescueAccessRequest": {
        "properties": {
          "break_glass": {
            "default": false,
            "title": "Break Glass",
            "type": "boolean"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "operator_email": {
            "maxLength": 320,
            "title": "Operator Email",
            "type": "string"
          },
          "operator_name": {
            "maxLength": 200,
            "title": "Operator Name",
            "type": "string"
          },
          "reason": {
            "maxLength": 2000,
            "title": "Reason",
            "type": "string"
          },
          "request_id": {
            "maxLength": 64,
            "minLength": 8,
            "title": "Request Id",
            "type": "string"
          }
        },
        "required": [
          "request_id",
          "operator_email",
          "operator_name",
          "reason",
          "expires_at"
        ],
        "title": "RescueAccessRequest",
        "type": "object"
      },
      "RescueAccessRevoke": {
        "properties": {
          "request_id": {
            "maxLength": 64,
            "minLength": 8,
            "title": "Request Id",
            "type": "string"
          }
        },
        "required": [
          "request_id"
        ],
        "title": "RescueAccessRevoke",
        "type": "object"
      },
      "ResetPasswordRequest": {
        "properties": {
          "password": {
            "title": "Password",
            "type": "string"
          },
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token",
          "password"
        ],
        "title": "ResetPasswordRequest",
        "type": "object"
      },
      "ResourceBucket": {
        "description": "Count (and, for files, byte total) grouped by a single key.\n\n``key`` is ``None`` for resources with no category / link type set.",
        "properties": {
          "bytes": {
            "default": 0,
            "title": "Bytes",
            "type": "integer"
          },
          "count": {
            "default": 0,
            "title": "Count",
            "type": "integer"
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key"
          }
        },
        "title": "ResourceBucket",
        "type": "object"
      },
      "ResourceBulkDelete": {
        "properties": {
          "refs": {
            "items": {
              "$ref": "#/components/schemas/ResourceRef"
            },
            "maxItems": 500,
            "minItems": 1,
            "title": "Refs",
            "type": "array"
          }
        },
        "required": [
          "refs"
        ],
        "title": "ResourceBulkDelete",
        "type": "object"
      },
      "ResourceBulkDeleteResult": {
        "description": "Mirrors ``POST /users/bulk-delete``: rows the caller may not touch\nare reported back rather than failing the whole request.",
        "properties": {
          "deleted": {
            "title": "Deleted",
            "type": "integer"
          },
          "skipped": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ResourceSkipped"
            },
            "title": "Skipped",
            "type": "array"
          }
        },
        "required": [
          "deleted"
        ],
        "title": "ResourceBulkDeleteResult",
        "type": "object"
      },
      "ResourceCardTypeBucket": {
        "description": "Per-card-type rollup \u2014 files and links counted separately.",
        "properties": {
          "bytes": {
            "default": 0,
            "title": "Bytes",
            "type": "integer"
          },
          "file_count": {
            "default": 0,
            "title": "File Count",
            "type": "integer"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "link_count": {
            "default": 0,
            "title": "Link Count",
            "type": "integer"
          }
        },
        "required": [
          "key"
        ],
        "title": "ResourceCardTypeBucket",
        "type": "object"
      },
      "ResourceLargestFile": {
        "properties": {
          "card_id": {
            "format": "uuid",
            "title": "Card Id",
            "type": "string"
          },
          "card_name": {
            "title": "Card Name",
            "type": "string"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "size": {
            "title": "Size",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "name",
          "size",
          "card_id",
          "card_name"
        ],
        "title": "ResourceLargestFile",
        "type": "object"
      },
      "ResourceListPage": {
        "description": "Paginated response for ``GET /resources``. Mirrors the\n``{items, total, page, page_size}`` envelope used by ``GET /cards``\nand the rest of the paginated read endpoints.",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ResourceOut"
            },
            "title": "Items",
            "type": "array"
          },
          "page": {
            "title": "Page",
            "type": "integer"
          },
          "page_size": {
            "title": "Page Size",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "ResourceListPage",
        "type": "object"
      },
      "ResourceOut": {
        "description": "One resource row in the unified list.\n\n``mime_type`` / ``size`` are always ``None`` for links, ``url`` is\nalways ``None`` for files. The binary payload of a file attachment is\nnever included \u2014 download it from\n``GET /file-attachments/{id}/download``.",
        "properties": {
          "card_archived": {
            "title": "Card Archived",
            "type": "boolean"
          },
          "card_id": {
            "format": "uuid",
            "title": "Card Id",
            "type": "string"
          },
          "card_name": {
            "title": "Card Name",
            "type": "string"
          },
          "card_type": {
            "title": "Card Type",
            "type": "string"
          },
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "created_by": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "creator_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Creator Name"
          },
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "file",
              "link"
            ],
            "title": "Kind",
            "type": "string"
          },
          "mime_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mime Type"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "required": [
          "id",
          "kind",
          "card_id",
          "card_name",
          "card_type",
          "card_archived",
          "name"
        ],
        "title": "ResourceOut",
        "type": "object"
      },
      "ResourceRef": {
        "description": "Addresses one resource. The kind is required because file and\nlink ids live in different tables and could theoretically collide.",
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "file",
              "link"
            ],
            "title": "Kind",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id"
        ],
        "title": "ResourceRef",
        "type": "object"
      },
      "ResourceSkipped": {
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "file",
              "link"
            ],
            "title": "Kind",
            "type": "string"
          },
          "reason": {
            "title": "Reason",
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "reason"
        ],
        "title": "ResourceSkipped",
        "type": "object"
      },
      "ResourceStats": {
        "description": "Storage + usage rollup for ``GET /resources/stats``.\n\nHonours the same filters as ``GET /resources`` so the figures always\ndescribe what the caller is currently looking at.",
        "properties": {
          "by_card_type": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ResourceCardTypeBucket"
            },
            "title": "By Card Type",
            "type": "array"
          },
          "by_category": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ResourceBucket"
            },
            "title": "By Category",
            "type": "array"
          },
          "by_link_type": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ResourceBucket"
            },
            "title": "By Link Type",
            "type": "array"
          },
          "card_count": {
            "default": 0,
            "title": "Card Count",
            "type": "integer"
          },
          "file_count": {
            "default": 0,
            "title": "File Count",
            "type": "integer"
          },
          "largest_files": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ResourceLargestFile"
            },
            "title": "Largest Files",
            "type": "array"
          },
          "link_count": {
            "default": 0,
            "title": "Link Count",
            "type": "integer"
          },
          "total_bytes": {
            "default": 0,
            "title": "Total Bytes",
            "type": "integer"
          }
        },
        "title": "ResourceStats",
        "type": "object"
      },
      "ResourceTypeCreate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "icon": {
            "anyOf": [
              {
                "maxLength": 100,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon"
          },
          "is_enabled": {
            "default": true,
            "title": "Is Enabled",
            "type": "boolean"
          },
          "key": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Key",
            "type": "string"
          },
          "kind": {
            "maxLength": 20,
            "minLength": 1,
            "title": "Kind",
            "type": "string"
          },
          "label": {
            "maxLength": 300,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "sort_order": {
            "default": 0,
            "title": "Sort Order",
            "type": "integer"
          },
          "translations": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Translations"
          }
        },
        "required": [
          "kind",
          "key",
          "label"
        ],
        "title": "ResourceTypeCreate",
        "type": "object"
      },
      "ResourceTypeUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "icon": {
            "anyOf": [
              {
                "maxLength": 100,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon"
          },
          "is_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Enabled"
          },
          "label": {
            "anyOf": [
              {
                "maxLength": 300,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "translations": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Translations"
          }
        },
        "title": "ResourceTypeUpdate",
        "type": "object"
      },
      "RestoreImpactPassenger": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "role": {
            "enum": [
              "child",
              "related"
            ],
            "title": "Role",
            "type": "string"
          },
          "subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subtype"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "type",
          "role"
        ],
        "title": "RestoreImpactPassenger",
        "type": "object"
      },
      "RestoreImpactResponse": {
        "properties": {
          "passengers": {
            "items": {
              "$ref": "#/components/schemas/RestoreImpactPassenger"
            },
            "title": "Passengers",
            "type": "array"
          }
        },
        "required": [
          "passengers"
        ],
        "title": "RestoreImpactResponse",
        "type": "object"
      },
      "RiskCardLinkOut": {
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "card_name": {
            "title": "Card Name",
            "type": "string"
          },
          "card_type": {
            "title": "Card Type",
            "type": "string"
          },
          "role": {
            "enum": [
              "affected",
              "contributing",
              "owner_of_control"
            ],
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "card_id",
          "card_name",
          "card_type",
          "role"
        ],
        "title": "RiskCardLinkOut",
        "type": "object"
      },
      "RiskCardLinkRequest": {
        "properties": {
          "card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Card Ids",
            "type": "array"
          },
          "role": {
            "default": "affected",
            "enum": [
              "affected",
              "contributing",
              "owner_of_control"
            ],
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "card_ids"
        ],
        "title": "RiskCardLinkRequest",
        "type": "object"
      },
      "RiskCreate": {
        "description": "Manual risk creation payload.",
        "properties": {
          "card_ids": {
            "items": {
              "type": "string"
            },
            "title": "Card Ids",
            "type": "array"
          },
          "category": {
            "default": "operational",
            "enum": [
              "security",
              "compliance",
              "operational",
              "technology",
              "financial",
              "reputational",
              "strategic"
            ],
            "title": "Category",
            "type": "string"
          },
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "initial_impact": {
            "default": "medium",
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Initial Impact",
            "type": "string"
          },
          "initial_probability": {
            "default": "medium",
            "enum": [
              "very_high",
              "high",
              "medium",
              "low"
            ],
            "title": "Initial Probability",
            "type": "string"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "target_resolution_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Resolution Date"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title"
        ],
        "title": "RiskCreate",
        "type": "object"
      },
      "RiskImportItem": {
        "description": "One spreadsheet row for the risk importer.\n\nEnum-ish fields are typed as ``str`` (not ``Literal``) on purpose: a bad\nvalue should produce a clean per-row error in the response rather than a\n422 that fails the entire batch. The handler validates them against the\n``*_VALUES`` tuples in ``risk_service``.",
        "properties": {
          "card_names": {
            "items": {
              "type": "string"
            },
            "title": "Card Names",
            "type": "array"
          },
          "category": {
            "default": "operational",
            "title": "Category",
            "type": "string"
          },
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "initial_impact": {
            "default": "medium",
            "title": "Initial Impact",
            "type": "string"
          },
          "initial_probability": {
            "default": "medium",
            "title": "Initial Probability",
            "type": "string"
          },
          "owner_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Email"
          },
          "owner_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Name"
          },
          "reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference"
          },
          "residual_impact": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Impact"
          },
          "residual_probability": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Probability"
          },
          "row_index": {
            "title": "Row Index",
            "type": "integer"
          },
          "status": {
            "default": "identified",
            "title": "Status",
            "type": "string"
          },
          "target_resolution_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Resolution Date"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "row_index",
          "title"
        ],
        "title": "RiskImportItem",
        "type": "object"
      },
      "RiskImportRequest": {
        "properties": {
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/RiskImportItem"
            },
            "maxItems": 2000,
            "minItems": 1,
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "items"
        ],
        "title": "RiskImportRequest",
        "type": "object"
      },
      "RiskImportResponse": {
        "properties": {
          "created": {
            "title": "Created",
            "type": "integer"
          },
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "failed": {
            "title": "Failed",
            "type": "integer"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/RiskImportResult"
            },
            "title": "Results",
            "type": "array"
          },
          "skipped": {
            "default": 0,
            "title": "Skipped",
            "type": "integer"
          }
        },
        "required": [
          "results",
          "created",
          "failed"
        ],
        "title": "RiskImportResponse",
        "type": "object"
      },
      "RiskImportResult": {
        "properties": {
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Id"
          },
          "reference": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reference"
          },
          "row_index": {
            "title": "Row Index",
            "type": "integer"
          },
          "status": {
            "enum": [
              "created",
              "skipped",
              "failed"
            ],
            "title": "Status",
            "type": "string"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "title": "Warnings",
            "type": "array"
          }
        },
        "required": [
          "row_index",
          "status"
        ],
        "title": "RiskImportResult",
        "type": "object"
      },
      "RiskListPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/RiskOut"
            },
            "title": "Items",
            "type": "array"
          },
          "page": {
            "title": "Page",
            "type": "integer"
          },
          "page_size": {
            "title": "Page Size",
            "type": "integer"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "page_size"
        ],
        "title": "RiskListPage",
        "type": "object"
      },
      "RiskMetricsOut": {
        "properties": {
          "by_category": {
            "additionalProperties": {
              "type": "integer"
            },
            "title": "By Category",
            "type": "object"
          },
          "by_level": {
            "additionalProperties": {
              "type": "integer"
            },
            "title": "By Level",
            "type": "object"
          },
          "by_status": {
            "additionalProperties": {
              "type": "integer"
            },
            "title": "By Status",
            "type": "object"
          },
          "created_this_month": {
            "default": 0,
            "title": "Created This Month",
            "type": "integer"
          },
          "initial_matrix": {
            "items": {
              "items": {
                "type": "integer"
              },
              "type": "array"
            },
            "title": "Initial Matrix",
            "type": "array"
          },
          "overdue": {
            "default": 0,
            "title": "Overdue",
            "type": "integer"
          },
          "residual_matrix": {
            "items": {
              "items": {
                "type": "integer"
              },
              "type": "array"
            },
            "title": "Residual Matrix",
            "type": "array"
          },
          "total": {
            "default": 0,
            "title": "Total",
            "type": "integer"
          }
        },
        "title": "RiskMetricsOut",
        "type": "object"
      },
      "RiskOut": {
        "properties": {
          "acceptance_rationale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Acceptance Rationale"
          },
          "accepted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted At"
          },
          "accepted_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted By"
          },
          "cards": {
            "items": {
              "$ref": "#/components/schemas/RiskCardLinkOut"
            },
            "title": "Cards",
            "type": "array"
          },
          "category": {
            "enum": [
              "security",
              "compliance",
              "operational",
              "technology",
              "financial",
              "reputational",
              "strategic"
            ],
            "title": "Category",
            "type": "string"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "initial_impact": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Initial Impact",
            "type": "string"
          },
          "initial_level": {
            "enum": [
              "critical",
              "high",
              "medium",
              "low"
            ],
            "title": "Initial Level",
            "type": "string"
          },
          "initial_probability": {
            "enum": [
              "very_high",
              "high",
              "medium",
              "low"
            ],
            "title": "Initial Probability",
            "type": "string"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "owner_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Name"
          },
          "reference": {
            "title": "Reference",
            "type": "string"
          },
          "residual_impact": {
            "anyOf": [
              {
                "enum": [
                  "critical",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Impact"
          },
          "residual_level": {
            "anyOf": [
              {
                "enum": [
                  "critical",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Level"
          },
          "residual_probability": {
            "anyOf": [
              {
                "enum": [
                  "very_high",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Probability"
          },
          "source_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Ref"
          },
          "source_type": {
            "enum": [
              "manual",
              "compliance",
              "extension"
            ],
            "title": "Source Type",
            "type": "string"
          },
          "status": {
            "enum": [
              "identified",
              "analysed",
              "mitigation_planned",
              "in_progress",
              "mitigated",
              "monitoring",
              "accepted",
              "closed"
            ],
            "title": "Status",
            "type": "string"
          },
          "target_resolution_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Resolution Date"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "updated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "required": [
          "id",
          "reference",
          "title",
          "description",
          "category",
          "source_type",
          "source_ref",
          "initial_probability",
          "initial_impact",
          "initial_level",
          "status"
        ],
        "title": "RiskOut",
        "type": "object"
      },
      "RiskPromoteRequest": {
        "description": "Overrides for the promote-from-finding endpoints. All optional.",
        "properties": {
          "category": {
            "anyOf": [
              {
                "enum": [
                  "security",
                  "compliance",
                  "operational",
                  "technology",
                  "financial",
                  "reputational",
                  "strategic"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "initial_impact": {
            "anyOf": [
              {
                "enum": [
                  "critical",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initial Impact"
          },
          "initial_probability": {
            "anyOf": [
              {
                "enum": [
                  "very_high",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initial Probability"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "target_resolution_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Resolution Date"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "RiskPromoteRequest",
        "type": "object"
      },
      "RiskUpdate": {
        "description": "Partial risk update. Derived ``initial_level`` / ``residual_level``\nare re-computed server-side and ignored here.",
        "properties": {
          "acceptance_rationale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Acceptance Rationale"
          },
          "category": {
            "anyOf": [
              {
                "enum": [
                  "security",
                  "compliance",
                  "operational",
                  "technology",
                  "financial",
                  "reputational",
                  "strategic"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "initial_impact": {
            "anyOf": [
              {
                "enum": [
                  "critical",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initial Impact"
          },
          "initial_probability": {
            "anyOf": [
              {
                "enum": [
                  "very_high",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initial Probability"
          },
          "owner_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Owner Id"
          },
          "residual_impact": {
            "anyOf": [
              {
                "enum": [
                  "critical",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Impact"
          },
          "residual_probability": {
            "anyOf": [
              {
                "enum": [
                  "very_high",
                  "high",
                  "medium",
                  "low"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Residual Probability"
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "identified",
                  "analysed",
                  "mitigation_planned",
                  "in_progress",
                  "mitigated",
                  "monitoring",
                  "accepted",
                  "closed"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "target_resolution_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Resolution Date"
          },
          "title": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "RiskUpdate",
        "type": "object"
      },
      "RoleCreate": {
        "properties": {
          "color": {
            "default": "#757575",
            "title": "Color",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "is_default": {
            "default": false,
            "title": "Is Default",
            "type": "boolean"
          },
          "key": {
            "maxLength": 50,
            "minLength": 3,
            "title": "Key",
            "type": "string"
          },
          "label": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "permissions": {
            "additionalProperties": {
              "type": "boolean"
            },
            "default": {},
            "title": "Permissions",
            "type": "object"
          }
        },
        "required": [
          "key",
          "label"
        ],
        "title": "RoleCreate",
        "type": "object"
      },
      "RoleUpdate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "is_default": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Default"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "permissions": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "boolean"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Permissions"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          }
        },
        "title": "RoleUpdate",
        "type": "object"
      },
      "RollbackBody": {
        "properties": {
          "dry_run": {
            "default": true,
            "title": "Dry Run",
            "type": "boolean"
          },
          "force": {
            "default": false,
            "title": "Force",
            "type": "boolean"
          }
        },
        "title": "RollbackBody",
        "type": "object"
      },
      "SavedReportCreate": {
        "properties": {
          "config": {
            "additionalProperties": true,
            "title": "Config",
            "type": "object"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "report_type": {
            "title": "Report Type",
            "type": "string"
          },
          "shared_with": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shared With"
          },
          "thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thumbnail"
          },
          "visibility": {
            "default": "private",
            "title": "Visibility",
            "type": "string"
          }
        },
        "required": [
          "name",
          "report_type",
          "config"
        ],
        "title": "SavedReportCreate",
        "type": "object"
      },
      "SavedReportUpdate": {
        "properties": {
          "config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Config"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "shared_with": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shared With"
          },
          "thumbnail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Thumbnail"
          },
          "visibility": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Visibility"
          }
        },
        "title": "SavedReportUpdate",
        "type": "object"
      },
      "SecurityOverviewOut": {
        "properties": {
          "compliance_by_status": {
            "additionalProperties": {
              "additionalProperties": {
                "type": "integer"
              },
              "type": "object"
            },
            "title": "Compliance By Status",
            "type": "object"
          },
          "compliance_run": {
            "$ref": "#/components/schemas/SecurityScanRunOut"
          },
          "compliance_scores": {
            "additionalProperties": {
              "type": "integer"
            },
            "title": "Compliance Scores",
            "type": "object"
          }
        },
        "title": "SecurityOverviewOut",
        "type": "object"
      },
      "SecurityScanRequest": {
        "description": "Options for an on-demand compliance scan.",
        "properties": {
          "regulations": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Regulations"
          }
        },
        "title": "SecurityScanRequest",
        "type": "object"
      },
      "SecurityScanRunOut": {
        "description": "Summary of the latest compliance scan run.",
        "properties": {
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "progress": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Progress"
          },
          "run_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "summary": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary"
          }
        },
        "title": "SecurityScanRunOut",
        "type": "object"
      },
      "SeparateApproverPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "SeparateApproverPayload",
        "type": "object"
      },
      "SetPasswordRequest": {
        "properties": {
          "password": {
            "title": "Password",
            "type": "string"
          },
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token",
          "password"
        ],
        "title": "SetPasswordRequest",
        "type": "object"
      },
      "SignatureRequest": {
        "properties": {
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "user_ids": {
            "items": {
              "type": "string"
            },
            "title": "User Ids",
            "type": "array"
          }
        },
        "required": [
          "user_ids"
        ],
        "title": "SignatureRequest",
        "type": "object"
      },
      "SnowLinkOut": {
        "description": "A resolved deep link from a card to its ServiceNow record.",
        "properties": {
          "connection_name": {
            "title": "Connection Name",
            "type": "string"
          },
          "last_synced_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Synced At"
          },
          "sys_id": {
            "title": "Sys Id",
            "type": "string"
          },
          "table": {
            "title": "Table",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "connection_name",
          "table",
          "sys_id",
          "url"
        ],
        "title": "SnowLinkOut",
        "type": "object"
      },
      "SoAWCreate": {
        "additionalProperties": false,
        "properties": {
          "document_info": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document Info"
          },
          "initiative_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initiative Id"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "sections": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sections"
          },
          "status": {
            "default": "draft",
            "title": "Status",
            "type": "string"
          },
          "version_history": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version History"
          }
        },
        "required": [
          "name"
        ],
        "title": "SoAWCreate",
        "type": "object"
      },
      "SoAWUpdate": {
        "additionalProperties": false,
        "properties": {
          "document_info": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Document Info"
          },
          "initiative_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Initiative Id"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "sections": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sections"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "version_history": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version History"
          }
        },
        "title": "SoAWUpdate",
        "type": "object"
      },
      "SourceFieldRow": {
        "description": "One source-platform custom field discovered in the snapshot.",
        "properties": {
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "mapped_to": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mapped To"
          },
          "native_data_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Native Data Type"
          },
          "source_field_key": {
            "title": "Source Field Key",
            "type": "string"
          },
          "target_tea_type": {
            "title": "Target Tea Type",
            "type": "string"
          },
          "tea_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tea Type"
          }
        },
        "required": [
          "source_field_key",
          "label",
          "native_data_type",
          "tea_type",
          "target_tea_type",
          "mapped_to"
        ],
        "title": "SourceFieldRow",
        "type": "object"
      },
      "SourceOut": {
        "properties": {
          "accepted_extensions": {
            "items": {
              "type": "string"
            },
            "title": "Accepted Extensions",
            "type": "array"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "label": {
            "title": "Label",
            "type": "string"
          },
          "supports_export": {
            "default": false,
            "title": "Supports Export",
            "type": "boolean"
          }
        },
        "required": [
          "key",
          "label",
          "accepted_extensions"
        ],
        "title": "SourceOut",
        "type": "object"
      },
      "SponsorButtonEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "SponsorButtonEnabledPayload",
        "type": "object"
      },
      "SsoCallbackRequest": {
        "properties": {
          "code": {
            "title": "Code",
            "type": "string"
          },
          "redirect_uri": {
            "title": "Redirect Uri",
            "type": "string"
          }
        },
        "required": [
          "code",
          "redirect_uri"
        ],
        "title": "SsoCallbackRequest",
        "type": "object"
      },
      "SsoSettingsPayload": {
        "properties": {
          "authorization_endpoint": {
            "default": "",
            "title": "Authorization Endpoint",
            "type": "string"
          },
          "client_id": {
            "default": "",
            "title": "Client Id",
            "type": "string"
          },
          "client_secret": {
            "default": "",
            "title": "Client Secret",
            "type": "string"
          },
          "domain": {
            "default": "",
            "title": "Domain",
            "type": "string"
          },
          "enabled": {
            "default": false,
            "title": "Enabled",
            "type": "boolean"
          },
          "issuer_url": {
            "default": "",
            "title": "Issuer Url",
            "type": "string"
          },
          "jwks_uri": {
            "default": "",
            "title": "Jwks Uri",
            "type": "string"
          },
          "provider": {
            "default": "microsoft",
            "title": "Provider",
            "type": "string"
          },
          "tenant_id": {
            "default": "organizations",
            "title": "Tenant Id",
            "type": "string"
          },
          "token_endpoint": {
            "default": "",
            "title": "Token Endpoint",
            "type": "string"
          }
        },
        "title": "SsoSettingsPayload",
        "type": "object"
      },
      "StakeholderBulkOperation": {
        "description": "One add/remove of a (card, user, role) stakeholder assignment.\n\nThe user may be referenced by ``user_id`` or by ``user_email`` (resolved\ncase-insensitively server-side) \u2014 the spreadsheet importer round-trips\nemails, the grid editor already holds ids.",
        "properties": {
          "action": {
            "default": "add",
            "enum": [
              "add",
              "remove"
            ],
            "title": "Action",
            "type": "string"
          },
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "row_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Row Index"
          },
          "user_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Email"
          },
          "user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Id"
          }
        },
        "required": [
          "card_id",
          "role"
        ],
        "title": "StakeholderBulkOperation",
        "type": "object"
      },
      "StakeholderBulkRequest": {
        "properties": {
          "dry_run": {
            "default": false,
            "title": "Dry Run",
            "type": "boolean"
          },
          "operations": {
            "items": {
              "$ref": "#/components/schemas/StakeholderBulkOperation"
            },
            "maxItems": 1000,
            "minItems": 1,
            "title": "Operations",
            "type": "array"
          }
        },
        "required": [
          "operations"
        ],
        "title": "StakeholderBulkRequest",
        "type": "object"
      },
      "StakeholderBulkResponse": {
        "properties": {
          "added": {
            "title": "Added",
            "type": "integer"
          },
          "dry_run": {
            "title": "Dry Run",
            "type": "boolean"
          },
          "failed": {
            "title": "Failed",
            "type": "integer"
          },
          "removed": {
            "title": "Removed",
            "type": "integer"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/StakeholderBulkResult"
            },
            "title": "Results",
            "type": "array"
          }
        },
        "required": [
          "results",
          "added",
          "removed",
          "failed",
          "dry_run"
        ],
        "title": "StakeholderBulkResponse",
        "type": "object"
      },
      "StakeholderBulkResult": {
        "properties": {
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error"
          },
          "row_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Row Index"
          },
          "status": {
            "enum": [
              "added",
              "removed",
              "noop",
              "error"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "title": "StakeholderBulkResult",
        "type": "object"
      },
      "StakeholderCreate": {
        "properties": {
          "role": {
            "title": "Role",
            "type": "string"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "user_id",
          "role"
        ],
        "title": "StakeholderCreate",
        "type": "object"
      },
      "StakeholderRef": {
        "properties": {
          "id": {
            "title": "Id",
            "type": "string"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "user_display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Display Name"
          },
          "user_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Email"
          },
          "user_id": {
            "title": "User Id",
            "type": "string"
          }
        },
        "required": [
          "id",
          "user_id",
          "role"
        ],
        "title": "StakeholderRef",
        "type": "object"
      },
      "StakeholderRoleCreate": {
        "properties": {
          "color": {
            "default": "#757575",
            "title": "Color",
            "type": "string"
          },
          "counts_for_quality": {
            "default": true,
            "title": "Counts For Quality",
            "type": "boolean"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "key": {
            "maxLength": 50,
            "minLength": 3,
            "title": "Key",
            "type": "string"
          },
          "label": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "permissions": {
            "additionalProperties": {
              "type": "boolean"
            },
            "default": {},
            "title": "Permissions",
            "type": "object"
          },
          "translations": {
            "additionalProperties": true,
            "default": {},
            "title": "Translations",
            "type": "object"
          }
        },
        "required": [
          "key",
          "label"
        ],
        "title": "StakeholderRoleCreate",
        "type": "object"
      },
      "StakeholderRoleUpdate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "counts_for_quality": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Counts For Quality"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "key": {
            "anyOf": [
              {
                "maxLength": 50,
                "minLength": 3,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "permissions": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "boolean"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Permissions"
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort Order"
          },
          "translations": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Translations"
          }
        },
        "title": "StakeholderRoleUpdate",
        "type": "object"
      },
      "StoreCatalogOut": {
        "properties": {
          "configured": {
            "title": "Configured",
            "type": "boolean"
          },
          "items": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/StoreItemOut"
            },
            "title": "Items",
            "type": "array"
          },
          "reachable": {
            "default": false,
            "title": "Reachable",
            "type": "boolean"
          },
          "reason": {
            "default": "",
            "title": "Reason",
            "type": "string"
          },
          "status_code": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Code"
          },
          "store_url": {
            "default": "",
            "title": "Store Url",
            "type": "string"
          }
        },
        "required": [
          "configured"
        ],
        "title": "StoreCatalogOut",
        "type": "object"
      },
      "StoreClaimIn": {
        "properties": {
          "token": {
            "title": "Token",
            "type": "string"
          }
        },
        "required": [
          "token"
        ],
        "title": "StoreClaimIn",
        "type": "object"
      },
      "StoreClaimOut": {
        "properties": {
          "license": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/LicenseOut"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "title": "StoreClaimOut",
        "type": "object"
      },
      "StoreInstallIn": {
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          }
        },
        "required": [
          "key"
        ],
        "title": "StoreInstallIn",
        "type": "object"
      },
      "StoreItemOut": {
        "properties": {
          "category": {
            "default": "",
            "title": "Category",
            "type": "string"
          },
          "demo_url": {
            "default": "",
            "title": "Demo Url",
            "type": "string"
          },
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "entitlement_auto_renew": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entitlement Auto Renew"
          },
          "entitlement_expires_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entitlement Expires At"
          },
          "entitlement_grace_until": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entitlement Grace Until"
          },
          "entitlement_state": {
            "default": "unlicensed",
            "title": "Entitlement State",
            "type": "string"
          },
          "entitlement_trial": {
            "default": false,
            "title": "Entitlement Trial",
            "type": "boolean"
          },
          "free": {
            "default": false,
            "title": "Free",
            "type": "boolean"
          },
          "homepage": {
            "default": "",
            "title": "Homepage",
            "type": "string"
          },
          "installed_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Installed Version"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "license": {
            "default": "",
            "title": "License",
            "type": "string"
          },
          "license_url": {
            "default": "",
            "title": "License Url",
            "type": "string"
          },
          "logo": {
            "default": "",
            "title": "Logo",
            "type": "string"
          },
          "long_description": {
            "default": "",
            "title": "Long Description",
            "type": "string"
          },
          "monthly_payment_link": {
            "default": "",
            "title": "Monthly Payment Link",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "payment_link": {
            "default": "",
            "title": "Payment Link",
            "type": "string"
          },
          "price": {
            "default": "",
            "title": "Price",
            "type": "string"
          },
          "screenshots": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Screenshots",
            "type": "array"
          },
          "service": {
            "default": false,
            "title": "Service",
            "type": "boolean"
          },
          "tags": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Tags",
            "type": "array"
          },
          "trial_link": {
            "default": "",
            "title": "Trial Link",
            "type": "string"
          },
          "update_available": {
            "default": false,
            "title": "Update Available",
            "type": "boolean"
          },
          "version": {
            "default": "",
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "key",
          "name"
        ],
        "title": "StoreItemOut",
        "type": "object"
      },
      "StorePortalOut": {
        "properties": {
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "title": "StorePortalOut",
        "type": "object"
      },
      "StoreRefreshOut": {
        "properties": {
          "refreshed": {
            "title": "Refreshed",
            "type": "boolean"
          }
        },
        "required": [
          "refreshed"
        ],
        "title": "StoreRefreshOut",
        "type": "object"
      },
      "StructuredInsight": {
        "properties": {
          "observation": {
            "default": "",
            "title": "Observation",
            "type": "string"
          },
          "recommendation": {
            "default": "",
            "title": "Recommendation",
            "type": "string"
          },
          "title": {
            "default": "",
            "title": "Title",
            "type": "string"
          }
        },
        "title": "StructuredInsight",
        "type": "object"
      },
      "SubmitResponse": {
        "properties": {
          "responses": {
            "additionalProperties": true,
            "title": "Responses",
            "type": "object"
          }
        },
        "required": [
          "responses"
        ],
        "title": "SubmitResponse",
        "type": "object"
      },
      "SurveyCreate": {
        "properties": {
          "description": {
            "default": "",
            "title": "Description",
            "type": "string"
          },
          "fields": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fields"
          },
          "message": {
            "default": "",
            "title": "Message",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "target_filters": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Filters"
          },
          "target_roles": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Roles"
          },
          "target_type_key": {
            "title": "Target Type Key",
            "type": "string"
          }
        },
        "required": [
          "name",
          "target_type_key"
        ],
        "title": "SurveyCreate",
        "type": "object"
      },
      "SurveyUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "fields": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fields"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "target_filters": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Filters"
          },
          "target_roles": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Roles"
          },
          "target_type_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Type Key"
          }
        },
        "title": "SurveyUpdate",
        "type": "object"
      },
      "SyncRunOut": {
        "properties": {
          "completed_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "connection_id": {
            "title": "Connection Id",
            "type": "string"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "direction": {
            "title": "Direction",
            "type": "string"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "mapping_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mapping Id"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "stats": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stats"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "connection_id",
          "status",
          "direction"
        ],
        "title": "SyncRunOut",
        "type": "object"
      },
      "TagCreate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "title": "TagCreate",
        "type": "object"
      },
      "TagGroupCreate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "mandatory": {
            "default": false,
            "title": "Mandatory",
            "type": "boolean"
          },
          "mode": {
            "default": "multi",
            "title": "Mode",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "restrict_to_types": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restrict To Types"
          }
        },
        "required": [
          "name"
        ],
        "title": "TagGroupCreate",
        "type": "object"
      },
      "TagGroupUpdate": {
        "properties": {
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "mandatory": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mandatory"
          },
          "mode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mode"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "restrict_to_types": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Restrict To Types"
          }
        },
        "title": "TagGroupUpdate",
        "type": "object"
      },
      "TagRef": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "TagRef",
        "type": "object"
      },
      "TagUpdate": {
        "properties": {
          "color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Color"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "title": "TagUpdate",
        "type": "object"
      },
      "TargetFieldOption": {
        "description": "One Turbo EA field that an admin can map a source field onto.",
        "properties": {
          "key": {
            "title": "Key",
            "type": "string"
          },
          "label": {
            "title": "Label",
            "type": "string"
          },
          "section": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section"
          },
          "type": {
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "key",
          "label",
          "type"
        ],
        "title": "TargetFieldOption",
        "type": "object"
      },
      "TestRequest": {
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          }
        },
        "required": [
          "card_id"
        ],
        "title": "TestRequest",
        "type": "object"
      },
      "TodoCreate": {
        "properties": {
          "assigned_to": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned To"
          },
          "description": {
            "title": "Description",
            "type": "string"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "lead_time_days": {
            "anyOf": [
              {
                "maximum": 3650.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead Time Days"
          },
          "link": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Link"
          },
          "recurrence_interval": {
            "default": 1,
            "maximum": 365.0,
            "minimum": 1.0,
            "title": "Recurrence Interval",
            "type": "integer"
          },
          "recurrence_unit": {
            "default": "none",
            "enum": [
              "none",
              "days",
              "weeks",
              "months",
              "years"
            ],
            "title": "Recurrence Unit",
            "type": "string"
          }
        },
        "required": [
          "description"
        ],
        "title": "TodoCreate",
        "type": "object"
      },
      "TodoUpdate": {
        "properties": {
          "assigned_to": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Assigned To"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "due_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Due Date"
          },
          "lead_time_days": {
            "anyOf": [
              {
                "maximum": 3650.0,
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lead Time Days"
          },
          "recurrence_interval": {
            "anyOf": [
              {
                "maximum": 365.0,
                "minimum": 1.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recurrence Interval"
          },
          "recurrence_unit": {
            "anyOf": [
              {
                "enum": [
                  "none",
                  "days",
                  "weeks",
                  "months",
                  "years"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recurrence Unit"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          }
        },
        "title": "TodoUpdate",
        "type": "object"
      },
      "TokenResponse": {
        "properties": {
          "access_token": {
            "title": "Access Token",
            "type": "string"
          },
          "token_type": {
            "default": "bearer",
            "title": "Token Type",
            "type": "string"
          }
        },
        "required": [
          "access_token"
        ],
        "title": "TokenResponse",
        "type": "object"
      },
      "TurboLensAnalysisRunOut": {
        "properties": {
          "analysis_type": {
            "title": "Analysis Type",
            "type": "string"
          },
          "completed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "results": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Results"
          },
          "started_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "analysis_type",
          "status"
        ],
        "title": "TurboLensAnalysisRunOut",
        "type": "object"
      },
      "TurboLensArchitectRequest": {
        "properties": {
          "allQA": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Allqa"
          },
          "objectiveIds": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Objectiveids"
          },
          "phase": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase"
          },
          "phase1QA": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase1Qa"
          },
          "requirement": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requirement"
          },
          "selectedCapabilities": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Selectedcapabilities"
          },
          "selectedOption": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Selectedoption"
          },
          "selectedProducts": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Selectedproducts"
          },
          "selectedRecommendations": {
            "anyOf": [
              {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Selectedrecommendations"
          }
        },
        "title": "TurboLensArchitectRequest",
        "type": "object"
      },
      "TurboLensAssessmentCreate": {
        "description": "Save an architecture assessment session.",
        "properties": {
          "requirement": {
            "title": "Requirement",
            "type": "string"
          },
          "sessionData": {
            "additionalProperties": true,
            "title": "Sessiondata",
            "type": "object"
          },
          "title": {
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "title",
          "requirement",
          "sessionData"
        ],
        "title": "TurboLensAssessmentCreate",
        "type": "object"
      },
      "TurboLensAssessmentUpdate": {
        "description": "Update an existing architecture assessment session.",
        "properties": {
          "requirement": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requirement"
          },
          "sessionData": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sessiondata"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          }
        },
        "title": "TurboLensAssessmentUpdate",
        "type": "object"
      },
      "TurboLensCommitRequest": {
        "description": "Commit an assessment: create initiative, cards, relations, ADR.",
        "properties": {
          "assessmentId": {
            "title": "Assessmentid",
            "type": "string"
          },
          "endDate": {
            "title": "Enddate",
            "type": "string"
          },
          "initiativeName": {
            "title": "Initiativename",
            "type": "string"
          },
          "objectiveIds": {
            "items": {
              "type": "string"
            },
            "title": "Objectiveids",
            "type": "array"
          },
          "renamedCards": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Map of card ID \u2192 new name for cards renamed by the user",
            "title": "Renamedcards",
            "type": "object"
          },
          "selectedCardIds": {
            "items": {
              "type": "string"
            },
            "title": "Selectedcardids",
            "type": "array"
          },
          "selectedRelationIndices": {
            "items": {
              "type": "integer"
            },
            "title": "Selectedrelationindices",
            "type": "array"
          },
          "startDate": {
            "title": "Startdate",
            "type": "string"
          }
        },
        "required": [
          "assessmentId",
          "initiativeName",
          "startDate",
          "endDate",
          "selectedCardIds",
          "selectedRelationIndices"
        ],
        "title": "TurboLensCommitRequest",
        "type": "object"
      },
      "TurboLensDuplicateStatusUpdate": {
        "properties": {
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "title": "TurboLensDuplicateStatusUpdate",
        "type": "object"
      },
      "TurboLensEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "TurboLensEnabledPayload",
        "type": "object"
      },
      "TurboLensModernizeRequest": {
        "properties": {
          "modernization_type": {
            "default": "general",
            "title": "Modernization Type",
            "type": "string"
          },
          "target_type": {
            "default": "Application",
            "title": "Target Type",
            "type": "string"
          }
        },
        "title": "TurboLensModernizeRequest",
        "type": "object"
      },
      "TurboLensOverviewOut": {
        "properties": {
          "cards_by_type": {
            "additionalProperties": {
              "type": "integer"
            },
            "default": {},
            "title": "Cards By Type",
            "type": "object"
          },
          "duplicate_clusters": {
            "default": 0,
            "title": "Duplicate Clusters",
            "type": "integer"
          },
          "modernization_count": {
            "default": 0,
            "title": "Modernization Count",
            "type": "integer"
          },
          "quality_avg": {
            "default": 0,
            "title": "Quality Avg",
            "type": "number"
          },
          "quality_bronze": {
            "default": 0,
            "title": "Quality Bronze",
            "type": "integer"
          },
          "quality_gold": {
            "default": 0,
            "title": "Quality Gold",
            "type": "integer"
          },
          "quality_silver": {
            "default": 0,
            "title": "Quality Silver",
            "type": "integer"
          },
          "top_issues": {
            "default": [],
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Top Issues",
            "type": "array"
          },
          "total_cards": {
            "default": 0,
            "title": "Total Cards",
            "type": "integer"
          },
          "total_cost": {
            "default": 0,
            "title": "Total Cost",
            "type": "number"
          },
          "vendor_count": {
            "default": 0,
            "title": "Vendor Count",
            "type": "integer"
          }
        },
        "title": "TurboLensOverviewOut",
        "type": "object"
      },
      "TurboLensStatusOut": {
        "properties": {
          "ai_configured": {
            "title": "Ai Configured",
            "type": "boolean"
          },
          "enabled": {
            "default": true,
            "title": "Enabled",
            "type": "boolean"
          },
          "ready": {
            "title": "Ready",
            "type": "boolean"
          }
        },
        "required": [
          "ai_configured",
          "ready"
        ],
        "title": "TurboLensStatusOut",
        "type": "object"
      },
      "UiExtensionOut": {
        "properties": {
          "entitlement_state": {
            "title": "Entitlement State",
            "type": "string"
          },
          "entry": {
            "title": "Entry",
            "type": "string"
          },
          "key": {
            "title": "Key",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "version": {
            "title": "Version",
            "type": "string"
          }
        },
        "required": [
          "key",
          "name",
          "version",
          "entry",
          "entitlement_state"
        ],
        "title": "UiExtensionOut",
        "type": "object"
      },
      "UiPreferencesUpdate": {
        "properties": {
          "dashboard_default_tab": {
            "anyOf": [
              {
                "enum": [
                  "overview",
                  "workspace",
                  "admin"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dashboard Default Tab"
          },
          "diagram_libraries": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Diagram Libraries"
          }
        },
        "title": "UiPreferencesUpdate",
        "type": "object"
      },
      "UpdateCheckEnabledPayload": {
        "properties": {
          "enabled": {
            "title": "Enabled",
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "title": "UpdateCheckEnabledPayload",
        "type": "object"
      },
      "UserBulkDelete": {
        "properties": {
          "ids": {
            "items": {
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          }
        },
        "required": [
          "ids"
        ],
        "title": "UserBulkDelete",
        "type": "object"
      },
      "UserBulkUpdate": {
        "properties": {
          "ids": {
            "items": {
              "type": "string"
            },
            "title": "Ids",
            "type": "array"
          },
          "updates": {
            "$ref": "#/components/schemas/UserBulkUpdateFields"
          }
        },
        "required": [
          "ids",
          "updates"
        ],
        "title": "UserBulkUpdate",
        "type": "object"
      },
      "UserBulkUpdateFields": {
        "properties": {
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role"
          }
        },
        "title": "UserBulkUpdateFields",
        "type": "object"
      },
      "UserCreate": {
        "properties": {
          "auth_provider": {
            "anyOf": [
              {
                "enum": [
                  "local",
                  "sso"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Provider"
          },
          "display_name": {
            "title": "Display Name",
            "type": "string"
          },
          "email": {
            "format": "email",
            "title": "Email",
            "type": "string"
          },
          "password": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Password"
          },
          "role": {
            "default": "member",
            "title": "Role",
            "type": "string"
          },
          "send_email": {
            "default": false,
            "title": "Send Email",
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "display_name"
        ],
        "title": "UserCreate",
        "type": "object"
      },
      "UserResponse": {
        "properties": {
          "display_name": {
            "title": "Display Name",
            "type": "string"
          },
          "email": {
            "title": "Email",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "impersonated_role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Impersonated Role"
          },
          "impersonated_role_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Impersonated Role Label"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "locale": {
            "default": "en",
            "title": "Locale",
            "type": "string"
          },
          "permissions": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "boolean"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Permissions"
          },
          "role": {
            "title": "Role",
            "type": "string"
          },
          "role_color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role Color"
          },
          "role_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role Label"
          },
          "type_permissions": {
            "additionalProperties": {
              "additionalProperties": {
                "type": "boolean"
              },
              "type": "object"
            },
            "default": {},
            "title": "Type Permissions",
            "type": "object"
          },
          "ui_preferences": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ui Preferences"
          }
        },
        "required": [
          "id",
          "email",
          "display_name",
          "role",
          "is_active"
        ],
        "title": "UserResponse",
        "type": "object"
      },
      "UserUpdate": {
        "properties": {
          "auth_provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Auth Provider"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "email": {
            "anyOf": [
              {
                "format": "email",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "locale": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Locale"
          },
          "password": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Password"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role"
          }
        },
        "title": "UserUpdate",
        "type": "object"
      },
      "ValidateRequest": {
        "properties": {
          "formula": {
            "maxLength": 5000,
            "title": "Formula",
            "type": "string"
          },
          "target_type_key": {
            "title": "Target Type Key",
            "type": "string"
          }
        },
        "required": [
          "formula",
          "target_type_key"
        ],
        "title": "ValidateRequest",
        "type": "object"
      },
      "ValidationError": {
        "properties": {
          "ctx": {
            "title": "Context",
            "type": "object"
          },
          "input": {
            "title": "Input"
          },
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "title": "Location",
            "type": "array"
          },
          "msg": {
            "title": "Message",
            "type": "string"
          },
          "type": {
            "title": "Error Type",
            "type": "string"
          }
        },
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError",
        "type": "object"
      },
      "VendorAnalysisOut": {
        "properties": {
          "analysed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Analysed At"
          },
          "app_count": {
            "default": 0,
            "title": "App Count",
            "type": "integer"
          },
          "app_list": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "App List"
          },
          "category": {
            "title": "Category",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "reasoning": {
            "default": "",
            "title": "Reasoning",
            "type": "string"
          },
          "sub_category": {
            "default": "",
            "title": "Sub Category",
            "type": "string"
          },
          "total_cost": {
            "default": 0,
            "title": "Total Cost",
            "type": "number"
          },
          "vendor_name": {
            "title": "Vendor Name",
            "type": "string"
          }
        },
        "required": [
          "id",
          "vendor_name",
          "category"
        ],
        "title": "VendorAnalysisOut",
        "type": "object"
      },
      "VendorHierarchyOut": {
        "properties": {
          "aliases": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Aliases"
          },
          "analysed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Analysed At"
          },
          "app_count": {
            "default": 0,
            "title": "App Count",
            "type": "integer"
          },
          "canonical_name": {
            "title": "Canonical Name",
            "type": "string"
          },
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "itc_count": {
            "default": 0,
            "title": "Itc Count",
            "type": "integer"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "sub_category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sub Category"
          },
          "total_cost": {
            "default": 0,
            "title": "Total Cost",
            "type": "number"
          },
          "vendor_type": {
            "default": "vendor",
            "title": "Vendor Type",
            "type": "string"
          }
        },
        "required": [
          "id",
          "canonical_name"
        ],
        "title": "VendorHierarchyOut",
        "type": "object"
      },
      "WebPortalCreate": {
        "properties": {
          "access_mode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Access Mode"
          },
          "allowed_email_domains": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Allowed Email Domains"
          },
          "card_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Config"
          },
          "card_type": {
            "title": "Card Type",
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "display_fields": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Fields"
          },
          "filters": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filters"
          },
          "is_published": {
            "default": false,
            "title": "Is Published",
            "type": "boolean"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "slug": {
            "title": "Slug",
            "type": "string"
          },
          "view": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "View"
          }
        },
        "required": [
          "name",
          "slug",
          "card_type"
        ],
        "title": "WebPortalCreate",
        "type": "object"
      },
      "WebPortalUpdate": {
        "properties": {
          "access_mode": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Access Mode"
          },
          "allowed_email_domains": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Allowed Email Domains"
          },
          "card_config": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Config"
          },
          "card_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Type"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "display_fields": {
            "anyOf": [
              {
                "items": {},
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Fields"
          },
          "filters": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filters"
          },
          "is_published": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Published"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "slug": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Slug"
          },
          "view": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "View"
          }
        },
        "title": "WebPortalUpdate",
        "type": "object"
      },
      "WorkspaceTransferOut": {
        "properties": {
          "applied_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Applied At"
          },
          "created_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "diff": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Diff"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "filename": {
            "title": "Filename",
            "type": "string"
          },
          "format_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Format Version"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "previewed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Previewed At"
          },
          "result": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Result"
          },
          "source_app_version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source App Version"
          },
          "source_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Url"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "filename",
          "status"
        ],
        "title": "WorkspaceTransferOut",
        "type": "object"
      },
      "app__api__v1__migration__StagedRecordOut": {
        "properties": {
          "action": {
            "title": "Action",
            "type": "string"
          },
          "card_type_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Type Key"
          },
          "diff": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Diff"
          },
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "entity_kind": {
            "title": "Entity Kind",
            "type": "string"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "source_id": {
            "title": "Source Id",
            "type": "string"
          },
          "source_type": {
            "title": "Source Type",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          },
          "target_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Id"
          }
        },
        "required": [
          "id",
          "entity_kind",
          "source_id",
          "source_type",
          "card_type_key",
          "action",
          "status",
          "diff",
          "error_message",
          "target_id"
        ],
        "title": "StagedRecordOut",
        "type": "object"
      },
      "app__api__v1__servicenow__StagedRecordOut": {
        "properties": {
          "action": {
            "title": "Action",
            "type": "string"
          },
          "card_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Card Id"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "diff": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Diff"
          },
          "error_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error Message"
          },
          "id": {
            "title": "Id",
            "type": "string"
          },
          "snow_data": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Snow Data"
          },
          "snow_sys_id": {
            "title": "Snow Sys Id",
            "type": "string"
          },
          "status": {
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "id",
          "snow_sys_id",
          "action",
          "status"
        ],
        "title": "StagedRecordOut",
        "type": "object"
      }
    }
  },
  "info": {
    "title": "Turbo EA",
    "version": "latest"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/health": {
      "get": {
        "operationId": "health_api_health_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Health"
      }
    },
    "/api/v1/admin/extensions": {
      "get": {
        "operationId": "list_extensions_api_v1_admin_extensions_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ExtensionOut"
                  },
                  "title": "Response List Extensions Api V1 Admin Extensions Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Extensions",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/install": {
      "get": {
        "operationId": "list_installs_api_v1_admin_extensions_install_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ExtensionInstallOut"
                  },
                  "title": "Response List Installs Api V1 Admin Extensions Install Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Installs",
        "tags": [
          "Extensions"
        ]
      },
      "post": {
        "operationId": "upload_bundle_api_v1_admin_extensions_install_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_bundle_api_v1_admin_extensions_install_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionInstallOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload Bundle",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/install/{install_id}": {
      "delete": {
        "operationId": "delete_install_api_v1_admin_extensions_install__install_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "install_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Install Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Install",
        "tags": [
          "Extensions"
        ]
      },
      "get": {
        "operationId": "get_install_api_v1_admin_extensions_install__install_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "install_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Install Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionInstallOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Install",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/install/{install_id}/apply": {
      "post": {
        "operationId": "apply_install_api_v1_admin_extensions_install__install_id__apply_post",
        "parameters": [
          {
            "in": "path",
            "name": "install_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Install Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ApplyInstallIn"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Payload"
              }
            }
          }
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionInstallOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Apply Install",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/instance": {
      "get": {
        "description": "This instance's licensing identity (TEA-XXXX-XXXX-XXXX).\n\nQuoted at purchase time (automatically by the in-app Buy button, or\npasted into the storefront's checkout field) so the store aggregates\nevery entitlement bought for this instance into one composite license.\nIdentity only \u2014 never a credential.",
        "operationId": "get_instance_api_v1_admin_extensions_instance_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstanceOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Instance",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/license": {
      "delete": {
        "description": "Remove the installed license (deactivate it, keep the audit rows).\n\nExtensions soft-disable exactly as on expiry \u2014 pages disappear, APIs\nrefuse, jobs pause \u2014 but **no data is deleted**, so applying a license\nagain restores everything. Idempotent-ish: 404 when there is nothing to\nremove so the UI can tell the admin.",
        "operationId": "delete_license_api_v1_admin_extensions_license_delete",
        "responses": {
          "204": {
            "description": "Successful Response"
          }
        },
        "summary": "Delete License",
        "tags": [
          "Extensions"
        ]
      },
      "get": {
        "operationId": "get_license_api_v1_admin_extensions_license_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicenseOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get License",
        "tags": [
          "Extensions"
        ]
      },
      "put": {
        "operationId": "put_license_api_v1_admin_extensions_license_put",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LicenseIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicenseOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Put License",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/store/billing-portal": {
      "post": {
        "description": "Mint a store billing-portal session for this instance's subscription.\n\nBacks the \"Manage subscription\" button: the customer sees the renewal\ndate, cancels or restores auto-renew, updates the payment method, and\ndownloads invoices \u2014 all on the store's hosted portal. The renewal\ncredential authenticating the request lives inside the active license's\nsigned payload and is forwarded server-side only; it never reaches the\nbrowser. Only store-issued licenses carry one \u2014 for manual/offline\nlicenses this returns 404 and the UI shows no button.",
        "operationId": "open_billing_portal_api_v1_admin_extensions_store_billing_portal_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorePortalOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Open Billing Portal",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/store/catalog": {
      "get": {
        "operationId": "store_catalog_api_v1_admin_extensions_store_catalog_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreCatalogOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Store Catalog",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/store/changelog/{key}": {
      "get": {
        "description": "What changed between the installed version and the one being offered.\n\nRead before applying an update, so the administrator decides on what the\nrelease actually contains rather than on a version number. Prefers the\nstore's published feed \u2014 it covers every listed extension, including those\nwhose bundle predates per-extension changelogs \u2014 and falls back to the\ninstalled bundle so an air-gapped instance still gets an answer.",
        "operationId": "store_changelog_api_v1_admin_extensions_store_changelog__key__get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": true,
            "schema": {
              "title": "Version",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from_version",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From Version"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionNotesOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Store Changelog",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/store/claim": {
      "post": {
        "description": "Poll the store for the license of a just-completed purchase.\n\nThe Buy button generated ``token`` client-side and attached it to the\nStripe Payment Link as ``client_reference_id``; the store looks the\ncompleted checkout up by it and returns the issued license, which is\nverified against the trusted vendor keys before being applied \u2014 the\nexact same gate as a manual paste. ``pending`` means the checkout has\nnot completed yet (the frontend keeps polling).",
        "operationId": "claim_store_purchase_api_v1_admin_extensions_store_claim_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StoreClaimIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreClaimOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Claim Store Purchase",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/store/install": {
      "post": {
        "description": "Download a catalogue bundle and run it through the upload pipeline.\n\nIdentical trust posture to a manual upload: the downloaded bytes are\nlanded in ``data/extension_installs/`` and the background job verifies\nthe vendor signature before anything is previewed or applied. Downloads\nare restricted to the configured store origin (SSRF guard) \u2014 a bundle\nhosted elsewhere must be installed via manual upload.",
        "operationId": "install_from_store_api_v1_admin_extensions_store_install_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StoreInstallIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionInstallOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Install From Store",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/store/refresh-license": {
      "post": {
        "description": "Immediately refetch the license from the store (per-row Renew button,\nand the instant pickup of an additional purchase by an existing\ncustomer). Only works for store-issued licenses (renewal credential\npresent); returns ``refreshed: false`` when the store has nothing newer.",
        "operationId": "refresh_store_license_api_v1_admin_extensions_store_refresh_license_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StoreRefreshOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Refresh Store License",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/{key}": {
      "delete": {
        "operationId": "uninstall_extension_api_v1_admin_extensions__key__delete",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Uninstall Extension",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/extensions/{key}/enabled": {
      "put": {
        "operationId": "set_extension_enabled_api_v1_admin_extensions__key__enabled_put",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnabledIn"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Set Extension Enabled",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/admin/workspace/export": {
      "get": {
        "operationId": "export_workspace_api_v1_admin_workspace_export_get",
        "parameters": [
          {
            "in": "query",
            "name": "include_archived",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Archived",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Workspace",
        "tags": [
          "Workspace Transfer"
        ]
      }
    },
    "/api/v1/admin/workspace/import": {
      "post": {
        "operationId": "upload_workspace_api_v1_admin_workspace_import_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_workspace_api_v1_admin_workspace_import_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTransferOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload Workspace",
        "tags": [
          "Workspace Transfer"
        ]
      }
    },
    "/api/v1/admin/workspace/import/{transfer_id}": {
      "delete": {
        "operationId": "delete_workspace_transfer_api_v1_admin_workspace_import__transfer_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "transfer_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Transfer Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Workspace Transfer",
        "tags": [
          "Workspace Transfer"
        ]
      },
      "get": {
        "operationId": "get_workspace_transfer_api_v1_admin_workspace_import__transfer_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "transfer_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Transfer Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTransferOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Workspace Transfer",
        "tags": [
          "Workspace Transfer"
        ]
      }
    },
    "/api/v1/admin/workspace/import/{transfer_id}/apply": {
      "post": {
        "operationId": "apply_workspace_transfer_api_v1_admin_workspace_import__transfer_id__apply_post",
        "parameters": [
          {
            "in": "path",
            "name": "transfer_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Transfer Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTransferOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Apply Workspace Transfer",
        "tags": [
          "Workspace Transfer"
        ]
      }
    },
    "/api/v1/adr": {
      "get": {
        "operationId": "list_adrs_api_v1_adr_get",
        "parameters": [
          {
            "in": "query",
            "name": "initiative_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Initiative Id"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Type"
            }
          },
          {
            "in": "query",
            "name": "date_from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Date From"
            }
          },
          {
            "in": "query",
            "name": "date_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Date To"
            }
          },
          {
            "in": "query",
            "name": "modified_from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Modified From"
            }
          },
          {
            "in": "query",
            "name": "modified_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Modified To"
            }
          },
          {
            "in": "query",
            "name": "signed_from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Signed From"
            }
          },
          {
            "in": "query",
            "name": "signed_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Signed To"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Adrs",
        "tags": [
          "adr"
        ]
      },
      "post": {
        "operationId": "create_adr_api_v1_adr_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ADRCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Adr",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/by-card/{card_id}": {
      "get": {
        "description": "Get all ADRs linked to a specific card.",
        "operationId": "list_adrs_for_card_api_v1_adr_by_card__card_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Adrs For Card",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}": {
      "delete": {
        "operationId": "delete_adr_api_v1_adr__adr_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Adr",
        "tags": [
          "adr"
        ]
      },
      "get": {
        "operationId": "get_adr_api_v1_adr__adr_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Adr",
        "tags": [
          "adr"
        ]
      },
      "patch": {
        "operationId": "update_adr_api_v1_adr__adr_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ADRUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Adr",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/cards": {
      "post": {
        "description": "Link an ADR to a card.",
        "operationId": "link_card_api_v1_adr__adr_id__cards_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ADRCardLink"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Link Card",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/cards/{card_id}": {
      "delete": {
        "description": "Unlink an ADR from a card.",
        "operationId": "unlink_card_api_v1_adr__adr_id__cards__card_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Unlink Card",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/duplicate": {
      "post": {
        "description": "Duplicate an ADR as a new draft with a new reference number.",
        "operationId": "duplicate_adr_api_v1_adr__adr_id__duplicate_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Duplicate Adr",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/recall-signatures": {
      "post": {
        "description": "Recall all pending signature requests. Resets status to draft and\nclears signatories.",
        "operationId": "recall_adr_signatures_api_v1_adr__adr_id__recall_signatures_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Recall Adr Signatures",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/reject": {
      "post": {
        "description": "Reject the ADR as a signatory. Resets to draft, increments revision\nnumber, clears all signatories, and notifies the creator.",
        "operationId": "reject_adr_api_v1_adr__adr_id__reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ADRRejectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Reject Adr",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/request-signatures": {
      "post": {
        "description": "Request signatures from specified users.",
        "operationId": "request_signatures_api_v1_adr__adr_id__request_signatures_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ADRSignatureRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Request Signatures",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/revise": {
      "post": {
        "description": "Create a new revision of a signed ADR.",
        "operationId": "revise_adr_api_v1_adr__adr_id__revise_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Revise Adr",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/revisions": {
      "get": {
        "description": "List all revisions in the chain for this ADR.",
        "operationId": "list_revisions_api_v1_adr__adr_id__revisions_get",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Revisions",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/adr/{adr_id}/sign": {
      "post": {
        "description": "Sign the ADR as the current user.",
        "operationId": "sign_adr_api_v1_adr__adr_id__sign_post",
        "parameters": [
          {
            "in": "path",
            "name": "adr_id",
            "required": true,
            "schema": {
              "title": "Adr Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ADRSignRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Sign Adr",
        "tags": [
          "adr"
        ]
      }
    },
    "/api/v1/ai/portfolio-insights": {
      "post": {
        "description": "Generate AI-driven insights for the application portfolio report.",
        "operationId": "portfolio_insights_api_v1_ai_portfolio_insights_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortfolioInsightsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioInsightsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Portfolio Insights",
        "tags": [
          "AI Suggestions"
        ]
      }
    },
    "/api/v1/ai/status": {
      "get": {
        "description": "Check whether AI suggestions are enabled and configured.\n\nReturns the status without exposing secrets.",
        "operationId": "ai_status_api_v1_ai_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ai Status",
        "tags": [
          "AI Suggestions"
        ]
      }
    },
    "/api/v1/ai/suggest": {
      "post": {
        "description": "Generate AI-powered metadata suggestions for a card.\n\nUses a two-step pipeline: web search \u2192 local LLM extraction.",
        "operationId": "suggest_api_v1_ai_suggest_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiSuggestRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiSuggestResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Suggest",
        "tags": [
          "AI Suggestions"
        ]
      }
    },
    "/api/v1/auth/forgot-password": {
      "post": {
        "description": "Initiate a password reset \u2014 or first-time password setup \u2014 for a local account.\n\nAnti-enumeration: always returns `{\"ok\": True}` regardless of whether the\nemail matches a user. An email is only sent for an active local account when\nSMTP is configured, and its shape depends on the account's state:\n\n- The account already has a password \u2192 a one-hour **reset** link.\n- The account has no password but a setup token (created without a\n  password, e.g. via a stakeholder invite left un-emailed) \u2192 a **set-password**\n  link so the user can self-serve on first login. A missing setup token is\n  minted here so the account is never permanently locked out.\n\nSSO-only accounts (no password, marked `auth_provider=\"sso\"`) get nothing.",
        "operationId": "forgot_password_api_v1_auth_forgot_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Forgot Password",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/impersonate": {
      "post": {
        "description": "Start a role-impersonation session.\n\nRequires ``admin.impersonate``. Issues a fresh JWT carrying an\n``impersonated_role`` claim \u2014 the rest of the request lifecycle\n(PermissionService, audit fan-out) honours it. The real ``user.role``\ncolumn is never modified; impersonation lives entirely in the token.",
        "operationId": "impersonate_role_api_v1_auth_impersonate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImpersonateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Impersonate Role",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/login": {
      "post": {
        "operationId": "login_api_v1_auth_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Login",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "description": "Clear the auth cookie.",
        "operationId": "logout_api_v1_auth_logout_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Logout",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/me": {
      "get": {
        "operationId": "me_api_v1_auth_me_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Me",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/proxy/session": {
      "post": {
        "description": "Exchange a proxy-asserted identity for a Turbo EA session.\n\nFor instances behind a proxy that has already authenticated the user (Azure\nApp Service EasyAuth, oauth2-proxy, Authelia, Cloudflare Access). No OIDC\nclient and no app registration are needed. See\n``app/services/proxy_auth_service.py`` for the trust model.\n\n**404 when the feature is off**, mirroring the ops API with ``OPS_PUBLIC_KEY``\nunset: an instance that has not opted in should look like one where this\nroute does not exist.\n\nDeliberately an endpoint rather than a branch inside ``get_current_user``.\nThe ``samesite=lax`` cookie is currently the app's CSRF control; making\nauthentication ambient proxy headers would hand that control to the proxy's\nown cookie policy, and oauth2-proxy and Cloudflare Access can both be\nconfigured ``SameSite=None``. Minting a lax cookie at one POST-only route\nkeeps the existing posture, and leaves ``get_optional_user`` alone so\nanonymous portal and embedded-diagram visitors stay anonymous.\n\nDeliberately *not* rate limited: ``get_remote_address`` always resolves to the\nnginx container (uvicorn runs without ``--proxy-headers``), so a limit here\nwould be one shared bucket. It would not slow an attacker, who needs a single\nrequest, and would lock out a whole office once the SPA calls this on load.",
        "operationId": "proxy_session_api_v1_auth_proxy_session_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Proxy Session",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/refresh": {
      "post": {
        "description": "Issue a new short-lived access token. Re-reads role and active status from DB.",
        "operationId": "refresh_token_api_v1_auth_refresh_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Refresh Token",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/register": {
      "post": {
        "operationId": "register_api_v1_auth_register_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Register",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/reset-password": {
      "post": {
        "description": "Consume a reset token and set a new password. Does NOT auto-log-in.",
        "operationId": "reset_password_api_v1_auth_reset_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Reset Password",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/set-password": {
      "post": {
        "description": "Set a password for an invited user using a one-time setup token.",
        "operationId": "set_password_api_v1_auth_set_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetPasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Set Password",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/sso/callback": {
      "post": {
        "description": "Exchange an authorization code from an SSO provider for a Turbo EA JWT.",
        "operationId": "sso_callback_api_v1_auth_sso_callback_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SsoCallbackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Sso Callback",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/sso/config": {
      "get": {
        "description": "Public endpoint \u2014 returns SSO configuration needed by the frontend to\nbuild the authorization URL. No secrets are exposed.\nAlso includes registration_enabled so the login page knows whether to\nshow the Register tab.",
        "operationId": "sso_config_endpoint_api_v1_auth_sso_config_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Sso Config Endpoint",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/stop-impersonating": {
      "post": {
        "description": "End a role-impersonation session.\n\nReads the current JWT; if there's no active impersonation, returns\n400 to flag the misuse (caller has stale UI state). Issues a fresh\nJWT without the claim so all subsequent checks revert to the user's\nreal role.",
        "operationId": "stop_impersonating_api_v1_auth_stop_impersonating_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Stop Impersonating",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/validate-reset-token": {
      "get": {
        "description": "Check whether a password-reset token is valid and unexpired.",
        "operationId": "validate_reset_token_api_v1_auth_validate_reset_token_get",
        "parameters": [
          {
            "in": "query",
            "name": "token",
            "required": true,
            "schema": {
              "title": "Token",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validate Reset Token",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/auth/validate-setup-token": {
      "get": {
        "description": "Check if a password-setup token is valid. Returns the user's email.",
        "operationId": "validate_setup_token_api_v1_auth_validate_setup_token_get",
        "parameters": [
          {
            "in": "query",
            "name": "token",
            "required": true,
            "schema": {
              "title": "Token",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validate Setup Token",
        "tags": [
          "auth"
        ]
      }
    },
    "/api/v1/bookmarks": {
      "get": {
        "operationId": "list_bookmarks_api_v1_bookmarks_get",
        "parameters": [
          {
            "in": "query",
            "name": "filter",
            "required": false,
            "schema": {
              "default": "all",
              "pattern": "^(all|my|shared|public)$",
              "title": "Filter",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Bookmarks",
        "tags": [
          "bookmarks"
        ]
      },
      "post": {
        "operationId": "create_bookmark_api_v1_bookmarks_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BookmarkCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Bookmark",
        "tags": [
          "bookmarks"
        ]
      }
    },
    "/api/v1/bookmarks/{bm_id}": {
      "delete": {
        "operationId": "delete_bookmark_api_v1_bookmarks__bm_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "bm_id",
            "required": true,
            "schema": {
              "title": "Bm Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Bookmark",
        "tags": [
          "bookmarks"
        ]
      },
      "patch": {
        "operationId": "update_bookmark_api_v1_bookmarks__bm_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "bm_id",
            "required": true,
            "schema": {
              "title": "Bm Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BookmarkUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Bookmark",
        "tags": [
          "bookmarks"
        ]
      }
    },
    "/api/v1/bookmarks/{bm_id}/odata": {
      "get": {
        "description": "OData-style JSON feed for a bookmark's filtered cards.\nRequires authentication. Returns data matching the bookmark's saved filters,\nlimited to the cards the *caller* may read \u2014 a shared bookmark never hands\nover a card type the reader is denied.",
        "operationId": "bookmark_odata_feed_api_v1_bookmarks__bm_id__odata_get",
        "parameters": [
          {
            "in": "path",
            "name": "bm_id",
            "required": true,
            "schema": {
              "title": "Bm Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 1000,
              "maximum": 10000,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bookmark Odata Feed",
        "tags": [
          "bookmarks"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/assessments": {
      "get": {
        "operationId": "list_assessments_api_v1_bpm_processes__process_id__assessments_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Assessments",
        "tags": [
          "bpm"
        ]
      },
      "post": {
        "operationId": "create_assessment_api_v1_bpm_processes__process_id__assessments_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessAssessmentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Assessment",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/assessments/{assessment_id}": {
      "delete": {
        "operationId": "delete_assessment_api_v1_bpm_processes__process_id__assessments__assessment_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "assessment_id",
            "required": true,
            "schema": {
              "title": "Assessment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Assessment",
        "tags": [
          "bpm"
        ]
      },
      "put": {
        "operationId": "update_assessment_api_v1_bpm_processes__process_id__assessments__assessment_id__put",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "assessment_id",
            "required": true,
            "schema": {
              "title": "Assessment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessAssessmentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Assessment",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/diagram": {
      "delete": {
        "description": "Delete all diagram versions and extracted elements for a process.",
        "operationId": "delete_diagram_api_v1_bpm_processes__process_id__diagram_delete",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Diagram",
        "tags": [
          "bpm"
        ]
      },
      "get": {
        "operationId": "get_diagram_api_v1_bpm_processes__process_id__diagram_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Diagram",
        "tags": [
          "bpm"
        ]
      },
      "put": {
        "operationId": "save_diagram_api_v1_bpm_processes__process_id__diagram_put",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramSave"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Save Diagram",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/diagram/export/bpmn": {
      "get": {
        "operationId": "export_bpmn_api_v1_bpm_processes__process_id__diagram_export_bpmn_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Bpmn",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/diagram/export/svg": {
      "get": {
        "operationId": "export_svg_api_v1_bpm_processes__process_id__diagram_export_svg_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Svg",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/diagram/import": {
      "post": {
        "operationId": "import_bpmn_api_v1_bpm_processes__process_id__diagram_import_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_import_bpmn_api_v1_bpm_processes__process_id__diagram_import_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Import Bpmn",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/diagram/versions": {
      "get": {
        "operationId": "list_diagram_versions_api_v1_bpm_processes__process_id__diagram_versions_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Diagram Versions",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/elements": {
      "get": {
        "operationId": "list_elements_api_v1_bpm_processes__process_id__elements_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Elements",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/elements/{element_id}": {
      "put": {
        "operationId": "update_element_api_v1_bpm_processes__process_id__elements__element_id__put",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "element_id",
            "required": true,
            "schema": {
              "title": "Element Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ElementUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Element",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/archived": {
      "get": {
        "description": "List superseded and withdrawn process flow versions (most recent first).\n\nWithdrawn versions live here too \u2014 they are history, and hiding them would\ndefeat the point of recording the withdrawal.",
        "operationId": "list_archived_api_v1_bpm_processes__process_id__flow_archived_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Archived",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/drafts": {
      "get": {
        "description": "List draft (and pending) flow versions for a process.",
        "operationId": "list_drafts_api_v1_bpm_processes__process_id__flow_drafts_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Drafts",
        "tags": [
          "bpm-workflow"
        ]
      },
      "post": {
        "description": "Create a new draft process flow, optionally cloned from an existing version.",
        "operationId": "create_draft_api_v1_bpm_processes__process_id__flow_drafts_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessFlowVersionCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Draft",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/permissions": {
      "get": {
        "description": "Return the current user's permissions on the process flow.",
        "operationId": "get_flow_permissions_api_v1_bpm_processes__process_id__flow_permissions_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Flow Permissions",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/published": {
      "get": {
        "description": "Get the currently published process flow (visible to all authenticated users).",
        "operationId": "get_published_flow_api_v1_bpm_processes__process_id__flow_published_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Published Flow",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}": {
      "delete": {
        "description": "Delete a draft process flow. Only drafts can be deleted.",
        "operationId": "delete_draft_api_v1_bpm_processes__process_id__flow_versions__version_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Draft",
        "tags": [
          "bpm-workflow"
        ]
      },
      "get": {
        "description": "Get a specific process flow version by ID.",
        "operationId": "get_version_api_v1_bpm_processes__process_id__flow_versions__version_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Version",
        "tags": [
          "bpm-workflow"
        ]
      },
      "patch": {
        "description": "Update a draft process flow. Only drafts can be edited.",
        "operationId": "update_draft_api_v1_bpm_processes__process_id__flow_versions__version_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessFlowVersionUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Draft",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}/approve": {
      "post": {
        "description": "Approve a pending process flow. The approved version becomes published;\nthe previous published version becomes archived.",
        "operationId": "approve_version_api_v1_bpm_processes__process_id__flow_versions__version_id__approve_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Approve Version",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}/draft-elements": {
      "get": {
        "description": "Parse BPMN XML from a draft/pending version and return extracted elements\nmerged with any saved draft_element_links (pre-linked EA references).",
        "operationId": "get_draft_elements_api_v1_bpm_processes__process_id__flow_versions__version_id__draft_elements_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Draft Elements",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}/draft-elements/{bpmn_element_id}": {
      "put": {
        "description": "Update a single draft element link (pre-link EA references before publishing).",
        "operationId": "update_draft_element_link_api_v1_bpm_processes__process_id__flow_versions__version_id__draft_elements__bpmn_element_id__put",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "bpmn_element_id",
            "required": true,
            "schema": {
              "title": "Bpmn Element Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Draft Element Link",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}/reject": {
      "post": {
        "description": "Reject a pending process flow, returning it to draft status.",
        "operationId": "reject_version_api_v1_bpm_processes__process_id__flow_versions__version_id__reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Reject Version",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}/submit": {
      "post": {
        "description": "Submit a draft for approval by the business process owner.",
        "operationId": "submit_for_approval_api_v1_bpm_processes__process_id__flow_versions__version_id__submit_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Submit For Approval",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/flow/versions/{version_id}/withdraw": {
      "post": {
        "description": "Withdraw (unpublish) the published process flow \u2014 discussion #916.\n\nForward-only. The version moves ``published`` \u2192 ``withdrawn``; it is never\nrewound to ``draft`` and never deleted, and ``revision`` / ``bpmn_xml`` /\n``approved_by`` / ``approved_at`` are all left exactly as they were. What is\nadded is the withdrawal itself: who, when, and a mandatory written reason.\nThat is what keeps this compliant with 21 CFR 11.10(e) (\"record changes\nshall not obscure previously recorded information\") and what ISO 9001:2015\n\u00a77.5.3.2 asks for when documented information becomes obsolete.\n\nThe extracted ``process_elements``, their organization links, and the\nelement-derived card relations are deliberately **left untouched**, matching\nthe additive-only contract ``sync_element_relations`` already has. A\nwithdrawal must not become a covert delete. BPM reports already filter on\n``status == \"published\"``, so diagram-coverage figures self-correct.\n\nThe process is left with no *published* flow, but not empty-handed: the\nwithdrawn content is cloned into a fresh draft at the next revision so the\nowner can correct it and put it back through submit \u2192 approve. The withdrawn\nrow itself is untouched and stays in the Archived tab, which is what keeps\nthe approved artefact retrievable \u2014 mutating it into the draft instead would\nlet the very BPMN an approver signed off be edited away.\n\nPreviously-archived versions are still not auto-reinstated: re-publishing an\nolder revision is itself an approval and goes through the same cycle.\n\nGated on the ``bpm.withdraw_flows`` / ``card.bpm_withdraw`` permission\nalone. There is no instance-level switch for this: whether withdrawal is\n*offered* is a permission question, while the part the standards actually\ncare about \u2014 recording who withdrew what, when and why \u2014 happens\nunconditionally below.",
        "operationId": "withdraw_version_api_v1_bpm_processes__process_id__flow_versions__version_id__withdraw_post",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version_id",
            "required": true,
            "schema": {
              "title": "Version Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProcessFlowVersionWithdraw"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Withdraw Version",
        "tags": [
          "bpm-workflow"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/message-flows": {
      "get": {
        "description": "The messages exchanged between the pools of the process's diagram.",
        "operationId": "list_message_flows_api_v1_bpm_processes__process_id__message_flows_get",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Message Flows",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/processes/{process_id}/message-flows/{flow_id}": {
      "patch": {
        "description": "Link a message flow to the Interface card it realises (``null`` clears).\n\nInformative only \u2014 like a step's Organization links, no card-to-card\nrelation is derived from it.",
        "operationId": "update_message_flow_api_v1_bpm_processes__process_id__message_flows__flow_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "flow_id",
            "required": true,
            "schema": {
              "title": "Flow Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MessageFlowUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Message Flow",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/templates": {
      "get": {
        "operationId": "list_templates_api_v1_bpm_templates_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Templates",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/bpm/templates/{template_key}": {
      "get": {
        "operationId": "get_template_api_v1_bpm_templates__template_key__get",
        "parameters": [
          {
            "in": "path",
            "name": "template_key",
            "required": true,
            "schema": {
              "title": "Template Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Template",
        "tags": [
          "bpm"
        ]
      }
    },
    "/api/v1/calculations": {
      "get": {
        "operationId": "list_calculations_api_v1_calculations_get",
        "parameters": [
          {
            "in": "query",
            "name": "type_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type Key"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/CalculationResponse"
                  },
                  "title": "Response List Calculations Api V1 Calculations Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Calculations",
        "tags": [
          "calculations"
        ]
      },
      "post": {
        "operationId": "create_calculation_api_v1_calculations_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalculationCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Calculation",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/calculated-fields": {
      "get": {
        "description": "Return a map of type_key -> list of field keys that are targeted by active calculations.",
        "operationId": "get_calculated_fields_api_v1_calculations_calculated_fields_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Calculated Fields",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/recalculate/{type_key}": {
      "post": {
        "description": "Bulk recalculate all cards of a type.\n\nReports per calculation how many cards succeeded and failed, and for each\ndistinct error the cards it was raised on \u2014 so a failed run can be acted on\nwithout testing the formula against every card by hand.",
        "operationId": "recalculate_type_api_v1_calculations_recalculate__type_key__post",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecalcReport"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Recalculate Type",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/validate": {
      "post": {
        "operationId": "validate_formula_endpoint_api_v1_calculations_validate_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Validate Formula Endpoint",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/{calc_id}": {
      "delete": {
        "operationId": "delete_calculation_api_v1_calculations__calc_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "calc_id",
            "required": true,
            "schema": {
              "title": "Calc Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Calculation",
        "tags": [
          "calculations"
        ]
      },
      "get": {
        "operationId": "get_calculation_api_v1_calculations__calc_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "calc_id",
            "required": true,
            "schema": {
              "title": "Calc Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Calculation",
        "tags": [
          "calculations"
        ]
      },
      "patch": {
        "operationId": "update_calculation_api_v1_calculations__calc_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "calc_id",
            "required": true,
            "schema": {
              "title": "Calc Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalculationUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Calculation",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/{calc_id}/activate": {
      "post": {
        "operationId": "activate_calculation_api_v1_calculations__calc_id__activate_post",
        "parameters": [
          {
            "in": "path",
            "name": "calc_id",
            "required": true,
            "schema": {
              "title": "Calc Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Activate Calculation",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/{calc_id}/deactivate": {
      "post": {
        "operationId": "deactivate_calculation_api_v1_calculations__calc_id__deactivate_post",
        "parameters": [
          {
            "in": "path",
            "name": "calc_id",
            "required": true,
            "schema": {
              "title": "Calc Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Deactivate Calculation",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/calculations/{calc_id}/test": {
      "post": {
        "description": "Test a calculation with a specific card (dry run, no save).",
        "operationId": "test_calculation_api_v1_calculations__calc_id__test_post",
        "parameters": [
          {
            "in": "path",
            "name": "calc_id",
            "required": true,
            "schema": {
              "title": "Calc Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TestRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Test Calculation",
        "tags": [
          "calculations"
        ]
      }
    },
    "/api/v1/capability-catalogue": {
      "get": {
        "description": "Return the full active catalogue with `existing_card_id` annotations.\n\nThe optional `locale` query param overrides the user's saved locale \u2014\nused by the frontend to follow live UI language switches without waiting\nfor the `user.locale` PATCH to land. Falls back to `user.locale`, then\nEnglish. Translations themselves come from the bundled package; missing\nper-field translations degrade silently to English.",
        "operationId": "get_catalogue_api_v1_capability_catalogue_get",
        "parameters": [
          {
            "in": "query",
            "name": "locale",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Locale"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Catalogue",
        "tags": [
          "capability-catalogue"
        ]
      }
    },
    "/api/v1/capability-catalogue/import": {
      "post": {
        "description": "Create BusinessCapability cards for the selected catalogue entries.\n\nIdempotent: catalogue entries whose name already exists as a non-archived\nBusinessCapability are skipped (and reported in the `skipped` list).\nHierarchy is preserved automatically when both parent and child are\nselected, or when the parent already exists.\n\nThe optional `locale` in the request body controls which language the\nnew cards are written in (`name`, `description`, `aliases`); falls back\nto the user's saved locale, then English. Existing-card matching is\nalways English-anchored so a localized import never duplicates a card.",
        "operationId": "import_capabilities_api_v1_capability_catalogue_import_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Import Capabilities",
        "tags": [
          "capability-catalogue"
        ]
      }
    },
    "/api/v1/capability-catalogue/update-fetch": {
      "post": {
        "description": "Download the latest catalogue from the public site and cache it.",
        "operationId": "update_fetch_api_v1_capability_catalogue_update_fetch_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Update Fetch",
        "tags": [
          "capability-catalogue"
        ]
      }
    },
    "/api/v1/capability-catalogue/update-status": {
      "get": {
        "description": "Compare the bundled/cached catalogue against the public site.",
        "operationId": "update_status_api_v1_capability_catalogue_update_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Update Status",
        "tags": [
          "capability-catalogue"
        ]
      }
    },
    "/api/v1/card-logos/brand-icons": {
      "get": {
        "description": "Search the bundled brand-icon pack.\n\nGated on inventory access (``require_inventory_browse``): the payload is\npublic CC0 metadata, so nothing here needs shaping, but this would\notherwise be the only authenticated read in the file with no permission at\nall \u2014 and inventory access is the weakest permission anyone who could act\non the result already holds.",
        "operationId": "list_brand_icons_api_v1_card_logos_brand_icons_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "default": "",
              "maxLength": 64,
              "title": "Search",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Brand Icons",
        "tags": [
          "card-logos"
        ]
      }
    },
    "/api/v1/card-logos/brand-icons/resolve": {
      "get": {
        "description": "Say which of many icon references the packs actually carry.\n\nExists for the MCP dry run. Previewing a batch of logos has to be able to\ntell the caller that a slug is unknown *before* it commits \u2014 otherwise a\npreview says every row is fine and the commit is where it learns\notherwise, which is precisely when an agent stops rather than going to\nfetch the mark itself. Searching one slug at a time would be one request\nper row, so this answers the whole batch in one.\n\nReturns ``{known: {ref: canonical_ref}, unknown: [ref]}``; the canonical\nform is what a caller should store, since a bare slug resolves to whichever\npack carries it.",
        "operationId": "resolve_brand_icons_api_v1_card_logos_brand_icons_resolve_get",
        "parameters": [
          {
            "in": "query",
            "name": "refs",
            "required": false,
            "schema": {
              "default": "",
              "maxLength": 8192,
              "title": "Refs",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Resolve Brand Icons",
        "tags": [
          "card-logos"
        ]
      }
    },
    "/api/v1/card-logos/brand-icons/{slug}.png": {
      "get": {
        "description": "Public endpoint \u2014 one brand icon's PNG, for the picker to render.\n\nUnauthenticated, on the same reasoning as ``GET /settings/logo`` beside it:\nan ``<img>`` is what loads this, and the bytes are public CC0 artwork that\nships inside the image. Nothing here is instance data \u2014 not a card, not a\nname, not a count \u2014 so there is nothing for a permission to protect.\n\nThe *listing* endpoint above stays gated all the same: enumerating the pack\nis a different act from rendering one icon a caller already knows the name\nof, and least privilege is free there.\n\nTakes no database session on purpose \u2014 the pack is read from disk, so this\nroute never needs a connection out of the pool.",
        "operationId": "get_brand_icon_api_v1_card_logos_brand_icons__slug__png_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Brand Icon",
        "tags": [
          "card-logos"
        ]
      }
    },
    "/api/v1/cards": {
      "get": {
        "operationId": "list_cards_api_v1_cards_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "parent_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Parent Id"
            }
          },
          {
            "in": "query",
            "name": "approval_status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Approval Status"
            }
          },
          {
            "description": "Scope the result to cards related to the current user. `stakeholder` keeps only cards on which the user holds at least one stakeholder role.",
            "in": "query",
            "name": "mine",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "pattern": "^(stakeholder)$",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Scope the result to cards related to the current user. `stakeholder` keeps only cards on which the user holds at least one stakeholder role.",
              "title": "Mine"
            }
          },
          {
            "description": "Comma-separated UUIDs to fetch in one round trip. Used by the diagram editor's view perspectives to recolor cells.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Comma-separated UUIDs to fetch in one round trip. Used by the diagram editor's view perspectives to recolor cells.",
              "title": "Ids"
            }
          },
          {
            "description": "Keep only cards with no relation in either direction. Evaluated server-side because the client only ever holds the relations of the type it is currently displaying.",
            "in": "query",
            "name": "orphaned",
            "required": false,
            "schema": {
              "default": false,
              "description": "Keep only cards with no relation in either direction. Evaluated server-side because the client only ever holds the relations of the type it is currently displaying.",
              "title": "Orphaned",
              "type": "boolean"
            }
          },
          {
            "description": "Keep only cards not updated in the last 90 days (`card_flags.STALE_AFTER_DAYS`).",
            "in": "query",
            "name": "stale",
            "required": false,
            "schema": {
              "default": false,
              "description": "Keep only cards not updated in the last 90 days (`card_flags.STALE_AFTER_DAYS`).",
              "title": "Stale",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 10000,
              "maximum": 10000,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          },
          {
            "description": "Sort column. Defaults to `name` ascending. When omitted together with `sort_dir` and a `search` term is given, results are ordered by search relevance first (exact, then starts-with, then starts-a-word, then contains) and alphabetically within each tier.",
            "in": "query",
            "name": "sort_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Sort column. Defaults to `name` ascending. When omitted together with `sort_dir` and a `search` term is given, results are ordered by search relevance first (exact, then starts-with, then starts-a-word, then contains) and alphabetically within each tier.",
              "title": "Sort By"
            }
          },
          {
            "description": "`asc` (default) or `desc`.",
            "in": "query",
            "name": "sort_dir",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`asc` (default) or `desc`.",
              "title": "Sort Dir"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardListResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Cards",
        "tags": [
          "cards"
        ]
      },
      "post": {
        "operationId": "create_card_api_v1_cards_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Card",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/bulk": {
      "patch": {
        "operationId": "bulk_update_api_v1_cards_bulk_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardBulkUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Update",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/bulk-archive": {
      "post": {
        "description": "Archive many cards in a single transaction.\n\nSolves a class of problems that the per-card endpoint cannot:\n  - browser parallelism: 1 round-trip instead of N (no socket-pool exhaustion);\n  - cascade race: archiving a parent that cascades to a descendant which is\n    also in the input list is a single coherent operation, not a fight\n    between sibling workers seeing the descendant in different states;\n  - reporting: one aggregated response with `archived`, `cascaded`, `skipped`\n    instead of N independent failures the caller has to stitch together.\n\nCards already at status=ARCHIVED, or whose IDs don't resolve, are returned\nin `skipped` rather than failing the batch \u2014 the user's intent (everything\nin the input ends up archived) is satisfied either way.",
        "operationId": "bulk_archive_cards_api_v1_cards_bulk_archive_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardBulkArchiveRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkArchiveResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Archive Cards",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/bulk-create": {
      "post": {
        "description": "Batched card creation for the spreadsheet importer.\n\nEach row carries its own `row_index` so the caller can pair the\nresponse back to its spreadsheet row. Parents may be referenced by\nUUID (`parent_id`) or by `(parent_path, parent_name)` \u2014 the server\nresolves names server-side against the existing inventory and against\nother rows in the same request (which may not exist yet).\n\nRows are processed in topological order: parents come before children\nso FK constraints never fire. If a row's parent cannot be resolved\neven after every other row has been placed, it fails with a clear\n`parent_not_resolved` error instead of producing an orphan card.\n\nSingle transaction per request \u2014 partial failures still roll back\nsucceeded rows in the same batch. Permission: `inventory.create`.",
        "operationId": "bulk_create_cards_api_v1_cards_bulk_create_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardBulkCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkCreateResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Create Cards",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/bulk-delete": {
      "post": {
        "description": "Permanently delete many cards in a single transaction.\n\nMirrors `bulk_archive_cards`. Unlike archive, delete works on cards in any\nstatus (ACTIVE or ARCHIVED), so the only `skipped` reason is `not_found`\n(the card was already deleted by a sibling primary's cascade in the same\nbatch, or never existed).\n\nDescendants are deleted leaves-first to satisfy the self-FK on `parent_id`.",
        "operationId": "bulk_delete_cards_api_v1_cards_bulk_delete_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardBulkDeleteRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkDeleteResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Delete Cards",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/bulk-restore": {
      "post": {
        "description": "Restore many archived cards back to ACTIVE status in a single transaction.\n\nMirrors `bulk_archive_cards` for the inverse operation. Cards already at\nACTIVE, or whose IDs don't resolve, come back in `skipped` rather than\nfailing the batch \u2014 restoring is idempotent in spirit (the desired end\nstate is \"this card is active\", and that's already true).\n\nNo cascade: restore is a flat per-card status flip. The single-card\nendpoint takes `also_restore_card_ids` to lift passengers from the\noriginal archive batch; for bulk we expect the caller (the inventory\nselection UI) to have already gathered the full list of cards to restore.",
        "operationId": "bulk_restore_cards_api_v1_cards_bulk_restore_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardBulkRestoreRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardBulkRestoreResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Restore Cards",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/counts": {
      "get": {
        "description": "Per-card-type counts of ACTIVE cards. Powers the type chips with\ncounts in the diagram editor's Insert Cards dialog (LeanIX-style).\nHidden types are excluded so the dialog never offers them.\n\nDeclared above /{card_id} so the literal `counts` segment isn't shadowed\nby the UUID-typed catch-all and parsed as a (broken) UUID.",
        "operationId": "cards_counts_api_v1_cards_counts_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardCountsResponse"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Cards Counts",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/export/csv": {
      "get": {
        "operationId": "export_csv_api_v1_cards_export_csv_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Csv",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/export/json": {
      "get": {
        "description": "Bulk export cards as JSON for integration consumers (e.g. TurboLens MCP).\n\nReturns all active cards of the given types with optional pre-joined\nprovider relation names and stakeholder owner info.",
        "operationId": "export_json_api_v1_cards_export_json_get",
        "parameters": [
          {
            "description": "Comma-separated type keys",
            "in": "query",
            "name": "types",
            "required": true,
            "schema": {
              "description": "Comma-separated type keys",
              "title": "Types",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_relations",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Relations",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "include_stakeholders",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Stakeholders",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Json",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/fix-hierarchy-names": {
      "post": {
        "operationId": "fix_hierarchy_names_api_v1_cards_fix_hierarchy_names_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Fix Hierarchy Names",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/my-created": {
      "get": {
        "description": "Cards the current user originally created (via ``Card.created_by``).\n\nSupports simple offset/limit pagination so the Dashboard \u2192 My\nWorkspace \u2192 Cards I Created section can offer a \"Show more\" button\non long lists.",
        "operationId": "list_my_created_cards_api_v1_cards_my_created_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List My Created Cards",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/my-stakeholder": {
      "get": {
        "description": "Cards on which the target user holds at least one stakeholder role.\n\nDefaults to the **current user** so the legacy\n``GET /cards/my-stakeholder`` (no query params) keeps powering the\nWorkspace \u2192 \"My roles\" dashboard section without changes.\n\nPass ``?user_id=<uuid>`` to look up another user's stakeholder\nportfolio \u2014 the Workspace section reuses this to offer a \"view as\nanother user\" picker. Cross-user lookups require ``stakeholders.view``.\n\nReturns cards plus a ``roles_by_card_id`` map keyed by card id, where\neach entry is a list of role descriptors ``{key, label, color,\ntranslations}`` resolved from the matching ``StakeholderRoleDefinition``\nfor the card's type. The frontend uses ``label`` + ``translations`` to\nrender a localised role chip per role.",
        "operationId": "list_my_stakeholder_cards_api_v1_cards_my_stakeholder_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 200,
              "maximum": 500,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "Look up another user's stakeholder cards instead of your own. When omitted (or equal to the caller's id) returns the current user \u2014 same as the no-arg behaviour. When set to another user's id, requires the `stakeholders.view` permission.",
            "in": "query",
            "name": "user_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Look up another user's stakeholder cards instead of your own. When omitted (or equal to the caller's id) returns the current user \u2014 same as the no-arg behaviour. When set to another user's id, requires the `stakeholders.view` permission.",
              "title": "User Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List My Stakeholder Cards",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/resolve-refs": {
      "post": {
        "description": "Resolve a batch of human-readable card references (`name` or\n`parent_path/name`) to UUIDs in one round-trip.\n\nUsed by the spreadsheet importer's validation pass to surface\nambiguous or missing references **before** anything is written. Each\nref carries the originating `row` + `column` so the importer can\npin the result to the cell that produced it.\n\nReturns one result per ref with status `resolved`, `ambiguous`, or\n`missing`. Ambiguous results include up to a handful of candidate\npaths so the UI can render a useful disambiguation hint.",
        "operationId": "resolve_card_refs_api_v1_cards_resolve_refs_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardRefResolveRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardRefResolveResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Resolve Card Refs",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}": {
      "delete": {
        "description": "Permanently delete a card plus optional descendants and related peer cards.\n\nMirrors `archive_card`'s body shape and rules. The primary is always deleted;\ndescendants are deleted leaves-first to satisfy the self-FK on `parent_id`.\nRelated cards are processed single-hop only.\n\nReturns 409 if the primary has direct children and `child_strategy` is None.",
        "operationId": "delete_card_api_v1_cards__card_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardDeleteRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardDeleteResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Card",
        "tags": [
          "cards"
        ]
      },
      "get": {
        "operationId": "get_card_api_v1_cards__card_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Card",
        "tags": [
          "cards"
        ]
      },
      "patch": {
        "operationId": "update_card_api_v1_cards__card_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Card",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/approval-status": {
      "post": {
        "operationId": "update_approval_status_api_v1_cards__card_id__approval_status_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "action",
            "required": true,
            "schema": {
              "pattern": "^(approve|reject|reset)$",
              "title": "Action",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Approval Status",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/archive": {
      "post": {
        "description": "Archive a card (soft delete) plus optional descendants and related peer cards.\n\nBody shape:\n  - `child_strategy`: `cascade` | `disconnect` | `reparent` (required if the\n    primary card has direct children \u2014 otherwise 409).\n  - `related_card_ids`: peer cards (capped at 200) to also archive in the\n    same operation. Single-hop only \u2014 the related cards' own peer relations\n    are NOT recursed.\n  - `cascade_all_related`: bulk-mode shortcut that resolves all direct\n    relations of the primary on the server side.\n\nPermission check runs against every affected card; first denial aborts.",
        "operationId": "archive_card_api_v1_cards__card_id__archive_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardArchiveRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardArchiveResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Archive Card",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/archive-impact": {
      "get": {
        "description": "Pre-flight payload for the archive/delete dialog.\n\nReturns the direct children, the grandparent (if any), and every peer card\nlinked via a `relations` row. Hidden card-types are filtered out, mirroring\nthe relations list endpoint at `/api/v1/relations`.",
        "operationId": "get_archive_impact_api_v1_cards__card_id__archive_impact_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArchiveImpactResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Archive Impact",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/comments": {
      "get": {
        "operationId": "list_comments_api_v1_cards__card_id__comments_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Comments",
        "tags": [
          "comments"
        ]
      },
      "post": {
        "operationId": "create_comment_api_v1_cards__card_id__comments_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Comment",
        "tags": [
          "comments"
        ]
      }
    },
    "/api/v1/cards/{card_id}/compliance-findings": {
      "get": {
        "description": "All compliance findings scoped to a single card.\n\nOrdered by severity then regulation/article. Used by the Compliance\ntab on the Card Detail page (mirrors ``GET /cards/{id}/risks``).",
        "operationId": "list_card_compliance_findings_api_v1_cards__card_id__compliance_findings_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_auto_resolved",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Auto Resolved",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ComplianceFindingOut"
                  },
                  "title": "Response List Card Compliance Findings Api V1 Cards  Card Id  Compliance Findings Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Card Compliance Findings",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/cards/{card_id}/descendant-relations": {
      "get": {
        "description": "The rolled-up peer cards for one relation type, with provenance.\n\nEach row is a distinct peer card plus the descendants that link it, so a\ncard reachable through two sub-capabilities appears once with two `via`\nentries. Read-only by design \u2014 there is no matching write route.",
        "operationId": "descendant_relations_api_v1_cards__card_id__descendant_relations_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          },
          {
            "description": "Relation type key to roll up",
            "in": "query",
            "name": "relation_type",
            "required": true,
            "schema": {
              "description": "Relation type key to roll up",
              "title": "Relation Type",
              "type": "string"
            }
          },
          {
            "description": "Which side of the relation type to roll up \u2014 the card's outgoing or incoming rows. Omit for both, which only differ for a self-referencing type.",
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "enum": [
                    "outgoing",
                    "incoming"
                  ],
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Which side of the relation type to roll up \u2014 the card's outgoing or incoming rows. Omit for both, which only differ for a self-referencing type.",
              "title": "Direction"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DescendantRelationsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Descendant Relations",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/descendant-relations/summary": {
      "get": {
        "description": "Per-relation-type count of cards reachable only through descendants.\n\nPowers the \"+N in sub-items\" chip on the Relations section. Returns an\nempty list for leaf cards and for non-hierarchical types.",
        "operationId": "descendant_relation_summary_api_v1_cards__card_id__descendant_relations_summary_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/DescendantRelationSummaryEntry"
                  },
                  "title": "Response Descendant Relation Summary Api V1 Cards  Card Id  Descendant Relations Summary Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Descendant Relation Summary",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/documents": {
      "get": {
        "operationId": "list_documents_api_v1_cards__card_id__documents_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Documents",
        "tags": [
          "documents"
        ]
      },
      "post": {
        "operationId": "create_document_api_v1_cards__card_id__documents_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Document",
        "tags": [
          "documents"
        ]
      }
    },
    "/api/v1/cards/{card_id}/file-attachments": {
      "get": {
        "operationId": "list_file_attachments_api_v1_cards__card_id__file_attachments_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List File Attachments",
        "tags": [
          "file-attachments"
        ]
      },
      "post": {
        "operationId": "upload_file_attachment_api_v1_cards__card_id__file_attachments_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_file_attachment_api_v1_cards__card_id__file_attachments_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload File Attachment",
        "tags": [
          "file-attachments"
        ]
      }
    },
    "/api/v1/cards/{card_id}/hierarchy": {
      "get": {
        "description": "Return ancestors (root\u2192parent), children, and computed level.\n\nTwo link labels are in play and they are NOT the same field (#1100):\n\n* each ``children`` node carries **its own** ``parent_label`` \u2014 the label on\n  that child's edge to this card;\n* the top-level ``parent_label`` is **this card's** label for its edge to\n  its own parent, i.e. what the Parent chip renders. It is deliberately not\n  hung off the last ancestor node, whose ``parent_label`` would be that\n  ancestor's link to *its* parent one level further up.",
        "operationId": "get_hierarchy_api_v1_cards__card_id__hierarchy_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Hierarchy",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/history": {
      "get": {
        "operationId": "get_history_api_v1_cards__card_id__history_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get History",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/logo": {
      "delete": {
        "description": "Remove the card's logo, falling the card back to its type icon.\n\nAllowed even when the type's ``allow_card_logo`` switch is off, so turning\nthe feature off for a type never strands existing images as undeletable.",
        "operationId": "delete_card_logo_api_v1_cards__card_id__logo_delete",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Card Logo",
        "tags": [
          "card-logos"
        ]
      },
      "get": {
        "description": "Public endpoint \u2014 returns a card's logo image bytes, or 404.\n\nUnauthenticated on purpose. An ``<img>`` tag cannot carry the bearer token\n(it lives in sessionStorage), and published web portals are viewed with no\naccount at all, so a gated route would mean either blob-fetching through\nthe API client on every surface or a second portal-scoped copy of this\nendpoint. What is returned is the artefact and nothing else \u2014 no card name,\ntype, or any other field \u2014 keyed by an unguessable UUID, the same posture\n``GET /diagrams/public/{slug}`` and ``/ext-assets`` take.\n\nA missing card, a card with no logo, and a malformed id all answer 404\nidentically, so this cannot be used to probe which card ids exist. The\nper-type ``allow_card_logo`` switch deliberately does not gate this: it\ngoverns upload and display, and enforcing it here would 404 images that\nare still on screen in a portal the moment an admin flips it off.",
        "operationId": "get_card_logo_api_v1_cards__card_id__logo_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Card Logo",
        "tags": [
          "card-logos"
        ]
      },
      "post": {
        "description": "Upload or replace the card's logo, from a file or a built-in brand icon.\n\nExactly one of ``file`` and ``icon_slug`` is required. The icon path exists\nso an agent can set a product's mark without carrying the image at all \u2014\nsee ``app/services/brand_icons.py``.",
        "operationId": "upload_card_logo_api_v1_cards__card_id__logo_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_card_logo_api_v1_cards__card_id__logo_post"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload Card Logo",
        "tags": [
          "card-logos"
        ]
      }
    },
    "/api/v1/cards/{card_id}/me/observe": {
      "delete": {
        "description": "One-click removal of self-assigned Observer role.\n\nIdempotent: returns 204 even when no row existed. Does not require the\nObserver role to still be active on the card type \u2014 stale subscriptions\nmust always be removable.",
        "operationId": "remove_me_as_observer_api_v1_cards__card_id__me_observe_delete",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Remove Me As Observer",
        "tags": [
          "stakeholders"
        ]
      },
      "get": {
        "description": "Return whether the current user is observing this card and whether the\nObserver role is available for the card type. Used by the one-click\n\"Observe this card\" toggle on the card detail page.",
        "operationId": "get_my_observe_status_api_v1_cards__card_id__me_observe_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get My Observe Status",
        "tags": [
          "stakeholders"
        ]
      },
      "post": {
        "description": "One-click self-assignment as Observer.\n\nCarve-out from the regular create-stakeholder flow: any user with view\naccess on the card can add themselves as Observer, even without the\n`stakeholders.manage` permission. The route hardcodes `role=\"observer\"`\nand `user_id=self`, so it cannot be used to promote anyone else or to\nassign any other role.\n\nIdempotent: a second call returns the existing row.",
        "operationId": "add_me_as_observer_api_v1_cards__card_id__me_observe_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Add Me As Observer",
        "tags": [
          "stakeholders"
        ]
      }
    },
    "/api/v1/cards/{card_id}/my-permissions": {
      "get": {
        "description": "Return the current user's effective permissions on a specific card.",
        "operationId": "my_permissions_api_v1_cards__card_id__my_permissions_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "My Permissions",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/relation-summary": {
      "get": {
        "description": "Per-relation-type / per-direction neighbour counts for one card.\n\nThe diagram editor renders this as LeanIX-style Show Dependency /\nDrill-Down / Roll-Up submenus where each entry shows\n\"<label> (<count>)\" and is greyed out when count is 0.\n\n\"outgoing\" rows: card is the relation source \u2014 i.e. its `relations`.\n\"incoming\" rows: card is the relation target \u2014 i.e. its `reverse_label`\nrelations.",
        "operationId": "relation_summary_api_v1_cards__card_id__relation_summary_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardRelationSummaryResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Relation Summary",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/restore": {
      "post": {
        "description": "Restore an archived card back to ACTIVE status.\n\n`also_restore_card_ids` lets the caller restore passengers from the\noriginal archive batch in the same operation. Each ID is checked\nindividually; the same `card.archive` permission applies. IDs that\nresolve to non-archived cards are skipped silently. Only one\n`card.restored` event is emitted per card actually flipped.",
        "operationId": "restore_card_api_v1_cards__card_id__restore_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CardRestoreRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CardRestoreResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Restore Card",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/restore-impact": {
      "get": {
        "description": "List the cards that were archived together with this one and are still archived.\n\nReads the latest `card.archived.batch` audit event keyed to this card.\nCards whose `affected_*_ids` come back from that event but were already\nindividually restored are filtered out.",
        "operationId": "get_restore_impact_api_v1_cards__card_id__restore_impact_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RestoreImpactResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Restore Impact",
        "tags": [
          "cards"
        ]
      }
    },
    "/api/v1/cards/{card_id}/risks": {
      "get": {
        "description": "All risks linked to a given card (used by the CardDetail \u2192 Risks tab).",
        "operationId": "risks_for_card_api_v1_cards__card_id__risks_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RiskOut"
                  },
                  "title": "Response Risks For Card Api V1 Cards  Card Id  Risks Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Risks For Card",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/cards/{card_id}/stakeholders": {
      "get": {
        "operationId": "list_stakeholders_api_v1_cards__card_id__stakeholders_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Stakeholders",
        "tags": [
          "stakeholders"
        ]
      },
      "post": {
        "operationId": "create_stakeholder_api_v1_cards__card_id__stakeholders_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StakeholderCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Stakeholder",
        "tags": [
          "stakeholders"
        ]
      }
    },
    "/api/v1/cards/{card_id}/tags": {
      "post": {
        "operationId": "assign_tags_api_v1_cards__card_id__tags_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "type": "string"
                },
                "title": "Tag Ids",
                "type": "array"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Assign Tags",
        "tags": [
          "tags"
        ]
      }
    },
    "/api/v1/cards/{card_id}/tags/{tag_id}": {
      "delete": {
        "operationId": "remove_tag_api_v1_cards__card_id__tags__tag_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tag_id",
            "required": true,
            "schema": {
              "title": "Tag Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Remove Tag",
        "tags": [
          "tags"
        ]
      }
    },
    "/api/v1/cards/{card_id}/todos": {
      "get": {
        "operationId": "list_card_todos_api_v1_cards__card_id__todos_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Card Todos",
        "tags": [
          "todos"
        ]
      },
      "post": {
        "operationId": "create_todo_api_v1_cards__card_id__todos_post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TodoCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Todo",
        "tags": [
          "todos"
        ]
      }
    },
    "/api/v1/comments/{comment_id}": {
      "delete": {
        "operationId": "delete_comment_api_v1_comments__comment_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "comment_id",
            "required": true,
            "schema": {
              "title": "Comment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Comment",
        "tags": [
          "comments"
        ]
      },
      "patch": {
        "operationId": "update_comment_api_v1_comments__comment_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "comment_id",
            "required": true,
            "schema": {
              "title": "Comment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Comment",
        "tags": [
          "comments"
        ]
      }
    },
    "/api/v1/compliance/active-runs": {
      "get": {
        "description": "Return the latest running compliance scan.\n\nUsed by the UI on mount to reattach polling and show progress even\nafter a page refresh. ``compliance`` is ``null`` when no scan is\ncurrently running.",
        "operationId": "security_active_runs_api_v1_compliance_active_runs_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "$ref": "#/components/schemas/TurboLensAnalysisRunOut"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": "Response Security Active Runs Api V1 Compliance Active Runs Get",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Security Active Runs",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance": {
      "get": {
        "description": "Bundle compliance findings by regulation for the GRC grid.\n\nHides ``auto_resolved`` findings by default \u2014 these are stale rows\nthat a previous re-scan no longer reported. Pass\n``include_auto_resolved=true`` to opt into seeing them (e.g. for an\naudit-trail view). Mirrors the default on\n``GET /cards/{id}/compliance-findings``.",
        "operationId": "list_compliance_api_v1_compliance_compliance_get",
        "parameters": [
          {
            "in": "query",
            "name": "regulation",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Regulation"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "include_auto_resolved",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Auto Resolved",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ComplianceBundleOut"
                  },
                  "title": "Response List Compliance Api V1 Compliance Compliance Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Compliance",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance-findings": {
      "post": {
        "description": "Manually create a compliance finding (auditor / analyst entry).\n\nCreates a synthetic \"manual\" :class:`TurboLensAnalysisRun` row to\nsatisfy the FK (``run_id`` is non-null), computes ``finding_key``\nvia the same recipe as the scanner so a later re-scan can upsert\ncleanly, and persists the finding with ``decision='new'`` and\n``ai_detected=False``. Requires ``compliance.manage``.",
        "operationId": "create_compliance_finding_manual_api_v1_compliance_compliance_findings_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceFindingCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceFindingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Compliance Finding Manual",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance-findings/bulk": {
      "delete": {
        "description": "Bulk-delete compliance findings.\n\nSame permission gate as the single-row delete (``compliance.manage``,\ngranted to admin only by default). The linked Risk on any row is NOT\ncascaded \u2014 Risks are independent records once promoted. Missing ids\nare reported in ``skipped`` with ``reason=\"not_found\"`` rather than\nfailing the whole batch.",
        "operationId": "bulk_delete_compliance_findings_api_v1_compliance_compliance_findings_bulk_delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceFindingBulkDelete"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceFindingBulkResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Delete Compliance Findings",
        "tags": [
          "Compliance"
        ]
      },
      "patch": {
        "description": "Bulk-transition multiple compliance findings to one decision.\n\nPer-row lifecycle validation still runs \u2014 a row whose current\ndecision can't legally transition to ``body.decision`` is reported\nin ``skipped`` (with ``reason=\"illegal_transition\"``) instead of\nfailing the whole batch. Risk-tracked findings with an open Risk\nare also skipped (``reason=\"risk_tracked\"``); the linked Risk has\nto be closed first via the Risk lifecycle. Missing ids are\nskipped with ``reason=\"not_found\"``.\n\nThe reviewer (``reviewed_by`` / ``reviewed_at``) is set to the\ncaller on every successful row, mirroring the per-row endpoint.\n\nNOTE: this route MUST be declared before the single-row\n``PATCH /compliance/compliance-findings/{finding_id}`` so FastAPI\nmatches the literal ``bulk`` segment first. Don't reorder.",
        "operationId": "bulk_update_compliance_findings_api_v1_compliance_compliance_findings_bulk_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceFindingBulkDecisionUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceFindingBulkResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Update Compliance Findings",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance-findings/{finding_id}": {
      "delete": {
        "description": "Permanently delete a compliance finding.\n\nAdmin-grade action gated by ``compliance.manage`` (granted\nonly to the admin role by default). The linked Risk (if any) is\nNOT cascaded \u2014 risks are independent records once promoted; the\nfinding's row is simply removed. The next compliance scan will\nre-emit the finding if the LLM still reports it for the same\ncard+regulation+article+requirement.",
        "operationId": "delete_compliance_finding_api_v1_compliance_compliance_findings__finding_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "finding_id",
            "required": true,
            "schema": {
              "title": "Finding Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Compliance Finding",
        "tags": [
          "Compliance"
        ]
      },
      "patch": {
        "description": "Transition a compliance finding's lifecycle state.\n\nAllowed transitions follow ``compliance_lifecycle_allowed`` in\n``services.compliance_scanner``. ``accepted`` requires a\n``review_note``. ``risk_tracked`` is set by\n``POST /risks/promote/compliance/{id}`` (not here) and once a\nfinding is risk-tracked, manual transitions are blocked until the\nlinked Risk closes \u2014 the Risk lifecycle drives the finding via\n``compliance_risk_sync.propagate_risk_to_findings``.",
        "operationId": "update_compliance_finding_decision_api_v1_compliance_compliance_findings__finding_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "finding_id",
            "required": true,
            "schema": {
              "title": "Finding Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceFindingDecisionUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceFindingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Compliance Finding Decision",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance-findings/{finding_id}/ai-verdict": {
      "post": {
        "description": "Record the user's verdict on the scanner's AI-detection claim.\n\nPersists ``hasAiFeatures`` (true / false) on the impacted card and\nadvances the finding's lifecycle to ``in_review`` with an audit\nreview note. The card must exist; landscape-scoped findings (no\n``card_id``) cannot receive a verdict.",
        "operationId": "submit_ai_verdict_api_v1_compliance_compliance_findings__finding_id__ai_verdict_post",
        "parameters": [
          {
            "in": "path",
            "name": "finding_id",
            "required": true,
            "schema": {
              "title": "Finding Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceFindingAiVerdict"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceFindingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Submit Ai Verdict",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance-findings/{finding_id}/details": {
      "patch": {
        "description": "Edit a finding's descriptive / assessment fields.\n\nDistinct from ``PATCH /compliance-findings/{id}`` which only\ntransitions the lifecycle ``decision``. This endpoint updates the\nhuman-authored content of a finding \u2014 compliance ``status``,\n``severity``, ``requirement``, gap/evidence/remediation, category,\narticle, regulation, and linked card \u2014 without touching the lifecycle\nstate. The ``finding_key`` is recomputed so a later re-scan still\nupserts cleanly. Requires ``compliance.manage``.",
        "operationId": "update_compliance_finding_details_api_v1_compliance_compliance_findings__finding_id__details_patch",
        "parameters": [
          {
            "in": "path",
            "name": "finding_id",
            "required": true,
            "schema": {
              "title": "Finding Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceFindingDetailUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ComplianceFindingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Compliance Finding Details",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/compliance-scan": {
      "post": {
        "description": "Trigger the compliance (per-regulation AI gap analysis) pipeline only.",
        "operationId": "trigger_compliance_scan_api_v1_compliance_compliance_scan_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/SecurityScanRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Trigger Compliance Scan",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/compliance/overview": {
      "get": {
        "description": "KPIs for the compliance scanner dashboard.",
        "operationId": "security_overview_api_v1_compliance_overview_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityOverviewOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Security Overview",
        "tags": [
          "Compliance"
        ]
      }
    },
    "/api/v1/diagram-groups": {
      "get": {
        "operationId": "list_groups_api_v1_diagram_groups_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Groups",
        "tags": [
          "diagrams"
        ]
      },
      "post": {
        "operationId": "create_group_api_v1_diagram_groups_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Group",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagram-groups/{group_id}": {
      "delete": {
        "operationId": "delete_group_api_v1_diagram_groups__group_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Group",
        "tags": [
          "diagrams"
        ]
      },
      "patch": {
        "operationId": "update_group_api_v1_diagram_groups__group_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Group",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams": {
      "get": {
        "operationId": "list_diagrams_api_v1_diagrams_get",
        "parameters": [
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "mine",
            "required": false,
            "schema": {
              "default": false,
              "title": "Mine",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "favorites",
            "required": false,
            "schema": {
              "default": false,
              "title": "Favorites",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "group_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Group Id"
            }
          },
          {
            "in": "query",
            "name": "sort_by",
            "required": false,
            "schema": {
              "default": "updated_at",
              "title": "Sort By",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sort_dir",
            "required": false,
            "schema": {
              "default": "desc",
              "title": "Sort Dir",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Diagrams",
        "tags": [
          "diagrams"
        ]
      },
      "post": {
        "operationId": "create_diagram_api_v1_diagrams_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Diagram",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/favorites": {
      "get": {
        "description": "Return the set of diagram ids the current user has favorited.",
        "operationId": "list_favorite_diagrams_api_v1_diagrams_favorites_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Favorite Diagrams",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/public/{slug}": {
      "get": {
        "description": "Return the published picture: a name, sanitised DrawIO XML and its legend.\n\nDeliberately narrow. No card ids, no relations, no description, no\nlifecycle \u2014 see ``sanitise_public_xml``. The XML is enough for the DrawIO\nlightbox to render, pan and zoom it, and nothing more. ``legend`` is the key\nto the colours the picture already shows (``None`` when coloured by card\ntype): labels, colours and counts only, never a card's identity or value \u2014\nsee ``build_public_legend``.",
        "operationId": "get_public_diagram_api_v1_diagrams_public__slug__get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Diagram",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/public/{slug}/gate": {
      "get": {
        "description": "Always-public gate metadata: the access mode and, for SSO, the config the\nembed page needs to start the IdP redirect. Returns the name and nothing\nelse \u2014 never the XML, and never anything about the cards behind it.",
        "operationId": "get_diagram_gate_api_v1_diagrams_public__slug__gate_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Diagram Gate",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/public/{slug}/sso/callback": {
      "post": {
        "description": "Exchange an SSO authorization code for an account-less diagram session.\n\nCreates NO user account \u2014 it mints a cookie scoped to this one diagram.",
        "operationId": "diagram_sso_callback_api_v1_diagrams_public__slug__sso_callback_post",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramSsoCallbackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Diagram Sso Callback",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/{diagram_id}": {
      "delete": {
        "operationId": "delete_diagram_api_v1_diagrams__diagram_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Diagram",
        "tags": [
          "diagrams"
        ]
      },
      "get": {
        "operationId": "get_diagram_api_v1_diagrams__diagram_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Diagram",
        "tags": [
          "diagrams"
        ]
      },
      "patch": {
        "operationId": "update_diagram_api_v1_diagrams__diagram_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Diagram",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/{diagram_id}/cards": {
      "post": {
        "description": "Link a card to a diagram.",
        "operationId": "link_card_to_diagram_api_v1_diagrams__diagram_id__cards_post",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Link Card To Diagram",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/{diagram_id}/cards/{card_id}": {
      "delete": {
        "description": "Unlink a card from a diagram.",
        "operationId": "unlink_card_from_diagram_api_v1_diagrams__diagram_id__cards__card_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Unlink Card From Diagram",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/{diagram_id}/favorite": {
      "delete": {
        "description": "Remove a diagram from favorites.",
        "operationId": "remove_diagram_favorite_api_v1_diagrams__diagram_id__favorite_delete",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Remove Diagram Favorite",
        "tags": [
          "diagrams"
        ]
      },
      "post": {
        "description": "Add a diagram to favorites. Idempotent.",
        "operationId": "add_diagram_favorite_api_v1_diagrams__diagram_id__favorite_post",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Add Diagram Favorite",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/{diagram_id}/groups": {
      "put": {
        "description": "Replace a diagram's group memberships (multi-group).",
        "operationId": "set_diagram_groups_api_v1_diagrams__diagram_id__groups_put",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramGroupsUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Set Diagram Groups",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/diagrams/{diagram_id}/publish": {
      "delete": {
        "description": "Withdraw a diagram from public view, effective immediately.\n\nThe slug is retained (not cleared) so re-publishing restores the same URL.\nAccess stops regardless: every public route filters on ``is_published``, so\nan already-issued SSO cookie stops working the moment this returns.",
        "operationId": "unpublish_diagram_api_v1_diagrams__diagram_id__publish_delete",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Unpublish Diagram",
        "tags": [
          "diagrams"
        ]
      },
      "post": {
        "description": "Publish a diagram as a read-only link, or update how it is shared.\n\nGated on ``diagrams.publish`` rather than ``diagrams.manage``: making\ninternal architecture readable outside the instance is a different\nauthority from editing it, and most installs will want to grant it far\nmore narrowly.",
        "operationId": "publish_diagram_api_v1_diagrams__diagram_id__publish_post",
        "parameters": [
          {
            "in": "path",
            "name": "diagram_id",
            "required": true,
            "schema": {
              "title": "Diagram Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DiagramPublishRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Publish Diagram",
        "tags": [
          "diagrams"
        ]
      }
    },
    "/api/v1/documents/{doc_id}": {
      "delete": {
        "operationId": "delete_document_api_v1_documents__doc_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "doc_id",
            "required": true,
            "schema": {
              "title": "Doc Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Document",
        "tags": [
          "documents"
        ]
      },
      "patch": {
        "description": "Edit a document link's name, URL or type.\n\nSame authority as deleting it (``documents.manage`` or the card-level\n``card.manage_documents``). Only the fields that actually move are\nwritten and recorded, as ``changes = {field: {\"old\", \"new\"}}`` on a\n``document.updated`` event \u2014 the shape the card's History tab renders.\nA PATCH that changes nothing writes nothing and emits nothing, so a\nre-saved dialog never moves the card's Modified date (#1166).",
        "operationId": "update_document_api_v1_documents__doc_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "doc_id",
            "required": true,
            "schema": {
              "title": "Doc Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DocumentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Document",
        "tags": [
          "documents"
        ]
      }
    },
    "/api/v1/eol/card-status": {
      "get": {
        "description": "Resolve the end-of-life status of every card of a type in one call.\n\nBacks the inventory's End of life column and filter. Cards with neither a\nproduct link nor a manual End of Life date are **absent** from the map\nrather than present with a null status \u2014 the client reads absence as \"not\nrecorded\", and it keeps the payload proportional to what is actually\nlinked rather than to the size of the landscape.",
        "operationId": "eol_card_status_api_v1_eol_card_status_get",
        "parameters": [
          {
            "description": "Application or ITComponent",
            "in": "query",
            "name": "type",
            "required": true,
            "schema": {
              "description": "Application or ITComponent",
              "title": "Type",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EolCardStatusResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Eol Card Status",
        "tags": [
          "End of Life"
        ]
      }
    },
    "/api/v1/eol/mass-link": {
      "post": {
        "description": "Bulk-link cards to EOL products/cycles.\n\nExpects a list of: [{card_id, eol_product, eol_cycle}].\nOnly the EOL product/cycle association is recorded \u2014 lifecycle phase dates\n(including End of Life, the decommission date) are manually owned and are\nnever auto-filled from vendor EOL data.",
        "operationId": "mass_eol_link_api_v1_eol_mass_link_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "title": "Links",
                "type": "array"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Mass Eol Link",
        "tags": [
          "End of Life"
        ]
      }
    },
    "/api/v1/eol/mass-search": {
      "post": {
        "description": "Mass-search EOL products for all cards of a given type.\n\nFinds fuzzy matches on endoflife.date for each card name.\nOnly returns cards that have potential matches.",
        "operationId": "mass_eol_search_api_v1_eol_mass_search_post",
        "parameters": [
          {
            "description": "Card type to search (Application or ITComponent)",
            "in": "query",
            "name": "type_key",
            "required": true,
            "schema": {
              "description": "Card type to search (Application or ITComponent)",
              "title": "Type Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MassEolResult"
                  },
                  "title": "Response Mass Eol Search Api V1 Eol Mass Search Post",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Mass Eol Search",
        "tags": [
          "End of Life"
        ]
      }
    },
    "/api/v1/eol/products": {
      "get": {
        "description": "Return the list of all products tracked by endoflife.date.\n\nAn optional *search* query filters the list client-side (the upstream API\nis purely static JSON and does not support server-side filtering).",
        "operationId": "list_products_api_v1_eol_products_get",
        "parameters": [
          {
            "description": "Filter product names (case-insensitive substring match)",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "default": "",
              "description": "Filter product names (case-insensitive substring match)",
              "title": "Search",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EolProduct"
                  },
                  "title": "Response List Products Api V1 Eol Products Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Products",
        "tags": [
          "End of Life"
        ]
      }
    },
    "/api/v1/eol/products/fuzzy": {
      "get": {
        "description": "Fuzzy-search products on endoflife.date.\n\nReturns products ranked by fuzzy match score. Handles common\nmismatches like \"SAP HANA\" \u2192 \"sap-hana\", \"Node.js\" \u2192 \"nodejs\", etc.",
        "operationId": "fuzzy_search_products_api_v1_eol_products_fuzzy_get",
        "parameters": [
          {
            "description": "Fuzzy search query",
            "in": "query",
            "name": "search",
            "required": true,
            "schema": {
              "description": "Fuzzy search query",
              "minLength": 2,
              "title": "Search",
              "type": "string"
            }
          },
          {
            "description": "Max results",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 10,
              "description": "Max results",
              "maximum": 50,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EolProductMatch"
                  },
                  "title": "Response Fuzzy Search Products Api V1 Eol Products Fuzzy Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Fuzzy Search Products",
        "tags": [
          "End of Life"
        ]
      }
    },
    "/api/v1/eol/products/{product}": {
      "get": {
        "description": "Return all release cycles for a given product.",
        "operationId": "get_product_cycles_api_v1_eol_products__product__get",
        "parameters": [
          {
            "in": "path",
            "name": "product",
            "required": true,
            "schema": {
              "title": "Product",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EolCycle"
                  },
                  "title": "Response Get Product Cycles Api V1 Eol Products  Product  Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Product Cycles",
        "tags": [
          "End of Life"
        ]
      }
    },
    "/api/v1/events": {
      "get": {
        "operationId": "list_events_api_v1_events_get",
        "parameters": [
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Events",
        "tags": [
          "events"
        ]
      }
    },
    "/api/v1/events/my-cards": {
      "get": {
        "description": "Recent events on cards the current user is a stakeholder on or has favorited.\n\nUsed by the Dashboard \u2192 My Workspace tab. The shape mirrors\n``/reports/dashboard``'s ``recent_events`` so the frontend can reuse\nthe existing ``RecentActivity`` component verbatim.",
        "operationId": "list_my_card_events_api_v1_events_my_cards_get",
        "parameters": [
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "maximum": 50,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List My Card Events",
        "tags": [
          "events"
        ]
      }
    },
    "/api/v1/events/stream": {
      "get": {
        "description": "SSE endpoint. Accepts token via query parameter or httpOnly cookie.\n\nEvents are filtered per subscriber: `admin.events` holders receive the full\naudit stream, everyone else only their own user-directed events (see\n`_event_visible_to`).",
        "operationId": "event_stream_api_v1_events_stream_get",
        "parameters": [
          {
            "in": "query",
            "name": "token",
            "required": false,
            "schema": {
              "default": "",
              "title": "Token",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Event Stream",
        "tags": [
          "events"
        ]
      }
    },
    "/api/v1/ext-assets/{key}/{version}/{asset_path}": {
      "get": {
        "description": "Serve an extension's frontend bundle files.\n\nDeliberately unauthenticated: dynamic ``import()`` cannot carry an\nAuthorization header, and extension code is not a secret \u2014 the\nentitlement gate is the authenticated ``/extensions/ui-manifest``\nplus every ``/ext/{key}/`` data API. Same-origin serving keeps the\nstrict ``script-src 'self'`` CSP intact. The version segment exists\nfor cache-busting (assets are served immutable).",
        "operationId": "get_extension_asset_api_v1_ext_assets__key___version___asset_path__get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "version",
            "required": true,
            "schema": {
              "title": "Version",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "asset_path",
            "required": true,
            "schema": {
              "title": "Asset Path",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Extension Asset",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/extensions/status": {
      "get": {
        "description": "Least-privilege list of enabled extensions for any authenticated user.",
        "operationId": "extensions_status_api_v1_extensions_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ExtensionStatusOut"
                  },
                  "title": "Response Extensions Status Api V1 Extensions Status Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Extensions Status",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/extensions/ui-manifest": {
      "get": {
        "description": "UI bundles the frontend loader should import \u2014 THE entitlement gate\nfor extension UI. Only enabled extensions with a usable (active or\ngrace) entitlement and a frontend entry are listed.",
        "operationId": "ui_manifest_api_v1_extensions_ui_manifest_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/UiExtensionOut"
                  },
                  "title": "Response Ui Manifest Api V1 Extensions Ui Manifest Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ui Manifest",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/extensions/{key}/release-notes": {
      "get": {
        "description": "What changed in an extension release, for the person who was told about it.\n\nAuthenticated but **not** permission-gated, exactly as ``/settings/whats-new``\nis: everyone who receives the \"extension updated\" notification has to be\nable to read what changed, and a changelog is not privileged information \u2014\nthe same text is on the vendor's public store page.\n\nPrefers the installed bundle: this describes a release that has *landed on\nthis instance*, so the bytes on disk are the authority, not whatever the\ncatalogue has moved on to since.",
        "operationId": "extension_release_notes_api_v1_extensions__key__release_notes_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "version",
            "required": true,
            "schema": {
              "title": "Version",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "from_version",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From Version"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtensionNotesOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Extension Release Notes",
        "tags": [
          "Extensions"
        ]
      }
    },
    "/api/v1/favorites": {
      "get": {
        "description": "List current user's favorite cards.",
        "operationId": "list_favorites_api_v1_favorites_get",
        "parameters": [
          {
            "description": "Filter by card type key",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by card type key",
              "title": "Type"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Favorites",
        "tags": [
          "favorites"
        ]
      }
    },
    "/api/v1/favorites/{card_id}": {
      "delete": {
        "description": "Remove a card from favorites.",
        "operationId": "remove_favorite_api_v1_favorites__card_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Remove Favorite",
        "tags": [
          "favorites"
        ]
      },
      "post": {
        "description": "Add a card to favorites. Idempotent \u2014 returns 200 if already favorited.",
        "operationId": "add_favorite_api_v1_favorites__card_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Add Favorite",
        "tags": [
          "favorites"
        ]
      }
    },
    "/api/v1/file-attachments/{attachment_id}": {
      "delete": {
        "operationId": "delete_file_attachment_api_v1_file_attachments__attachment_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "attachment_id",
            "required": true,
            "schema": {
              "title": "Attachment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete File Attachment",
        "tags": [
          "file-attachments"
        ]
      },
      "patch": {
        "description": "Rename a file attachment or change its category.\n\nThe bytes are untouched, so the new name must keep an extension that\nmaps to the stored format (``.jpg`` \u2194 ``.jpeg`` is fine, ``.pdf`` \u2192\n``.docx`` is not \u2014 that is a replace). Only the fields that move are\nwritten and recorded as ``changes`` on a ``file.updated`` event; a\nno-op PATCH writes nothing and emits nothing (#1166). Not gated on the\nuploads toggle: like a delete, it moves no bytes.",
        "operationId": "update_file_attachment_api_v1_file_attachments__attachment_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "attachment_id",
            "required": true,
            "schema": {
              "title": "Attachment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FileAttachmentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update File Attachment",
        "tags": [
          "file-attachments"
        ]
      }
    },
    "/api/v1/file-attachments/{attachment_id}/content": {
      "put": {
        "description": "Upload a new version of a file into the same attachment.\n\nThe row keeps its id, so every reference to it survives, but otherwise it\nreads as a fresh upload: name, MIME, size and bytes come from the new\nfile, ``category`` from the form exactly as on an upload (absent means\nnone \u2014 a multipart field cannot say \"clear\" any other way, FastAPI reads\nan empty form value as omitted), and ``created_at`` / ``created_by`` are\nreset to now and the person replacing it. The version it supersedes lives\non only in the card's History, as ``previous`` on the ``file.replaced``\nevent (#1166). Same checks as an upload, and refused for the same reason\nwhile uploads are switched off.",
        "operationId": "replace_file_attachment_api_v1_file_attachments__attachment_id__content_put",
        "parameters": [
          {
            "in": "path",
            "name": "attachment_id",
            "required": true,
            "schema": {
              "title": "Attachment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_replace_file_attachment_api_v1_file_attachments__attachment_id__content_put"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Replace File Attachment",
        "tags": [
          "file-attachments"
        ]
      }
    },
    "/api/v1/file-attachments/{attachment_id}/download": {
      "get": {
        "operationId": "download_file_attachment_api_v1_file_attachments__attachment_id__download_get",
        "parameters": [
          {
            "in": "path",
            "name": "attachment_id",
            "required": true,
            "schema": {
              "title": "Attachment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Download File Attachment",
        "tags": [
          "file-attachments"
        ]
      }
    },
    "/api/v1/metamodel/compliance-regulations": {
      "get": {
        "description": "List compliance regulations, ordered by sort_order.\n\nAuthenticated read so the TurboLens Security tab can fetch the list\neven for users without admin rights. Write operations remain gated\nbehind ``admin.metamodel``.",
        "operationId": "list_compliance_regulations_api_v1_metamodel_compliance_regulations_get",
        "parameters": [
          {
            "in": "query",
            "name": "enabled_only",
            "required": false,
            "schema": {
              "default": false,
              "title": "Enabled Only",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Compliance Regulations",
        "tags": [
          "metamodel"
        ]
      },
      "post": {
        "description": "Create a new compliance regulation (admin only).",
        "operationId": "create_compliance_regulation_api_v1_metamodel_compliance_regulations_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceRegulationCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Compliance Regulation",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/compliance-regulations/{regulation_id}": {
      "delete": {
        "description": "Delete a compliance regulation (admin only).\n\nBuilt-in regulations are protected \u2014 they can be disabled but not\nhard-deleted, mirroring the built-in CardType pattern.",
        "operationId": "delete_compliance_regulation_api_v1_metamodel_compliance_regulations__regulation_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "regulation_id",
            "required": true,
            "schema": {
              "title": "Regulation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Compliance Regulation",
        "tags": [
          "metamodel"
        ]
      },
      "patch": {
        "description": "Update a compliance regulation (admin only).\n\nThe ``key`` is immutable. ``built_in`` regulations can be edited and\ndisabled but never deleted.",
        "operationId": "update_compliance_regulation_api_v1_metamodel_compliance_regulations__regulation_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "regulation_id",
            "required": true,
            "schema": {
              "title": "Regulation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ComplianceRegulationUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Compliance Regulation",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/principles": {
      "get": {
        "description": "List all EA principles ordered by sort_order.",
        "operationId": "list_principles_api_v1_metamodel_principles_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Principles",
        "tags": [
          "metamodel"
        ]
      },
      "post": {
        "description": "Create a new EA principle (admin only).",
        "operationId": "create_principle_api_v1_metamodel_principles_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipleCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Principle",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/principles/{principle_id}": {
      "delete": {
        "description": "Delete an EA principle (admin only).",
        "operationId": "delete_principle_api_v1_metamodel_principles__principle_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "principle_id",
            "required": true,
            "schema": {
              "title": "Principle Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Principle",
        "tags": [
          "metamodel"
        ]
      },
      "patch": {
        "description": "Update an EA principle (admin only).",
        "operationId": "update_principle_api_v1_metamodel_principles__principle_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "principle_id",
            "required": true,
            "schema": {
              "title": "Principle Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrincipleUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Principle",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/relation-types": {
      "get": {
        "operationId": "list_relation_types_api_v1_metamodel_relation_types_get",
        "parameters": [
          {
            "description": "Filter relations connected to this type",
            "in": "query",
            "name": "type_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter relations connected to this type",
              "title": "Type Key"
            }
          },
          {
            "in": "query",
            "name": "include_hidden",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Hidden",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Relation Types",
        "tags": [
          "metamodel"
        ]
      },
      "post": {
        "operationId": "create_relation_type_api_v1_metamodel_relation_types_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Relation Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/relation-types/{key}": {
      "delete": {
        "operationId": "delete_relation_type_api_v1_metamodel_relation_types__key__delete",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "description": "Force-delete even with existing instances",
            "in": "query",
            "name": "force",
            "required": false,
            "schema": {
              "default": false,
              "description": "Force-delete even with existing instances",
              "title": "Force",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Relation Type",
        "tags": [
          "metamodel"
        ]
      },
      "get": {
        "operationId": "get_relation_type_api_v1_metamodel_relation_types__key__get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Relation Type",
        "tags": [
          "metamodel"
        ]
      },
      "patch": {
        "operationId": "update_relation_type_api_v1_metamodel_relation_types__key__patch",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Relation Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/relation-types/{key}/instance-count": {
      "get": {
        "description": "Return the number of relation instances using this relation type.",
        "operationId": "get_relation_type_instance_count_api_v1_metamodel_relation_types__key__instance_count_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Relation Type Instance Count",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/relation-types/{key}/restore": {
      "post": {
        "description": "Restore a soft-deleted (hidden) built-in relation type.",
        "operationId": "restore_relation_type_api_v1_metamodel_relation_types__key__restore_post",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Restore Relation Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/resource-types": {
      "get": {
        "description": "List resource types (link types & file categories).\n\nAuthenticated read so the card Resources tab can fetch the lists for\nany user. Write operations remain gated behind ``admin.metamodel``.",
        "operationId": "list_resource_types_api_v1_metamodel_resource_types_get",
        "parameters": [
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "enabled_only",
            "required": false,
            "schema": {
              "default": false,
              "title": "Enabled Only",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Resource Types",
        "tags": [
          "metamodel"
        ]
      },
      "post": {
        "description": "Create a new resource type (admin only).",
        "operationId": "create_resource_type_api_v1_metamodel_resource_types_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceTypeCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Resource Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/resource-types/{resource_type_id}": {
      "delete": {
        "description": "Delete a resource type (admin only).\n\nBuilt-in rows are protected \u2014 they can be disabled but not hard-deleted.",
        "operationId": "delete_resource_type_api_v1_metamodel_resource_types__resource_type_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "resource_type_id",
            "required": true,
            "schema": {
              "title": "Resource Type Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Resource Type",
        "tags": [
          "metamodel"
        ]
      },
      "patch": {
        "description": "Update a resource type (admin only).\n\n``kind`` and ``key`` are immutable. ``built_in`` rows can be edited and\ndisabled but never deleted.",
        "operationId": "update_resource_type_api_v1_metamodel_resource_types__resource_type_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "resource_type_id",
            "required": true,
            "schema": {
              "title": "Resource Type Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceTypeUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Resource Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types": {
      "get": {
        "operationId": "list_types_api_v1_metamodel_types_get",
        "parameters": [
          {
            "in": "query",
            "name": "include_hidden",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Hidden",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Types",
        "tags": [
          "metamodel"
        ]
      },
      "post": {
        "operationId": "create_type_api_v1_metamodel_types_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}": {
      "delete": {
        "operationId": "delete_type_api_v1_metamodel_types__key__delete",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Type",
        "tags": [
          "metamodel"
        ]
      },
      "get": {
        "operationId": "get_type_api_v1_metamodel_types__key__get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Type",
        "tags": [
          "metamodel"
        ]
      },
      "patch": {
        "operationId": "update_type_api_v1_metamodel_types__key__patch",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Type",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/field-usage": {
      "get": {
        "description": "Return how many active cards have a non-null value for a given field.",
        "operationId": "get_field_usage_api_v1_metamodel_types__key__field_usage_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "description": "The field key to check",
            "in": "query",
            "name": "field_key",
            "required": true,
            "schema": {
              "description": "The field key to check",
              "title": "Field Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Field Usage",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/generate-references": {
      "post": {
        "description": "Assign IDs to existing cards of this type that don't have one yet (#811).\n\nExplicit, on-demand counterpart to the type Save (which never backfills).\nFill-only + idempotent \u2014 re-running only fills newly-missing cards, so it\nnever rewrites an existing ID. Uses the stored config, so save the format\nfirst.\n\n(A future \"regenerate all\" would compose from the same primitive:\n``UPDATE cards SET reference = NULL WHERE type = key`` then\n``backfill_references_for_type`` \u2014 deliberately not built here.)",
        "operationId": "generate_references_api_v1_metamodel_types__key__generate_references_post",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Generate References",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/hierarchy-label-usage": {
      "get": {
        "description": "Return how many active cards carry a given hierarchy link label (#1100).\n\nIts own endpoint rather than a branch of ``option-usage``: that one\ndispatches on a ``fields_schema`` field type and reads ``attributes``,\nwhereas a link label is the ``cards.parent_label`` column.\n\nDeleting the option does **not** rewrite the stored values \u2014 they keep\nrendering as the unknown-option chip, and the card stays editable because\nthe write validator exempts an unchanged value. This count is what lets the\nadmin dialog say how many cards that will affect before they confirm.",
        "operationId": "get_hierarchy_label_usage_api_v1_metamodel_types__key__hierarchy_label_usage_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "description": "The hierarchy link label key to check",
            "in": "query",
            "name": "label_key",
            "required": true,
            "schema": {
              "description": "The hierarchy link label key to check",
              "title": "Label Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Hierarchy Label Usage",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/option-usage": {
      "get": {
        "description": "Return how many active cards use a specific option value.",
        "operationId": "get_option_usage_api_v1_metamodel_types__key__option_usage_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "description": "The field key",
            "in": "query",
            "name": "field_key",
            "required": true,
            "schema": {
              "description": "The field key",
              "title": "Field Key",
              "type": "string"
            }
          },
          {
            "description": "The option key to check",
            "in": "query",
            "name": "option_key",
            "required": true,
            "schema": {
              "description": "The option key to check",
              "title": "Option Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Option Usage",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/permissions": {
      "get": {
        "description": "The per-role permission matrix for one card type (admin Permissions tab).\n\nGated on ``admin.metamodel`` because it reveals part of the RBAC matrix.\nIt deliberately exposes only the five type-scoped inventory bits per role \u2014\nnever the full permission set, which stays behind ``admin.roles`` \u2014 so an\nadmin who may edit the metamodel can see what a role inherits without\nbeing handed the whole role configuration.\n\n``inherited`` is what the role grants landscape-wide; ``overrides`` is what\nthis type stores. A cell missing from ``overrides`` inherits. Archived\nroles are omitted, and a stored override naming a role that no longer\nexists is simply not listed (it is inert at check time too).",
        "operationId": "get_type_permissions_api_v1_metamodel_types__key__permissions_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Type Permissions",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/reference-usage": {
      "get": {
        "description": "Report card ID coverage for the metamodel editor (#811).\n\n- ``count``   \u2014 cards of this type that already have an ID.\n- ``missing`` \u2014 cards with no ID yet (what the Generate button would fill).\n- ``locked``  \u2014 once ``count`` > 0 the prefix / start / min-digits are frozen.",
        "operationId": "get_reference_usage_api_v1_metamodel_types__key__reference_usage_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Reference Usage",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{key}/section-usage": {
      "get": {
        "description": "Return how many active cards have data for any field in a section.",
        "operationId": "get_section_usage_api_v1_metamodel_types__key__section_usage_get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          },
          {
            "description": "Comma-separated field keys in the section",
            "in": "query",
            "name": "field_keys",
            "required": true,
            "schema": {
              "description": "Comma-separated field keys in the section",
              "title": "Field Keys",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Section Usage",
        "tags": [
          "metamodel"
        ]
      }
    },
    "/api/v1/metamodel/types/{type_key}/stakeholder-roles": {
      "get": {
        "description": "List stakeholder roles for a card type, each with its assignment count.",
        "operationId": "list_stakeholder_roles_api_v1_metamodel_types__type_key__stakeholder_roles_get",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Archived",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Stakeholder Roles",
        "tags": [
          "stakeholder-roles"
        ]
      },
      "post": {
        "operationId": "create_stakeholder_role_api_v1_metamodel_types__type_key__stakeholder_roles_post",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StakeholderRoleCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Stakeholder Role",
        "tags": [
          "stakeholder-roles"
        ]
      }
    },
    "/api/v1/metamodel/types/{type_key}/stakeholder-roles/{role_key}": {
      "delete": {
        "description": "Permanently delete an **unused** stakeholder role.\n\nRefused (409) while anyone holds the role on a card of this type, while a\nsurvey targets it, or when it is the type's last active role \u2014 archive is the\nanswer in those cases. Deleting an in-use role would silently strip the\ncard-level permissions it grants from real users, unrecoverably, and\n``stakeholders.role`` has no foreign key to make that visible.",
        "operationId": "delete_stakeholder_role_api_v1_metamodel_types__type_key__stakeholder_roles__role_key__delete",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "role_key",
            "required": true,
            "schema": {
              "title": "Role Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Stakeholder Role",
        "tags": [
          "stakeholder-roles"
        ]
      },
      "get": {
        "description": "Get a single stakeholder role with permissions.",
        "operationId": "get_stakeholder_role_api_v1_metamodel_types__type_key__stakeholder_roles__role_key__get",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "role_key",
            "required": true,
            "schema": {
              "title": "Role Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Stakeholder Role",
        "tags": [
          "stakeholder-roles"
        ]
      },
      "patch": {
        "operationId": "update_stakeholder_role_api_v1_metamodel_types__type_key__stakeholder_roles__role_key__patch",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "role_key",
            "required": true,
            "schema": {
              "title": "Role Key",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StakeholderRoleUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Stakeholder Role",
        "tags": [
          "stakeholder-roles"
        ]
      }
    },
    "/api/v1/metamodel/types/{type_key}/stakeholder-roles/{role_key}/archive": {
      "post": {
        "operationId": "archive_stakeholder_role_api_v1_metamodel_types__type_key__stakeholder_roles__role_key__archive_post",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "role_key",
            "required": true,
            "schema": {
              "title": "Role Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Archive Stakeholder Role",
        "tags": [
          "stakeholder-roles"
        ]
      }
    },
    "/api/v1/metamodel/types/{type_key}/stakeholder-roles/{role_key}/restore": {
      "post": {
        "operationId": "restore_stakeholder_role_api_v1_metamodel_types__type_key__stakeholder_roles__role_key__restore_post",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "role_key",
            "required": true,
            "schema": {
              "title": "Role Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Restore Stakeholder Role",
        "tags": [
          "stakeholder-roles"
        ]
      }
    },
    "/api/v1/metamodel/types/{type_key}/stakeholder-roles/{role_key}/usage": {
      "get": {
        "description": "Report what would block deleting or re-keying this role.\n\nMirrors ``GET /metamodel/types/{key}/field-usage`` so the admin UI can show\nthe impact before offering a destructive action.",
        "operationId": "stakeholder_role_usage_api_v1_metamodel_types__type_key__stakeholder_roles__role_key__usage_get",
        "parameters": [
          {
            "in": "path",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "role_key",
            "required": true,
            "schema": {
              "title": "Role Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Stakeholder Role Usage",
        "tags": [
          "stakeholder-roles"
        ]
      }
    },
    "/api/v1/migration": {
      "get": {
        "operationId": "list_migrations_api_v1_migration_get",
        "parameters": [
          {
            "in": "query",
            "name": "source_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Type"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MigrationOut"
                  },
                  "title": "Response List Migrations Api V1 Migration Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Migrations",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/export": {
      "get": {
        "description": "Download the workspace in ``source_key``'s own export format.\n\nThe reverse of the importer: the inventory, metamodel, tags,\nstakeholders, documents and comments are collected into the same\nsnapshot shape the parsers produce, and the adapter writes its\nplatform's file \u2014 for LeanIX the Full Snapshot xlsx workbook the\nimporter accepts back unchanged. A full-landscape export, so it is\ngated like the workspace bundle export rather than per card type.",
        "operationId": "export_workspace_api_v1_migration_export_get",
        "parameters": [
          {
            "description": "Registry key of the target platform",
            "in": "query",
            "name": "source_key",
            "required": true,
            "schema": {
              "description": "Registry key of the target platform",
              "title": "Source Key",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Archived",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Workspace",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/sources": {
      "get": {
        "description": "Return every registered source adapter so the picker can render them.",
        "operationId": "list_sources_api_v1_migration_sources_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SourceOut"
                  },
                  "title": "Response List Sources Api V1 Migration Sources Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Sources",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/upload": {
      "post": {
        "operationId": "upload_snapshot_api_v1_migration_upload_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_snapshot_api_v1_migration_upload_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload Snapshot",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/{migration_id}": {
      "delete": {
        "operationId": "delete_migration_api_v1_migration__migration_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Migration",
        "tags": [
          "Migration"
        ]
      },
      "get": {
        "operationId": "get_migration_api_v1_migration__migration_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Migration",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/{migration_id}/apply": {
      "post": {
        "operationId": "apply_migration_endpoint_api_v1_migration__migration_id__apply_post",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Apply Migration Endpoint",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/{migration_id}/errors.csv": {
      "get": {
        "description": "CSV report of every staged row in `error` status for this migration.",
        "operationId": "download_error_report_api_v1_migration__migration_id__errors_csv_get",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Download Error Report",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/{migration_id}/field-mappings": {
      "get": {
        "description": "Return source fields per type alongside the candidate TEA targets.\n\nDrives the **Map fields** section of the migration detail dialog.\nAvailable once the migration is in ``parsed`` / ``previewed`` /\n``applied`` / ``failed`` state \u2014 earlier states have no parsed\nfields yet.",
        "operationId": "get_field_mappings_api_v1_migration__migration_id__field_mappings_get",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldMappingOptions"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Field Mappings",
        "tags": [
          "Migration"
        ]
      },
      "put": {
        "description": "Persist the admin's mapping choices.\n\nThe payload is a nested dict\n``{<source_native_type>: {<source_field_key>: <tea_field_key>}}``.\nEmpty string values clear a mapping; the literal ``\"__skip__\"``\nmeans \"do not import this field at all\".",
        "operationId": "update_field_mappings_api_v1_migration__migration_id__field_mappings_put",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FieldMappingUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MigrationOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Field Mappings",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/migration/{migration_id}/preview": {
      "get": {
        "operationId": "preview_migration_api_v1_migration__migration_id__preview_get",
        "parameters": [
          {
            "in": "path",
            "name": "migration_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Migration Id",
              "type": "string"
            }
          },
          {
            "description": "card / relation / tag / ...",
            "in": "query",
            "name": "entity_kind",
            "required": false,
            "schema": {
              "default": "card",
              "description": "card / relation / tag / ...",
              "title": "Entity Kind",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "card_type_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Type Key"
            }
          },
          {
            "description": "filter by action: create/update/skip/conflict",
            "in": "query",
            "name": "action",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "filter by action: create/update/skip/conflict",
              "title": "Action"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 100,
              "maximum": 10000,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreviewPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Preview Migration",
        "tags": [
          "Migration"
        ]
      }
    },
    "/api/v1/mitigation-tasks/{task_id}": {
      "delete": {
        "operationId": "delete_mitigation_task_api_v1_mitigation_tasks__task_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "boolean"
                  },
                  "title": "Response Delete Mitigation Task Api V1 Mitigation Tasks  Task Id  Delete",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Mitigation Task",
        "tags": [
          "Risks"
        ]
      },
      "patch": {
        "operationId": "update_mitigation_task_api_v1_mitigation_tasks__task_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MitigationTaskUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MitigationTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Mitigation Task",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/mitigation-tasks/{task_id}/occurrences": {
      "get": {
        "operationId": "list_task_occurrences_api_v1_mitigation_tasks__task_id__occurrences_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MitigationTaskOccurrenceOut"
                  },
                  "title": "Response List Task Occurrences Api V1 Mitigation Tasks  Task Id  Occurrences Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Task Occurrences",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/mitigation-tasks/{task_id}/occurrences/{occurrence_id}/complete": {
      "post": {
        "operationId": "complete_task_occurrence_api_v1_mitigation_tasks__task_id__occurrences__occurrence_id__complete_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "occurrence_id",
            "required": true,
            "schema": {
              "title": "Occurrence Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/OccurrenceCompleteRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MitigationTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Complete Task Occurrence",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/mitigation-tasks/{task_id}/occurrences/{occurrence_id}/promote": {
      "post": {
        "description": "Manually promote a ``scheduled`` occurrence to ``open`` immediately.\n\nMirrors what the daily background loop will do automatically when\nthe lead window opens \u2014 but lets a ``risks.manage`` holder pull a\ncycle forward (e.g. to run an access review early).\n\nIdempotent: promoting an already-open occurrence is a 200 no-op.\nPromoting a terminal occurrence (done / skipped) returns 409 since\nthose are immutable per the audit contract.",
        "operationId": "promote_task_occurrence_api_v1_mitigation_tasks__task_id__occurrences__occurrence_id__promote_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "occurrence_id",
            "required": true,
            "schema": {
              "title": "Occurrence Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MitigationTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Promote Task Occurrence",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/mitigation-tasks/{task_id}/occurrences/{occurrence_id}/skip": {
      "post": {
        "operationId": "skip_task_occurrence_api_v1_mitigation_tasks__task_id__occurrences__occurrence_id__skip_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "occurrence_id",
            "required": true,
            "schema": {
              "title": "Occurrence Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/OccurrenceCompleteRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MitigationTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Skip Task Occurrence",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/mutation-batches": {
      "get": {
        "description": "List mutation batches with filtering + pagination.\n\nReturns a ``{items, total, page, page_size}`` envelope (mirrors the\nrest of the read endpoints, e.g. ``GET /cards``). The audit-log UI\nuses the ``total`` to drive AG Grid's pagination footer; the\nbackground purge keeps ``mutation_batches`` bounded by\n``MUTATION_BATCH_RETENTION_DAYS`` so this never has to scan an\nunbounded table.",
        "operationId": "list_batches_api_v1_mutation_batches_get",
        "parameters": [
          {
            "in": "query",
            "name": "actor_user_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Actor User Id"
            }
          },
          {
            "in": "query",
            "name": "tool_name",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Tool Name"
            }
          },
          {
            "in": "query",
            "name": "origin",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Origin"
            }
          },
          {
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationBatchListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Batches",
        "tags": [
          "mutation-batches"
        ]
      },
      "post": {
        "description": "Open a mutation batch. Returns the batch id and, when the row\ncount exceeds the confirmation threshold on a dry-run, a one-shot\n``confirm_token`` the commit call must echo back.",
        "operationId": "open_batch_api_v1_mutation_batches_post",
        "parameters": [
          {
            "description": "Number of rows the wrapper intends to write",
            "in": "query",
            "name": "row_count",
            "required": false,
            "schema": {
              "default": 0,
              "description": "Number of rows the wrapper intends to write",
              "minimum": 0,
              "title": "Row Count",
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MutationBatchOpen"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationBatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Open Batch",
        "tags": [
          "mutation-batches"
        ]
      }
    },
    "/api/v1/mutation-batches/{batch_id}": {
      "get": {
        "operationId": "get_batch_meta_api_v1_mutation_batches__batch_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationBatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Batch Meta",
        "tags": [
          "mutation-batches"
        ]
      }
    },
    "/api/v1/mutation-batches/{batch_id}/commit": {
      "post": {
        "operationId": "close_batch_api_v1_mutation_batches__batch_id__commit_post",
        "parameters": [
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MutationBatchCommit"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationBatchOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Close Batch",
        "tags": [
          "mutation-batches"
        ]
      }
    },
    "/api/v1/mutation-batches/{batch_id}/events": {
      "get": {
        "operationId": "get_batch_history_api_v1_mutation_batches__batch_id__events_get",
        "parameters": [
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationBatchHistory"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Batch History",
        "tags": [
          "mutation-batches"
        ]
      }
    },
    "/api/v1/mutation-batches/{batch_id}/rollback": {
      "post": {
        "description": "Reverse the writes performed under a mutation batch.\n\nPermission rules: the batch owner can roll back their own batch\nwithout ``admin.events``; reverting another user's batch needs\n``admin.events``. ``force=True`` requires ``admin.events``\nregardless, since it accepts overwriting later writes by other\nusers.",
        "operationId": "rollback_api_v1_mutation_batches__batch_id__rollback_post",
        "parameters": [
          {
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Batch Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RollbackBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Rollback",
        "tags": [
          "mutation-batches"
        ]
      }
    },
    "/api/v1/notifications": {
      "get": {
        "description": "List notifications for the current user.",
        "operationId": "list_notifications_api_v1_notifications_get",
        "parameters": [
          {
            "in": "query",
            "name": "is_read",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Is Read"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Notifications",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/badge-counts": {
      "get": {
        "description": "Return counts for nav-bar badge dots: open todos and pending surveys.",
        "operationId": "badge_counts_api_v1_notifications_badge_counts_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Badge Counts",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/mark-all-read": {
      "post": {
        "operationId": "mark_all_read_api_v1_notifications_mark_all_read_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Mark All Read",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/unread-count": {
      "get": {
        "operationId": "unread_count_api_v1_notifications_unread_count_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Unread Count",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/notifications/{notification_id}/read": {
      "patch": {
        "operationId": "mark_read_api_v1_notifications__notification_id__read_patch",
        "parameters": [
          {
            "in": "path",
            "name": "notification_id",
            "required": true,
            "schema": {
              "title": "Notification Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Mark Read",
        "tags": [
          "notifications"
        ]
      }
    },
    "/api/v1/ops/export": {
      "get": {
        "description": "Stream the full secret-stripped workspace bundle (same content as\nAdmin \u2192 Workspace export) for control-plane backups and GDPR data exports.",
        "operationId": "ops_export_api_v1_ops_export_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ops Export",
        "tags": [
          "ops"
        ]
      }
    },
    "/api/v1/ops/info": {
      "get": {
        "operationId": "ops_info_api_v1_ops_info_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ops Info",
        "tags": [
          "ops"
        ]
      }
    },
    "/api/v1/ops/rescue-access": {
      "delete": {
        "description": "Immediately deactivate the rescue account created for a request.",
        "operationId": "revoke_rescue_access_api_v1_ops_rescue_access_delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RescueAccessRevoke"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Revoke Rescue Access",
        "tags": [
          "ops"
        ]
      },
      "post": {
        "description": "Create (or refresh) a time-boxed admin account for a control-plane operator.\n\nThe account is dedicated to this request (deterministic email derived from the\nrequest id), carries ``access_expires_at``, and is handed back as a single-use\npassword-setup link. Expiry is enforced instance-side by ``get_current_user``\nand the hourly deactivation loop \u2014 a control-plane outage cannot extend access.",
        "operationId": "create_rescue_access_api_v1_ops_rescue_access_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RescueAccessRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Rescue Access",
        "tags": [
          "ops"
        ]
      }
    },
    "/api/v1/ppm/budgets/{budget_id}": {
      "delete": {
        "operationId": "delete_budget_line_api_v1_ppm_budgets__budget_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "budget_id",
            "required": true,
            "schema": {
              "title": "Budget Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Budget Line",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_budget_line_api_v1_ppm_budgets__budget_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "budget_id",
            "required": true,
            "schema": {
              "title": "Budget Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmBudgetLineUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmBudgetLineOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Budget Line",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/costs/{cost_id}": {
      "delete": {
        "operationId": "delete_cost_line_api_v1_ppm_costs__cost_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "cost_id",
            "required": true,
            "schema": {
              "title": "Cost Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Cost Line",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_cost_line_api_v1_ppm_costs__cost_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "cost_id",
            "required": true,
            "schema": {
              "title": "Cost Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmCostLineUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmCostLineOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Cost Line",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/dependencies/{dep_id}": {
      "delete": {
        "operationId": "delete_dependency_api_v1_ppm_dependencies__dep_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "dep_id",
            "required": true,
            "schema": {
              "title": "Dep Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Dependency",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/budgets": {
      "get": {
        "operationId": "list_budget_lines_api_v1_ppm_initiatives__initiative_id__budgets_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmBudgetLineOut"
                  },
                  "title": "Response List Budget Lines Api V1 Ppm Initiatives  Initiative Id  Budgets Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Budget Lines",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_budget_line_api_v1_ppm_initiatives__initiative_id__budgets_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmBudgetLineCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmBudgetLineOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Budget Line",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/completion": {
      "get": {
        "description": "Return overall completion % for an initiative (average of root WBS items).",
        "operationId": "get_initiative_completion_api_v1_ppm_initiatives__initiative_id__completion_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Initiative Completion",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/costs": {
      "get": {
        "operationId": "list_cost_lines_api_v1_ppm_initiatives__initiative_id__costs_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmCostLineOut"
                  },
                  "title": "Response List Cost Lines Api V1 Ppm Initiatives  Initiative Id  Costs Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Cost Lines",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_cost_line_api_v1_ppm_initiatives__initiative_id__costs_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmCostLineCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmCostLineOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Cost Line",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/dependencies": {
      "get": {
        "operationId": "list_dependencies_api_v1_ppm_initiatives__initiative_id__dependencies_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmDependencyOut"
                  },
                  "title": "Response List Dependencies Api V1 Ppm Initiatives  Initiative Id  Dependencies Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Dependencies",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_dependency_api_v1_ppm_initiatives__initiative_id__dependencies_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmDependencyCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmDependencyOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Dependency",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/has-costs": {
      "get": {
        "operationId": "has_costs_api_v1_ppm_initiatives__initiative_id__has_costs_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Has Costs",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/reports": {
      "get": {
        "operationId": "list_reports_api_v1_ppm_initiatives__initiative_id__reports_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmStatusReportOut"
                  },
                  "title": "Response List Reports Api V1 Ppm Initiatives  Initiative Id  Reports Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Reports",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_report_api_v1_ppm_initiatives__initiative_id__reports_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmStatusReportCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmStatusReportOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Report",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/risks": {
      "get": {
        "operationId": "list_risks_api_v1_ppm_initiatives__initiative_id__risks_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmRiskOut"
                  },
                  "title": "Response List Risks Api V1 Ppm Initiatives  Initiative Id  Risks Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Risks",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_risk_api_v1_ppm_initiatives__initiative_id__risks_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmRiskCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmRiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Risk",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/tasks": {
      "get": {
        "operationId": "list_tasks_api_v1_ppm_initiatives__initiative_id__tasks_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmTaskOut"
                  },
                  "title": "Response List Tasks Api V1 Ppm Initiatives  Initiative Id  Tasks Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tasks",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_task_api_v1_ppm_initiatives__initiative_id__tasks_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmTaskCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Task",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/initiatives/{initiative_id}/wbs": {
      "get": {
        "operationId": "list_wbs_api_v1_ppm_initiatives__initiative_id__wbs_get",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmWbsOut"
                  },
                  "title": "Response List Wbs Api V1 Ppm Initiatives  Initiative Id  Wbs Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Wbs",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_wbs_api_v1_ppm_initiatives__initiative_id__wbs_post",
        "parameters": [
          {
            "in": "path",
            "name": "initiative_id",
            "required": true,
            "schema": {
              "title": "Initiative Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmWbsCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmWbsOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Wbs",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/reports/{report_id}": {
      "delete": {
        "operationId": "delete_report_api_v1_ppm_reports__report_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Report",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_report_api_v1_ppm_reports__report_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmStatusReportUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmStatusReportOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Report",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/risks/{risk_id}": {
      "delete": {
        "operationId": "delete_risk_api_v1_ppm_risks__risk_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Risk",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_risk_api_v1_ppm_risks__risk_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmRiskUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmRiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Risk",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/task-comments/{comment_id}": {
      "delete": {
        "operationId": "delete_task_comment_api_v1_ppm_task_comments__comment_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "comment_id",
            "required": true,
            "schema": {
              "title": "Comment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Task Comment",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_task_comment_api_v1_ppm_task_comments__comment_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "comment_id",
            "required": true,
            "schema": {
              "title": "Comment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmTaskCommentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmTaskCommentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Task Comment",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/tasks/{task_id}": {
      "delete": {
        "operationId": "delete_task_api_v1_ppm_tasks__task_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Task",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_task_api_v1_ppm_tasks__task_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmTaskUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Task",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/tasks/{task_id}/comments": {
      "get": {
        "operationId": "list_task_comments_api_v1_ppm_tasks__task_id__comments_get",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmTaskCommentOut"
                  },
                  "title": "Response List Task Comments Api V1 Ppm Tasks  Task Id  Comments Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Task Comments",
        "tags": [
          "ppm"
        ]
      },
      "post": {
        "operationId": "create_task_comment_api_v1_ppm_tasks__task_id__comments_post",
        "parameters": [
          {
            "in": "path",
            "name": "task_id",
            "required": true,
            "schema": {
              "title": "Task Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmTaskCommentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmTaskCommentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Task Comment",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/ppm/wbs/{wbs_id}": {
      "delete": {
        "operationId": "delete_wbs_api_v1_ppm_wbs__wbs_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "wbs_id",
            "required": true,
            "schema": {
              "title": "Wbs Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Wbs",
        "tags": [
          "ppm"
        ]
      },
      "patch": {
        "operationId": "update_wbs_api_v1_ppm_wbs__wbs_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "wbs_id",
            "required": true,
            "schema": {
              "title": "Wbs Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmWbsUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmWbsOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Wbs",
        "tags": [
          "ppm"
        ]
      }
    },
    "/api/v1/principles-catalogue": {
      "get": {
        "description": "Return the bundled principles catalogue with `existing_principle_id`\nannotations so the frontend can render a green tick on already-imported\nentries.",
        "operationId": "get_catalogue_api_v1_principles_catalogue_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Catalogue",
        "tags": [
          "principles-catalogue"
        ]
      }
    },
    "/api/v1/principles-catalogue/import": {
      "post": {
        "description": "Create EAPrinciple rows for the selected catalogue entries.\n\nIdempotent: catalogue ids that already exist as a principle (matched by\n`catalogue_id`) are skipped and reported in the `skipped` list.",
        "operationId": "import_principles_api_v1_principles_catalogue_import_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportPrinciplesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Import Principles",
        "tags": [
          "principles-catalogue"
        ]
      }
    },
    "/api/v1/process-catalogue": {
      "get": {
        "description": "Return the full active process catalogue with `existing_card_id`\nannotations.",
        "operationId": "get_catalogue_api_v1_process_catalogue_get",
        "parameters": [
          {
            "in": "query",
            "name": "locale",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Locale"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Catalogue",
        "tags": [
          "process-catalogue"
        ]
      }
    },
    "/api/v1/process-catalogue/import": {
      "post": {
        "description": "Create BusinessProcess cards for the selected catalogue entries.\n\nIdempotent and hierarchy-preserving. Auto-creates `relProcessToBC`\nrelations to any matching BusinessCapability cards (skipped silently\nif the target capability hasn't been imported yet).",
        "operationId": "import_processes_api_v1_process_catalogue_import_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Import Processes",
        "tags": [
          "process-catalogue"
        ]
      }
    },
    "/api/v1/process-catalogue/update-fetch": {
      "post": {
        "description": "Download the latest wheel from PyPI. Hydrates all three caches.",
        "operationId": "update_fetch_api_v1_process_catalogue_update_fetch_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Update Fetch",
        "tags": [
          "process-catalogue"
        ]
      }
    },
    "/api/v1/process-catalogue/update-status": {
      "get": {
        "description": "Compare the bundled/cached process catalogue against PyPI.",
        "operationId": "update_status_api_v1_process_catalogue_update_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Update Status",
        "tags": [
          "process-catalogue"
        ]
      }
    },
    "/api/v1/relations": {
      "get": {
        "operationId": "list_relations_api_v1_relations_get",
        "parameters": [
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type"
            }
          },
          {
            "description": "Card-type key. Keeps relations whose source **or** target card is of this type \u2014 what the inventory grid needs to populate the relation columns of the selected type in one round trip.",
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Card-type key. Keeps relations whose source **or** target card is of this type \u2014 what the inventory grid needs to populate the relation columns of the selected type in one round trip.",
              "title": "Card Type"
            }
          },
          {
            "description": "Comma-separated relation-type keys. Superset of `type`, which stays for backwards compatibility.",
            "in": "query",
            "name": "types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Comma-separated relation-type keys. Superset of `type`, which stays for backwards compatibility.",
              "title": "Types"
            }
          },
          {
            "description": "Comma-separated card UUIDs. Keeps relations whose source **or** target is one of them. At most 500 ids per request \u2014 chunk larger sets client-side.",
            "in": "query",
            "name": "card_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Comma-separated card UUIDs. Keeps relations whose source **or** target is one of them. At most 500 ids per request \u2014 chunk larger sets client-side.",
              "title": "Card Ids"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/RelationResponse"
                  },
                  "title": "Response List Relations Api V1 Relations Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Relations",
        "tags": [
          "relations"
        ]
      },
      "post": {
        "operationId": "create_relation_api_v1_relations_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelationCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Relation",
        "tags": [
          "relations"
        ]
      }
    },
    "/api/v1/relations/bulk": {
      "post": {
        "description": "Batched upsert/delete for relations. Used by the spreadsheet importer\nto apply both inline `rel:<key>` columns and the explicit `Relations`\nsheet in one round-trip.\n\nEach operation independently succeeds or fails; failed rows do not\nroll back successful ones unless every row fails. Source and target\nmay be referenced by UUID (when the importer has just created the card)\nor by `(type, parent_path, name)` for human-readable round-trips.\n\nPermission: `relations.manage`.",
        "operationId": "bulk_relations_api_v1_relations_bulk_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelationBulkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelationBulkResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Relations",
        "tags": [
          "relations"
        ]
      }
    },
    "/api/v1/relations/{rel_id}": {
      "delete": {
        "operationId": "delete_relation_api_v1_relations__rel_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "rel_id",
            "required": true,
            "schema": {
              "title": "Rel Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Relation",
        "tags": [
          "relations"
        ]
      },
      "patch": {
        "operationId": "update_relation_api_v1_relations__rel_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "rel_id",
            "required": true,
            "schema": {
              "title": "Rel Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RelationUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RelationResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Relation",
        "tags": [
          "relations"
        ]
      }
    },
    "/api/v1/reports/admin-dashboard": {
      "get": {
        "description": "System-wide governance and adoption metrics for the Dashboard \u2192 Admin tab.\n\nGated on `admin.users` so it lines up with the existing admin nav. Avoids\nduplicating the Data Quality report \u2014 focuses on stakeholder coverage,\nuser adoption, todo backlog, and approval pipeline health.",
        "operationId": "admin_dashboard_summary_api_v1_reports_admin_dashboard_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Admin Dashboard Summary",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/app-portfolio": {
      "get": {
        "description": "Portfolio report: all cards of the requested type with their relations\nfor flexible client-side grouping by any attribute or related card type.\n\nDefaults to ``type=Application`` so the original Application Portfolio\nreport keeps working without changes. The Flexible Portfolio report passes\nother card type keys (BusinessCapability, Initiative, ITComponent, ...).",
        "operationId": "app_portfolio_api_v1_reports_app_portfolio_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "default": "Application",
              "title": "Type",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "App Portfolio",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/capability-heatmap": {
      "get": {
        "description": "Capability tree colored by a chosen metric.",
        "operationId": "capability_heatmap_api_v1_reports_bpm_capability_heatmap_get",
        "parameters": [
          {
            "description": "Metric: process_count, maturity, strategicImportance",
            "in": "query",
            "name": "metric",
            "required": false,
            "schema": {
              "default": "process_count",
              "description": "Metric: process_count, maturity, strategicImportance",
              "title": "Metric",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Capability Heatmap",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/capability-process-matrix": {
      "get": {
        "description": "Capability \u00d7 Process cross-reference grid.",
        "operationId": "capability_process_matrix_api_v1_reports_bpm_capability_process_matrix_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Capability Process Matrix",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/dashboard": {
      "get": {
        "description": "BPM KPIs: counts, maturity distribution, automation levels, risk.",
        "operationId": "bpm_dashboard_api_v1_reports_bpm_dashboard_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Bpm Dashboard",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/element-application-map": {
      "get": {
        "description": "Which BPMN elements use which applications \u2014 grouped by application.",
        "operationId": "element_application_map_api_v1_reports_bpm_element_application_map_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Element Application Map",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/process-application-matrix": {
      "get": {
        "description": "Process \u00d7 Application cross-reference grid (process-level + element-level links).",
        "operationId": "process_application_matrix_api_v1_reports_bpm_process_application_matrix_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Process Application Matrix",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/process-dependencies": {
      "get": {
        "description": "Dependency graph data: nodes + edges for force-directed visualization.",
        "operationId": "process_dependencies_api_v1_reports_bpm_process_dependencies_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Process Dependencies",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/process-map": {
      "get": {
        "description": "Process landscape map: hierarchy + related apps, data objects, orgs, contexts.\n\nThe landscape itself is assembled by ``process_map_service`` so this route and\nthe account-less Process Navigator portal are built from one implementation and\ncannot drift. The response shape below stays this route's own \u2014 the service\nreturns the data, the route decides what an authenticated caller sees.",
        "operationId": "process_map_api_v1_reports_bpm_process_map_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Process Map",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/process-organization-matrix": {
      "get": {
        "description": "Process \u00d7 Organization execution grid, built from the informative\nstep \u2194 Organization links (never from card relations).\n\nOne cell per (process, organization) pair with the executed steps\nembedded, so the frontend can render both the matrix and the per-process\ndrill-down from a single call.",
        "operationId": "process_organization_matrix_api_v1_reports_bpm_process_organization_matrix_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Process Organization Matrix",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/bpm/value-stream-matrix": {
      "get": {
        "description": "Value-stream \u00d7 Organization matrix with processes at intersections.\n\nOnly shows BusinessContext items with subtype 'valueStream' as columns.\nIncludes related apps and parent_id for nested process display.",
        "operationId": "value_stream_matrix_api_v1_reports_bpm_value_stream_matrix_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Value Stream Matrix",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/capability-heatmap": {
      "get": {
        "description": "Business capability heatmap data with hierarchy.",
        "operationId": "capability_heatmap_api_v1_reports_capability_heatmap_get",
        "parameters": [
          {
            "in": "query",
            "name": "metric",
            "required": false,
            "schema": {
              "default": "app_count",
              "title": "Metric",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Capability Heatmap",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/cost": {
      "get": {
        "description": "Cost aggregation report for the current fiscal year.\n\nOnly cards live in the current fiscal year count, by the same rule as\n``GET /reports/cost-treemap``.",
        "operationId": "cost_report_api_v1_reports_cost_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "default": "Application",
              "title": "Type",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Cost Report",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/cost-treemap": {
      "get": {
        "description": "Cost treemap: items with cost, optionally grouped by a related type.\n\nCosts are annual and shown for the current fiscal year only: a card counts,\nat its full annual cost, when the current fiscal year falls between the one\nit goes ``active`` in and the one its ``endOfLife`` falls in, both included \u2014\nno pro-rating, so a card retired in an earlier fiscal year is left out. A\ncard carries one annual figure, so projecting it onto other years would\nonly restate today's number; that is why there is no year parameter. The\nrule applies to the primary cards and, in ``aggregate`` mode, to the related\ncards being summed, so a retired IT Component stops adding to its\nApplication's total. The response names the fiscal year (``fiscal_year``)\nand the workspace's start month (``fiscal_year_start``).\n\nWhen ``aggregate`` is non-empty, each entry is a ``\"<typeKey>:<costFieldKey>\"``\npair identifying a cost field on a related card type. The endpoint sums that\nfield across each primary card's related cards (relations resolved\nbidirectionally, parallel relations de-duped) and adds the per-pair totals.\nBecause every pair targets a different card type **or** a different cost field\non the same type, no related card contributes more than once to a given\nprimary card's roll-up. This lets a type that has no cost field of its own\n(e.g. Provider) display costs sourced from related Applications, IT\nComponents, etc., even all of them at once.\n\nWhen ``parent_card_id`` is set, the primary card set is restricted to cards\nthat have at least one relation (in either direction) to that parent. This\npowers the treemap drill-down \u2014 clicking a parent rectangle re-queries with\nthe related type as ``type`` and the parent's id as ``parent_card_id``.",
        "operationId": "cost_treemap_api_v1_reports_cost_treemap_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "default": "Application",
              "title": "Type",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "cost_field",
            "required": false,
            "schema": {
              "default": "costTotalAnnual",
              "title": "Cost Field",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "group_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Group By"
            }
          },
          {
            "in": "query",
            "name": "aggregate",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Aggregate"
            }
          },
          {
            "in": "query",
            "name": "parent_card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Parent Card Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Cost Treemap",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/dashboard": {
      "get": {
        "operationId": "dashboard_api_v1_reports_dashboard_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Dashboard",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/data-quality": {
      "get": {
        "description": "Data quality & completeness dashboard.\n\nCounts only the cards the reader may see. ``orphaned`` stays the system\ntruth \u2014 \"no relation at all\", counting relations to hidden cards \u2014 so the\ntile keeps agreeing with ``orphaned_condition()`` behind its drill-down.",
        "operationId": "data_quality_api_v1_reports_data_quality_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Data Quality",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/data-quality/cards": {
      "get": {
        "description": "The cards behind one slice of the data-quality dashboard.\n\nBacks the side panel opened by clicking a bar segment / KPI tile: same\npopulation as `/reports/data-quality` (ACTIVE cards only), narrowed to one\ntype, quality band and/or flag. `total` is the untruncated count so the\npanel can say \"showing N of M\".",
        "operationId": "data_quality_cards_api_v1_reports_data_quality_cards_get",
        "parameters": [
          {
            "description": "Card type key",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Card type key",
              "title": "Type"
            }
          },
          {
            "description": "complete | partial | minimal",
            "in": "query",
            "name": "band",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "complete | partial | minimal",
              "title": "Band"
            }
          },
          {
            "description": "orphaned | stale | eol_linked | eol_manual | eol_missing. The three `eol_*` scopes are the EOL coverage chart's segments and pair with `type`.",
            "in": "query",
            "name": "scope",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "orphaned | stale | eol_linked | eol_manual | eol_missing. The three `eol_*` scopes are the EOL coverage chart's segments and pair with `type`.",
              "title": "Scope"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 200,
              "maximum": 500,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Data Quality Cards",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/dependencies": {
      "get": {
        "description": "Dependency / interface map: nodes + edges for graph rendering.",
        "operationId": "dependencies_api_v1_reports_dependencies_get",
        "parameters": [
          {
            "in": "query",
            "name": "center_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Center Id"
            }
          },
          {
            "in": "query",
            "name": "depth",
            "required": false,
            "schema": {
              "default": 2,
              "maximum": 3,
              "minimum": 1,
              "title": "Depth",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Dependencies",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/eol": {
      "get": {
        "description": "End-of-Life risk & impact report.\n\nReturns all Applications and IT Components with linked EOL data\n(from endoflife.date API) *or* manually maintained lifecycle dates,\nenriched with live cycle information and impact mapping\n(IT Component \u2192 related Applications).\n\nEach item includes a ``source`` field: ``\"api\"`` for items linked\nto endoflife.date, ``\"manual\"`` for items with only a hand-entered\n``endOfLife`` lifecycle date, and ``\"none\"`` for cards carrying neither.\n\nThose last ones (``status: \"missing\"``) are the answer to \"which of my\nhundreds of IT Components has nobody recorded an end of life for?\"\n([#1065](https://github.com/vincentmakes/turbo-ea/discussions/1065)). The\nreport used to drop them silently, which made the one question the report\nis best placed to answer the one it could not.",
        "operationId": "eol_report_api_v1_reports_eol_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Eol Report",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/landscape": {
      "get": {
        "description": "Landscape report: cards grouped by a related type.",
        "operationId": "landscape_api_v1_reports_landscape_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "default": "Application",
              "title": "Type",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "group_by",
            "required": false,
            "schema": {
              "default": "BusinessCapability",
              "title": "Group By",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Landscape",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/matrix": {
      "get": {
        "description": "Matrix report: cross-reference grid between two card types.\n\nEach intersection carries the relations behind it \u2014 their relation type,\ntheir orientation relative to the row axis, and their attribute values \u2014 so\nthe grid can show what the link *means*, not merely that one exists.\n\n``direction`` is structural: ``forward`` keeps relations whose source is the\nrow card, ``reverse`` those whose target is. Semantic notions of direction\nthat a metamodel may express as a relation attribute are just attribute\nvalues, filtered through ``attr`` like any other.\n\nOnly the *edges* are filtered server-side; the row and column card lists are\nalways complete. Pruning cards here would break their ``parent_id`` chains\nand silently flatten the hierarchy the client rebuilds \u2014 the client already\nhides cards with no surviving edge, and can do so without a refetch.",
        "operationId": "matrix_api_v1_reports_matrix_get",
        "parameters": [
          {
            "in": "query",
            "name": "row_type",
            "required": false,
            "schema": {
              "default": "Application",
              "title": "Row Type",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "col_type",
            "required": false,
            "schema": {
              "default": "BusinessCapability",
              "title": "Col Type",
              "type": "string"
            }
          },
          {
            "description": "Comma-separated relation-type keys to restrict the grid to",
            "in": "query",
            "name": "relation_types",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Comma-separated relation-type keys to restrict the grid to",
              "title": "Relation Types"
            }
          },
          {
            "description": "Attribute filter, `relationTypeKey.fieldKey:value`. Repeatable.",
            "in": "query",
            "name": "attr",
            "required": false,
            "schema": {
              "description": "Attribute filter, `relationTypeKey.fieldKey:value`. Repeatable.",
              "items": {
                "type": "string"
              },
              "title": "Attr",
              "type": "array"
            }
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "default": "any",
              "pattern": "^(any|forward|reverse)$",
              "title": "Direction",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Matrix",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/my-workspace": {
      "get": {
        "description": "Per-user counters for the Dashboard \u2192 My Workspace tab.\n\nAll counters are inherently scoped to the calling user \u2014 no permission\nkey beyond authentication is required.",
        "operationId": "my_workspace_summary_api_v1_reports_my_workspace_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "My Workspace Summary",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/portfolio": {
      "get": {
        "description": "Portfolio scatter/bubble chart data.",
        "operationId": "portfolio_api_v1_reports_portfolio_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "default": "Application",
              "title": "Type",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "x_axis",
            "required": false,
            "schema": {
              "default": "functionalFit",
              "title": "X Axis",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "y_axis",
            "required": false,
            "schema": {
              "default": "technicalFit",
              "title": "Y Axis",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "size_field",
            "required": false,
            "schema": {
              "default": "costTotalAnnual",
              "title": "Size Field",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "color_field",
            "required": false,
            "schema": {
              "default": "businessCriticality",
              "title": "Color Field",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Portfolio",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/ppm/dashboard": {
      "get": {
        "operationId": "ppm_dashboard_api_v1_reports_ppm_dashboard_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ppm Dashboard",
        "tags": [
          "ppm-reports"
        ]
      }
    },
    "/api/v1/reports/ppm/gantt": {
      "get": {
        "operationId": "ppm_gantt_api_v1_reports_ppm_gantt_get",
        "parameters": [
          {
            "description": "Card type key to group by",
            "in": "query",
            "name": "group_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Card type key to group by",
              "title": "Group By"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmGanttItem"
                  },
                  "title": "Response Ppm Gantt Api V1 Reports Ppm Gantt Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Ppm Gantt",
        "tags": [
          "ppm-reports"
        ]
      }
    },
    "/api/v1/reports/ppm/group-options": {
      "get": {
        "description": "Return card types that Initiative has relation types to (for grouping dropdown).",
        "operationId": "ppm_group_options_api_v1_reports_ppm_group_options_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/PpmGroupOption"
                  },
                  "title": "Response Ppm Group Options Api V1 Reports Ppm Group Options Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ppm Group Options",
        "tags": [
          "ppm-reports"
        ]
      }
    },
    "/api/v1/reports/roadmap": {
      "get": {
        "description": "Roadmap: lifecycle timeline data.",
        "operationId": "roadmap_api_v1_reports_roadmap_get",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Type"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Roadmap",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/reports/stakeholder-directory": {
      "get": {
        "description": "Org-wide stakeholder directory keyed by card type \u2192 role \u2192 users.\n\nPowers the **Stakeholder directory** widget on the Admin tab. Returns\nthe whole (card type \u2192 role \u2192 user \u2192 cards) tree in one round-trip,\nincluding each user's cards so the widget can expand a chip and show\nthe cards inline without an extra fetch.",
        "operationId": "stakeholder_directory_api_v1_reports_stakeholder_directory_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Stakeholder Directory",
        "tags": [
          "reports"
        ]
      }
    },
    "/api/v1/resources": {
      "get": {
        "description": "Every file attachment and document link in the repository, paginated.\n\nReturns the ``{items, total, page, page_size}`` envelope used by the\nother paginated read endpoints. Binary payloads are never included \u2014\nfetch a file from ``GET /file-attachments/{id}/download``.",
        "operationId": "list_resources_api_v1_resources_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "description": "Repeatable: \"file\" and/or \"link\"",
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Repeatable: \"file\" and/or \"link\"",
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "description": "Repeatable card-type keys",
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Repeatable card-type keys",
              "title": "Card Type"
            }
          },
          {
            "description": "Repeatable file-category / link-type keys",
            "in": "query",
            "name": "category",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Repeatable file-category / link-type keys",
              "title": "Category"
            }
          },
          {
            "description": "Repeatable, files only",
            "in": "query",
            "name": "mime_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Repeatable, files only",
              "title": "Mime Type"
            }
          },
          {
            "in": "query",
            "name": "created_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created By"
            }
          },
          {
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          },
          {
            "in": "query",
            "name": "archived",
            "required": false,
            "schema": {
              "default": "any",
              "pattern": "^(any|active|archived)$",
              "title": "Archived",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sort_by",
            "required": false,
            "schema": {
              "default": "created_at",
              "title": "Sort By",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sort_dir",
            "required": false,
            "schema": {
              "default": "desc",
              "pattern": "^(asc|desc)$",
              "title": "Sort Dir",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Resources",
        "tags": [
          "resources"
        ]
      }
    },
    "/api/v1/resources/bulk-delete": {
      "post": {
        "description": "Delete a mixed selection of file attachments and document links.\n\nEach row is checked with the *same* gate the single-row DELETE\nendpoints use (``documents.manage`` or the card-level\n``card.manage_documents``), so this endpoint can never do what the\ncaller could not already do one row at a time. Rows the caller may\nnot touch are reported in ``skipped`` rather than failing the whole\nrequest \u2014 the contract ``POST /users/bulk-delete`` already uses.",
        "operationId": "bulk_delete_resources_api_v1_resources_bulk_delete_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceBulkDelete"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceBulkDeleteResult"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Delete Resources",
        "tags": [
          "resources"
        ]
      }
    },
    "/api/v1/resources/stats": {
      "get": {
        "description": "Storage and usage rollup over the *same* filter set as the list, so\nthe KPI tiles always describe what the admin is looking at (the\npattern ``GET /risks/metrics`` uses for the Risk Register).",
        "operationId": "resource_stats_api_v1_resources_stats_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "kind",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Kind"
            }
          },
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Type"
            }
          },
          {
            "in": "query",
            "name": "category",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Category"
            }
          },
          {
            "in": "query",
            "name": "mime_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Mime Type"
            }
          },
          {
            "in": "query",
            "name": "created_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created By"
            }
          },
          {
            "in": "query",
            "name": "since",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Since"
            }
          },
          {
            "in": "query",
            "name": "until",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Until"
            }
          },
          {
            "in": "query",
            "name": "archived",
            "required": false,
            "schema": {
              "default": "any",
              "pattern": "^(any|active|archived)$",
              "title": "Archived",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceStats"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Resource Stats",
        "tags": [
          "resources"
        ]
      }
    },
    "/api/v1/risks": {
      "get": {
        "description": "Paginated, filterable risk list. ``status`` / ``category`` /\n``level`` / ``source_type`` / ``card_id`` / ``card_type`` are repeatable\nquery params (e.g. ``?status=identified&status=analysed``). Repeated\nvalues OR within a dimension and AND across dimensions, so\n``?card_id=a&card_id=b&card_type=Application`` reads as \"risks affecting\ncard a or b, that also touch at least one Application\".",
        "operationId": "list_risks_api_v1_risks_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "category",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Category"
            }
          },
          {
            "in": "query",
            "name": "level",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Level"
            }
          },
          {
            "in": "query",
            "name": "owner_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Owner Id"
            }
          },
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Type"
            }
          },
          {
            "in": "query",
            "name": "source_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Type"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "overdue",
            "required": false,
            "schema": {
              "default": false,
              "title": "Overdue",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 1000,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sort_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sort By"
            }
          },
          {
            "in": "query",
            "name": "sort_dir",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sort Dir"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskListPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Risks",
        "tags": [
          "Risks"
        ]
      },
      "post": {
        "operationId": "create_risk_api_v1_risks_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Risk",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/bulk-import": {
      "post": {
        "description": "Spreadsheet importer for the Risk Register \u2014 create-only.\n\nEach row carries its own ``row_index`` so the caller can pair the\nresponse back to its spreadsheet row. A row whose ``reference`` matches\nan existing risk is **skipped** \u2014 the importer never updates existing\nrisks, so re-importing a previously exported register is idempotent.\nEvery other row creates a brand-new risk with a freshly generated\n``R-NNNNNN`` reference. Owner is resolved best-effort by email\n(preferred) or exact display name; cards are linked best-effort by exact\nname. Unresolved / ambiguous values produce a non-blocking warning and\nare skipped \u2014 the risk still imports.\n\n``dry_run=True`` runs every validator and resolver, then rolls back so\nthe UI can preview the outcome without persisting anything (and without\nemitting owner Todos, notifications, or card-timeline events).\nPermission: ``risks.manage``.",
        "operationId": "bulk_import_risks_api_v1_risks_bulk_import_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskImportResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Import Risks",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/metrics": {
      "get": {
        "description": "KPI payload. Accepts the same filters as ``GET /risks`` so the\nmatrix + tiles follow the user's selected view.",
        "operationId": "risk_metrics_api_v1_risks_metrics_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "category",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Category"
            }
          },
          {
            "in": "query",
            "name": "level",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Level"
            }
          },
          {
            "in": "query",
            "name": "owner_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Owner Id"
            }
          },
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Type"
            }
          },
          {
            "in": "query",
            "name": "source_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Type"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "overdue",
            "required": false,
            "schema": {
              "default": false,
              "title": "Overdue",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskMetricsOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Risk Metrics",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/mitigation-tasks/export": {
      "get": {
        "description": "Flat list of every mitigation task on every risk matching the filters.\n\nMirrors the filter shape of ``GET /risks`` so the workbook export on\nthe Risk Register page can call once and produce a second sheet that\nalways matches what the user has on screen. Each task includes its\nfull occurrence history so the frontend can flatten cycles into\nspreadsheet rows.",
        "operationId": "export_mitigation_tasks_api_v1_risks_mitigation_tasks_export_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "category",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Category"
            }
          },
          {
            "in": "query",
            "name": "level",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Level"
            }
          },
          {
            "in": "query",
            "name": "owner_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Owner Id"
            }
          },
          {
            "in": "query",
            "name": "card_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Id"
            }
          },
          {
            "in": "query",
            "name": "card_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Card Type"
            }
          },
          {
            "in": "query",
            "name": "source_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Source Type"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "overdue",
            "required": false,
            "schema": {
              "default": false,
              "title": "Overdue",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MitigationTaskOut"
                  },
                  "title": "Response Export Mitigation Tasks Api V1 Risks Mitigation Tasks Export Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Export Mitigation Tasks",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/promote/compliance/{finding_id}": {
      "post": {
        "operationId": "promote_compliance_api_v1_risks_promote_compliance__finding_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "finding_id",
            "required": true,
            "schema": {
              "title": "Finding Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/RiskPromoteRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Promote Compliance",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/{risk_id}": {
      "delete": {
        "operationId": "delete_risk_api_v1_risks__risk_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "type": "boolean"
                  },
                  "title": "Response Delete Risk Api V1 Risks  Risk Id  Delete",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Risk",
        "tags": [
          "Risks"
        ]
      },
      "get": {
        "operationId": "get_risk_api_v1_risks__risk_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Risk",
        "tags": [
          "Risks"
        ]
      },
      "patch": {
        "operationId": "update_risk_api_v1_risks__risk_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Risk",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/{risk_id}/cards": {
      "post": {
        "operationId": "link_risk_cards_api_v1_risks__risk_id__cards_post",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskCardLinkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Link Risk Cards",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/{risk_id}/cards/{card_id}": {
      "delete": {
        "operationId": "unlink_risk_card_api_v1_risks__risk_id__cards__card_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Unlink Risk Card",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/risks/{risk_id}/mitigation-tasks": {
      "get": {
        "operationId": "list_mitigation_tasks_api_v1_risks__risk_id__mitigation_tasks_get",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MitigationTaskOut"
                  },
                  "title": "Response List Mitigation Tasks Api V1 Risks  Risk Id  Mitigation Tasks Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Mitigation Tasks",
        "tags": [
          "Risks"
        ]
      },
      "post": {
        "operationId": "create_mitigation_task_api_v1_risks__risk_id__mitigation_tasks_post",
        "parameters": [
          {
            "in": "path",
            "name": "risk_id",
            "required": true,
            "schema": {
              "title": "Risk Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MitigationTaskCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MitigationTaskOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Mitigation Task",
        "tags": [
          "Risks"
        ]
      }
    },
    "/api/v1/roles": {
      "get": {
        "description": "List all roles.\n\nAny authenticated user can resolve role labels/colors (for role chips), but\nonly `admin.roles` holders get the permission matrix and per-role user\ncounts \u2014 those stay admin-only.",
        "operationId": "list_roles_api_v1_roles_get",
        "parameters": [
          {
            "in": "query",
            "name": "include_archived",
            "required": false,
            "schema": {
              "default": false,
              "title": "Include Archived",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Roles",
        "tags": [
          "roles"
        ]
      },
      "post": {
        "operationId": "create_role_api_v1_roles_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Role",
        "tags": [
          "roles"
        ]
      }
    },
    "/api/v1/roles/permissions-schema": {
      "get": {
        "description": "Return the full permission key catalog with labels/descriptions.",
        "operationId": "permissions_schema_api_v1_roles_permissions_schema_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Permissions Schema",
        "tags": [
          "roles"
        ]
      }
    },
    "/api/v1/roles/{key}": {
      "get": {
        "operationId": "get_role_api_v1_roles__key__get",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Role",
        "tags": [
          "roles"
        ]
      },
      "patch": {
        "operationId": "update_role_api_v1_roles__key__patch",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RoleUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Role",
        "tags": [
          "roles"
        ]
      }
    },
    "/api/v1/roles/{key}/archive": {
      "post": {
        "operationId": "archive_role_api_v1_roles__key__archive_post",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Archive Role",
        "tags": [
          "roles"
        ]
      }
    },
    "/api/v1/roles/{key}/restore": {
      "post": {
        "operationId": "restore_role_api_v1_roles__key__restore_post",
        "parameters": [
          {
            "in": "path",
            "name": "key",
            "required": true,
            "schema": {
              "title": "Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Restore Role",
        "tags": [
          "roles"
        ]
      }
    },
    "/api/v1/saved-reports": {
      "get": {
        "description": "List saved reports visible to the current user.",
        "operationId": "list_saved_reports_api_v1_saved_reports_get",
        "parameters": [
          {
            "in": "query",
            "name": "filter",
            "required": false,
            "schema": {
              "default": "all",
              "pattern": "^(all|my|shared|public)$",
              "title": "Filter",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Saved Reports",
        "tags": [
          "saved-reports"
        ]
      },
      "post": {
        "operationId": "create_saved_report_api_v1_saved_reports_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SavedReportCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Saved Report",
        "tags": [
          "saved-reports"
        ]
      }
    },
    "/api/v1/saved-reports/{report_id}": {
      "delete": {
        "operationId": "delete_saved_report_api_v1_saved_reports__report_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Saved Report",
        "tags": [
          "saved-reports"
        ]
      },
      "get": {
        "operationId": "get_saved_report_api_v1_saved_reports__report_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Saved Report",
        "tags": [
          "saved-reports"
        ]
      },
      "patch": {
        "operationId": "update_saved_report_api_v1_saved_reports__report_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "report_id",
            "required": true,
            "schema": {
              "title": "Report Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SavedReportUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Saved Report",
        "tags": [
          "saved-reports"
        ]
      }
    },
    "/api/v1/servicenow/cards/{card_id}/links": {
      "get": {
        "description": "Return deep links to the ServiceNow record(s) a card is synced with.\n\nDerived read-only from the sync identity map \u2014 a card may map to more than\none ServiceNow record if it is covered by several mappings. The URL is the\ndirect record form on the connection's instance.",
        "operationId": "list_card_servicenow_links_api_v1_servicenow_cards__card_id__links_get",
        "parameters": [
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SnowLinkOut"
                  },
                  "title": "Response List Card Servicenow Links Api V1 Servicenow Cards  Card Id  Links Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Card Servicenow Links",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/connections": {
      "get": {
        "operationId": "list_connections_api_v1_servicenow_connections_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ConnectionOut"
                  },
                  "title": "Response List Connections Api V1 Servicenow Connections Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Connections",
        "tags": [
          "ServiceNow"
        ]
      },
      "post": {
        "operationId": "create_connection_api_v1_servicenow_connections_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectionCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Connection",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/connections/{conn_id}": {
      "delete": {
        "operationId": "delete_connection_api_v1_servicenow_connections__conn_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "conn_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Conn Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Connection",
        "tags": [
          "ServiceNow"
        ]
      },
      "get": {
        "operationId": "get_connection_api_v1_servicenow_connections__conn_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "conn_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Conn Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Connection",
        "tags": [
          "ServiceNow"
        ]
      },
      "patch": {
        "operationId": "update_connection_api_v1_servicenow_connections__conn_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "conn_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Conn Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConnectionUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Connection",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/connections/{conn_id}/tables": {
      "get": {
        "operationId": "list_tables_api_v1_servicenow_connections__conn_id__tables_get",
        "parameters": [
          {
            "in": "path",
            "name": "conn_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Conn Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "default": "",
              "maxLength": 100,
              "title": "Search",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Tables",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/connections/{conn_id}/tables/{table}/fields": {
      "get": {
        "operationId": "list_table_fields_api_v1_servicenow_connections__conn_id__tables__table__fields_get",
        "parameters": [
          {
            "in": "path",
            "name": "conn_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Conn Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "table",
            "required": true,
            "schema": {
              "title": "Table",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Table Fields",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/connections/{conn_id}/test": {
      "post": {
        "operationId": "test_connection_api_v1_servicenow_connections__conn_id__test_post",
        "parameters": [
          {
            "in": "path",
            "name": "conn_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Conn Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Test Connection",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/mappings": {
      "get": {
        "operationId": "list_mappings_api_v1_servicenow_mappings_get",
        "parameters": [
          {
            "in": "query",
            "name": "connection_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Connection Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/MappingOut"
                  },
                  "title": "Response List Mappings Api V1 Servicenow Mappings Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Mappings",
        "tags": [
          "ServiceNow"
        ]
      },
      "post": {
        "operationId": "create_mapping_api_v1_servicenow_mappings_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappingCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Mapping",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/mappings/{mapping_id}": {
      "delete": {
        "operationId": "delete_mapping_api_v1_servicenow_mappings__mapping_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "mapping_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Mapping Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Mapping",
        "tags": [
          "ServiceNow"
        ]
      },
      "get": {
        "operationId": "get_mapping_api_v1_servicenow_mappings__mapping_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "mapping_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Mapping Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Mapping",
        "tags": [
          "ServiceNow"
        ]
      },
      "patch": {
        "operationId": "update_mapping_api_v1_servicenow_mappings__mapping_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "mapping_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Mapping Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MappingUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MappingOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Mapping",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/mappings/{mapping_id}/preview": {
      "post": {
        "description": "Dry-run: fetch a sample of records and show how they would be mapped.",
        "operationId": "preview_mapping_api_v1_servicenow_mappings__mapping_id__preview_post",
        "parameters": [
          {
            "in": "path",
            "name": "mapping_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Mapping Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Preview Mapping",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/sync/pull/{mapping_id}": {
      "post": {
        "operationId": "trigger_pull_sync_api_v1_servicenow_sync_pull__mapping_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "mapping_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Mapping Id",
              "type": "string"
            }
          },
          {
            "description": "Auto-apply staged changes",
            "in": "query",
            "name": "auto_apply",
            "required": false,
            "schema": {
              "default": true,
              "description": "Auto-apply staged changes",
              "title": "Auto Apply",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncRunOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Trigger Pull Sync",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/sync/push/{mapping_id}": {
      "post": {
        "operationId": "trigger_push_sync_api_v1_servicenow_sync_push__mapping_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "mapping_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Mapping Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncRunOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Trigger Push Sync",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/sync/runs": {
      "get": {
        "operationId": "list_sync_runs_api_v1_servicenow_sync_runs_get",
        "parameters": [
          {
            "in": "query",
            "name": "connection_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Connection Id"
            }
          },
          {
            "in": "query",
            "name": "mapping_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Mapping Id"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SyncRunOut"
                  },
                  "title": "Response List Sync Runs Api V1 Servicenow Sync Runs Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Sync Runs",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/sync/runs/{run_id}": {
      "get": {
        "operationId": "get_sync_run_api_v1_servicenow_sync_runs__run_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SyncRunOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Sync Run",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/sync/runs/{run_id}/apply": {
      "post": {
        "description": "Apply all pending staged records for a sync run.",
        "operationId": "apply_staged_records_api_v1_servicenow_sync_runs__run_id__apply_post",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Apply Staged Records",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/servicenow/sync/runs/{run_id}/staged": {
      "get": {
        "operationId": "list_staged_records_api_v1_servicenow_sync_runs__run_id__staged_get",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Run Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "action",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Action"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/app__api__v1__servicenow__StagedRecordOut"
                  },
                  "title": "Response List Staged Records Api V1 Servicenow Sync Runs  Run Id  Staged Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Staged Records",
        "tags": [
          "ServiceNow"
        ]
      }
    },
    "/api/v1/settings/ai": {
      "get": {
        "description": "Admin endpoint \u2014 get AI configuration.",
        "operationId": "get_ai_settings_api_v1_settings_ai_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Ai Settings",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 update AI configuration.",
        "operationId": "update_ai_settings_api_v1_settings_ai_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AiSettingsPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Ai Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/ai/test": {
      "post": {
        "description": "Admin endpoint \u2014 test connectivity to the AI provider.",
        "operationId": "test_ai_connection_api_v1_settings_ai_test_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Test Ai Connection",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/announce-upgrades-enabled": {
      "patch": {
        "description": "Admin endpoint \u2014 announce upgrades to all users, or keep them silent.\n\nSwitching it off does not suppress a *pending* announcement retroactively:\nthe version marker still advances on every boot, so re-enabling this later\nannounces the next upgrade rather than replaying an old one.",
        "operationId": "update_announce_upgrades_enabled_api_v1_settings_announce_upgrades_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnnounceUpgradesEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Announce Upgrades Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/app-title": {
      "get": {
        "description": "Public endpoint \u2014 returns the configured app title.\n\nPublic because the login page and browser tab title need it before the\nuser authenticates. Falls back to the default brand name when unset.",
        "operationId": "get_app_title_api_v1_settings_app_title_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get App Title",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set the app title shown in navbar, tab, and emails.",
        "operationId": "update_app_title_api_v1_settings_app_title_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppTitlePayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update App Title",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/archive-retention-days": {
      "get": {
        "description": "Public endpoint \u2014 days an archived card is kept before auto-purge.\n\n``0`` means archived cards are kept indefinitely (auto-purge disabled).",
        "operationId": "get_archive_retention_days_api_v1_settings_archive_retention_days_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Archive Retention Days",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set how long archived cards are kept before auto-purge.\n\n``0`` disables auto-purge so archived cards (and their history) are kept\nindefinitely. The hourly purge loop re-reads this value each cycle, so the\nchange takes effect without a restart.",
        "operationId": "update_archive_retention_days_api_v1_settings_archive_retention_days_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ArchiveRetentionPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Archive Retention Days",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/bootstrap": {
      "get": {
        "description": "Public endpoint \u2014 returns all small boot-time settings in one round-trip.\n\nThe frontend calls this once on app boot to prime its module-level caches\nso each individual settings hook (currency, date format, BPM/PPM/TurboLens\ntoggles, locales, etc.) doesn't have to fire its own GET. Replaces what\nused to be ~8 sequential round-trips with one query against the singleton\nAppSettings row. Per-endpoint reads remain available for selective\nrefresh after admin edits.",
        "operationId": "get_bootstrap_api_v1_settings_bootstrap_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Bootstrap",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/bpm-enabled": {
      "get": {
        "description": "Public endpoint \u2014 returns whether the BPM module is enabled.",
        "operationId": "get_bpm_enabled_api_v1_settings_bpm_enabled_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Bpm Enabled",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable the BPM module.\n\nAlso toggles is_hidden on the BusinessProcess card type and all\nrelation types that touch BusinessProcess, so that cards, relations,\nand reports are properly hidden/shown across the entire platform.",
        "operationId": "update_bpm_enabled_api_v1_settings_bpm_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BpmEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Bpm Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/bpm-row-order": {
      "get": {
        "description": "Public endpoint \u2014 returns the configured BPM process type row order.",
        "operationId": "get_bpm_row_order_api_v1_settings_bpm_row_order_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Bpm Row Order",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set BPM process type row display order.",
        "operationId": "update_bpm_row_order_api_v1_settings_bpm_row_order_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BpmRowOrderPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Bpm Row Order",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/bpm-separate-approver": {
      "get": {
        "description": "Public endpoint \u2014 whether a process flow needs a second person to approve it.\n\nOff by default so upgrading changes nothing for a team where one person both\nsubmits and approves; regulated instances turn it on deliberately.",
        "operationId": "get_bpm_separate_approver_api_v1_settings_bpm_separate_approver_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Bpm Separate Approver",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 require a separate approver for BPMN flow revisions.",
        "operationId": "update_bpm_separate_approver_api_v1_settings_bpm_separate_approver_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SeparateApproverPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Bpm Separate Approver",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/currency": {
      "get": {
        "description": "Public endpoint \u2014 returns the configured display currency.",
        "operationId": "get_currency_api_v1_settings_currency_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Currency",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set the display currency for all cost fields.",
        "operationId": "update_currency_api_v1_settings_currency_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CurrencyPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Currency",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/date-format": {
      "get": {
        "description": "Public endpoint \u2014 returns the configured date display format.",
        "operationId": "get_date_format_api_v1_settings_date_format_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Date Format",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set the display format for all dates in the UI.",
        "operationId": "update_date_format_api_v1_settings_date_format_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DateFormatPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Date Format",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/email": {
      "get": {
        "operationId": "get_email_settings_api_v1_settings_email_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Email Settings",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "operationId": "update_email_settings_api_v1_settings_email_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailSettingsPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Email Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/email/test": {
      "post": {
        "description": "Send a test email to the admin's own address using current SMTP settings.",
        "operationId": "test_email_settings_api_v1_settings_email_test_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Test Email Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/enabled-locales": {
      "get": {
        "description": "Public endpoint \u2014 returns which locales are enabled (defaults to all).",
        "operationId": "get_enabled_locales_api_v1_settings_enabled_locales_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Enabled Locales",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set which locales are available to users.",
        "operationId": "update_enabled_locales_api_v1_settings_enabled_locales_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EnabledLocalesPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Enabled Locales",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/extension-notices-enabled": {
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable the daily extension-store check.\n\nTurning it off stops the outbound request to the store entirely (the flag is\nread before the fetch), which is what an egress-restricted or air-gapped\ninstall wants. Gated on ``admin.settings`` like its two neighbours: who owns\nthe switch for outbound traffic is a separate question from who receives the\nresulting notifications (``admin.manage_extensions``).",
        "operationId": "update_extension_notices_enabled_api_v1_settings_extension_notices_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtensionNoticesEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Extension Notices Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/extension-store-check": {
      "post": {
        "description": "Run the extension-store check immediately and report what it found.\n\nWithout this, verifying the daily check means waiting up to a day and then\ninferring the result from whether a notification turned up \u2014 which cannot\ndistinguish \"nothing was new\" from \"the fetch is failing\".\n\nSame three phases as the daily loop, over this request's session rather\nthan sessions of its own: read the toggle, hand the connection back, fetch\nholding nothing, reopen for the writes. It is spelled out here rather than\ndelegated because a helper must never commit a session it was handed, and\nthe loop's entry point owns sessions this request does not have. Honours\nthe notices toggle, so a switched-off instance makes no outbound request\nhere any more than it does on the timer.",
        "operationId": "run_extension_store_check_now_api_v1_settings_extension_store_check_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Run Extension Store Check Now",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/extension-store-status": {
      "get": {
        "description": "Cached result of the last extension-store check, for the Store tab.\n\nThe daily check is otherwise completely silent \u2014 a store that refuses the\nrequest records the reason in the settings row and nowhere else, so an\nadministrator who is not being notified has no way to tell \"nothing was\nnew\" from \"the fetch has been failing for a fortnight\". Gated on\n``admin.settings`` like its ``/update-status`` neighbour, and it serves only\nwhat the daily check already stored; it never reaches out to the store.",
        "operationId": "get_extension_store_status_api_v1_settings_extension_store_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Extension Store Status",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/favicon": {
      "delete": {
        "description": "Admin endpoint \u2014 reset to the default favicon.",
        "operationId": "reset_favicon_api_v1_settings_favicon_delete",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Reset Favicon",
        "tags": [
          "settings"
        ]
      },
      "get": {
        "description": "Public endpoint \u2014 returns the current favicon.\n\nPriority: custom favicon \u2192 default favicon.",
        "operationId": "get_favicon_api_v1_settings_favicon_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Favicon",
        "tags": [
          "settings"
        ]
      },
      "post": {
        "description": "Admin endpoint \u2014 upload a custom favicon.",
        "operationId": "upload_favicon_api_v1_settings_favicon_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_favicon_api_v1_settings_favicon_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload Favicon",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/favicon/info": {
      "get": {
        "description": "Admin endpoint \u2014 returns metadata about the current favicon.",
        "operationId": "get_favicon_info_api_v1_settings_favicon_info_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Favicon Info",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/file-uploads-enabled": {
      "get": {
        "description": "Public endpoint \u2014 returns whether card file uploads are enabled.",
        "operationId": "get_file_uploads_enabled_api_v1_settings_file_uploads_enabled_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get File Uploads Enabled",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable card file uploads.",
        "operationId": "update_file_uploads_enabled_api_v1_settings_file_uploads_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadsEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update File Uploads Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/fiscal-year-start": {
      "get": {
        "description": "Public endpoint \u2014 returns the fiscal year start month (1-12).",
        "operationId": "get_fiscal_year_start_api_v1_settings_fiscal_year_start_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Fiscal Year Start",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set the fiscal year start month (1-12).",
        "operationId": "update_fiscal_year_start_api_v1_settings_fiscal_year_start_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FiscalYearStartPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Fiscal Year Start",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/grc-enabled": {
      "get": {
        "description": "Public endpoint \u2014 returns whether the GRC module is enabled.",
        "operationId": "get_grc_enabled_api_v1_settings_grc_enabled_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Grc Enabled",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable the GRC module (Governance, Risk, Compliance).",
        "operationId": "update_grc_enabled_api_v1_settings_grc_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GrcEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Grc Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/login-branding": {
      "get": {
        "description": "Admin endpoint \u2014 read the customizable login-page strings.\n\nPublic consumers (the login page itself) read these via\n``GET /settings/bootstrap`` instead, where they're returned alongside\nother public boot-time settings.",
        "operationId": "get_login_branding_api_v1_settings_login_branding_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Login Branding",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 update login-page tagline / help text / contact link.",
        "operationId": "update_login_branding_api_v1_settings_login_branding_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginBrandingPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Login Branding",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/logo": {
      "delete": {
        "description": "Admin endpoint \u2014 reset to the default logo.",
        "operationId": "reset_logo_api_v1_settings_logo_delete",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Reset Logo",
        "tags": [
          "settings"
        ]
      },
      "get": {
        "description": "Public endpoint \u2014 returns the current logo (custom or default).",
        "operationId": "get_logo_api_v1_settings_logo_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Logo",
        "tags": [
          "settings"
        ]
      },
      "post": {
        "description": "Admin endpoint \u2014 upload a custom logo.",
        "operationId": "upload_logo_api_v1_settings_logo_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_upload_logo_api_v1_settings_logo_post"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Upload Logo",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/logo/info": {
      "get": {
        "description": "Admin endpoint \u2014 returns metadata about the current logo.",
        "operationId": "get_logo_info_api_v1_settings_logo_info_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Logo Info",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/mcp": {
      "get": {
        "description": "Admin endpoint \u2014 get MCP integration configuration.",
        "operationId": "get_mcp_settings_api_v1_settings_mcp_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Mcp Settings",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable MCP integration.",
        "operationId": "update_mcp_settings_api_v1_settings_mcp_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/McpSettingsPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Mcp Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/mcp/status": {
      "get": {
        "description": "Public endpoint \u2014 returns MCP + SSO availability (no secrets exposed).\nUsed by the MCP server to check if it should operate.",
        "operationId": "get_mcp_status_api_v1_settings_mcp_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Mcp Status",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/navbar-style": {
      "get": {
        "description": "Public endpoint \u2014 returns the configured navbar colors.\n\nPublic because every authenticated user's shell needs the colors at boot\nand they are not sensitive. Falls back to the built-in navy defaults.",
        "operationId": "get_navbar_style_api_v1_settings_navbar_style_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Navbar Style",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 set the navbar background + text color for all users.",
        "operationId": "update_navbar_style_api_v1_settings_navbar_style_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NavbarStylePayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Navbar Style",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/ppm-enabled": {
      "get": {
        "description": "Public endpoint \u2014 returns whether the PPM module is enabled.",
        "operationId": "get_ppm_enabled_api_v1_settings_ppm_enabled_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Ppm Enabled",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable the PPM module.",
        "operationId": "update_ppm_enabled_api_v1_settings_ppm_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PpmEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Ppm Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/principles-display": {
      "get": {
        "description": "Public endpoint \u2014 whether the EA Principles tab is shown on EA Delivery.",
        "operationId": "get_principles_display_api_v1_settings_principles_display_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Principles Display",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 toggle EA Principles tab visibility on EA Delivery.",
        "operationId": "update_principles_display_api_v1_settings_principles_display_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "title": "Body",
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Principles Display",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/registration": {
      "get": {
        "description": "Public endpoint \u2014 returns whether self-registration is enabled.",
        "operationId": "get_registration_settings_api_v1_settings_registration_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Registration Settings",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable self-registration.",
        "operationId": "update_registration_settings_api_v1_settings_registration_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistrationPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Registration Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/release-notes": {
      "get": {
        "description": "Release notes for one specific version, as a notification announced it.\n\n``/whats-new`` answers \"what changed in the most recent upgrade?\" \u2014 right\nfor the newest notification and wrong for every older one still sitting in\nthe bell. This takes the versions off the notification itself, so a notice\nfrom six releases ago still opens its own notes.\n\nAuthenticated but **not** permission-gated, on the same reasoning as\n``/whats-new``: every user is told when the app is updated, so every user\nhas to be able to read the changelog, which is public information anyway.\nThe one privileged ingredient is narrower \u2014 the cached GitHub body for a\nrelease this instance has *not* installed is readable only by holders of\n``admin.settings``, matching ``/update-status``, since they are also the\nonly people who ever receive an update-available notification. None of that\nendpoint's operational state (``checked_at``, ``error``, ``enabled``) is\nexposed here.",
        "operationId": "get_release_notes_api_v1_settings_release_notes_get",
        "parameters": [
          {
            "in": "query",
            "name": "version",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Version"
            }
          },
          {
            "in": "query",
            "name": "from_version",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From Version"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Release Notes",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/sponsor-button-enabled": {
      "get": {
        "description": "Public endpoint \u2014 returns whether the Sponsor button is shown in the user menu.\n\nDefaults to True so existing installations keep showing it; administrators can\nhide it from the avatar menu via the admin UI. It always remains reachable from\nAdmin \u2192 Settings regardless of this flag.",
        "operationId": "get_sponsor_button_enabled_api_v1_settings_sponsor_button_enabled_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Sponsor Button Enabled",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 show or hide the Sponsor button in the user (avatar) menu.",
        "operationId": "update_sponsor_button_enabled_api_v1_settings_sponsor_button_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SponsorButtonEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Sponsor Button Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/sso": {
      "get": {
        "description": "Admin endpoint \u2014 get SSO configuration.",
        "operationId": "get_sso_settings_api_v1_settings_sso_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Sso Settings",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 update SSO configuration.",
        "operationId": "update_sso_settings_api_v1_settings_sso_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SsoSettingsPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Sso Settings",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/sso/status": {
      "get": {
        "description": "Public endpoint \u2014 returns whether SSO is enabled (no secrets exposed).",
        "operationId": "get_sso_status_api_v1_settings_sso_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Sso Status",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/turbolens-enabled": {
      "get": {
        "description": "Public endpoint \u2014 returns whether the TurboLens module is enabled.\n\nDefaults to True so existing installations keep their previous behaviour;\nadministrators can opt out via the admin UI.",
        "operationId": "get_turbolens_enabled_api_v1_settings_turbolens_enabled_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Turbolens Enabled",
        "tags": [
          "settings"
        ]
      },
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable the TurboLens module.",
        "operationId": "update_turbolens_enabled_api_v1_settings_turbolens_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Turbolens Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/update-check-enabled": {
      "patch": {
        "description": "Admin endpoint \u2014 enable or disable the daily \"newer release available\" check.\n\nTurning it off stops the outbound request to GitHub entirely (the flag is\nread before the fetch), which is what an egress-restricted or air-gapped\ninstall wants. The current value rides along on ``GET /settings/bootstrap``\nrather than getting its own endpoint \u2014 only the admin page reads it.",
        "operationId": "update_update_check_enabled_api_v1_settings_update_check_enabled_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateCheckEnabledPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Update Check Enabled",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/update-status": {
      "get": {
        "description": "Cached result of the last update check, for the release-notes dialog.\n\nGated on ``admin.settings`` \u2014 the same permission that decides who gets\nnotified in the first place, so the endpoint cannot tell a non-admin\nanything the notification would not have. Serves only what the daily check\nalready stored; it never reaches out to GitHub itself.",
        "operationId": "get_update_status_api_v1_settings_update_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Update Status",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/settings/whats-new": {
      "get": {
        "description": "Changelog for the versions this instance was last upgraded across.\n\nAuthenticated but **not** permission-gated, unlike ``/update-status``:\nevery active user is notified when the app is updated, so every one of them\nhas to be able to read what changed. A changelog is public information \u2014\nthe same text is on the project's releases page.\n\nServed from the changelog bundled in the image, so it needs no network and\nanswers identically on an air-gapped install.",
        "operationId": "get_whats_new_api_v1_settings_whats_new_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Whats New",
        "tags": [
          "settings"
        ]
      }
    },
    "/api/v1/soaw": {
      "get": {
        "operationId": "list_soaws_api_v1_soaw_get",
        "parameters": [
          {
            "in": "query",
            "name": "initiative_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Initiative Id"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Soaws",
        "tags": [
          "soaw"
        ]
      },
      "post": {
        "operationId": "create_soaw_api_v1_soaw_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SoAWCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Soaw",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}": {
      "delete": {
        "operationId": "delete_soaw_api_v1_soaw__soaw_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Soaw",
        "tags": [
          "soaw"
        ]
      },
      "get": {
        "operationId": "get_soaw_api_v1_soaw__soaw_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Soaw",
        "tags": [
          "soaw"
        ]
      },
      "patch": {
        "operationId": "update_soaw_api_v1_soaw__soaw_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SoAWUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Soaw",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}/recall-signatures": {
      "post": {
        "description": "Recall all pending signature requests. Only the creator or an admin\ncan recall. Resets status to draft and clears signatories.",
        "operationId": "recall_signatures_api_v1_soaw__soaw_id__recall_signatures_post",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Recall Signatures",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}/reject": {
      "post": {
        "description": "Reject the SoAW as a signatory. Resets to draft, increments revision\nnumber, clears all signatories, and notifies the creator.",
        "operationId": "reject_soaw_api_v1_soaw__soaw_id__reject_post",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RejectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Reject Soaw",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}/request-signatures": {
      "post": {
        "description": "Request signatures from specified users. Creates todos and notifications.",
        "operationId": "request_signatures_api_v1_soaw__soaw_id__request_signatures_post",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignatureRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Request Signatures",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}/revise": {
      "post": {
        "description": "Create a new revision of a signed SoAW. Copies the document content\ninto a new draft linked to the same initiative, with an incremented\nrevision number and parent_id pointing to the original.",
        "operationId": "revise_soaw_api_v1_soaw__soaw_id__revise_post",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Revise Soaw",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}/revisions": {
      "get": {
        "description": "List all revisions in the chain for this SoAW (traverses parent_id).",
        "operationId": "list_revisions_api_v1_soaw__soaw_id__revisions_get",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Revisions",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/soaw/{soaw_id}/sign": {
      "post": {
        "description": "Sign the SoAW as the current user. When all signatories have signed,\nthe document status changes to 'signed' and becomes readonly.",
        "operationId": "sign_soaw_api_v1_soaw__soaw_id__sign_post",
        "parameters": [
          {
            "in": "path",
            "name": "soaw_id",
            "required": true,
            "schema": {
              "title": "Soaw Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Sign Soaw",
        "tags": [
          "soaw"
        ]
      }
    },
    "/api/v1/stakeholder-roles": {
      "get": {
        "description": "Return role definitions from stakeholder_role_definitions table.",
        "operationId": "list_roles_api_v1_stakeholder_roles_get",
        "parameters": [
          {
            "description": "Filter roles by card type",
            "in": "query",
            "name": "type_key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter roles by card type",
              "title": "Type Key"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Roles",
        "tags": [
          "stakeholders"
        ]
      }
    },
    "/api/v1/stakeholder-roles/permissions-schema": {
      "get": {
        "description": "Return the full card-level permission key catalog.",
        "operationId": "card_permissions_schema_api_v1_stakeholder_roles_permissions_schema_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Card Permissions Schema",
        "tags": [
          "stakeholder-roles"
        ]
      }
    },
    "/api/v1/stakeholders/bulk": {
      "post": {
        "description": "Batched add/remove of stakeholder role assignments.\n\nUsed by the spreadsheet importer to apply `stakeholder:<role>` columns in\none round-trip instead of two calls per row. Mirrors `POST /relations/bulk`:\neach operation independently succeeds or fails, `dry_run=true` validates\neverything inside a savepoint that is rolled back.\n\nPermission: `stakeholders.manage` (or the card-level\n`card.manage_stakeholders` grant), checked per referenced card.",
        "operationId": "bulk_stakeholders_api_v1_stakeholders_bulk_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StakeholderBulkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StakeholderBulkResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Stakeholders",
        "tags": [
          "stakeholders"
        ]
      }
    },
    "/api/v1/stakeholders/{stakeholder_id}": {
      "delete": {
        "operationId": "delete_stakeholder_api_v1_stakeholders__stakeholder_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "stakeholder_id",
            "required": true,
            "schema": {
              "title": "Stakeholder Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Stakeholder",
        "tags": [
          "stakeholders"
        ]
      },
      "patch": {
        "operationId": "update_stakeholder_api_v1_stakeholders__stakeholder_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "stakeholder_id",
            "required": true,
            "schema": {
              "title": "Stakeholder Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StakeholderCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Stakeholder",
        "tags": [
          "stakeholders"
        ]
      }
    },
    "/api/v1/surveys": {
      "get": {
        "description": "List all surveys (admin only).",
        "operationId": "list_surveys_api_v1_surveys_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Surveys",
        "tags": [
          "surveys"
        ]
      },
      "post": {
        "description": "Create a new draft survey (admin only).",
        "operationId": "create_survey_api_v1_surveys_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SurveyCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Survey",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/my": {
      "get": {
        "description": "List active surveys that the current user needs to respond to.",
        "operationId": "my_surveys_api_v1_surveys_my_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "My Surveys",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}": {
      "delete": {
        "description": "Delete a draft survey (admin only).",
        "operationId": "delete_survey_api_v1_surveys__survey_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Survey",
        "tags": [
          "surveys"
        ]
      },
      "get": {
        "description": "Get a single survey with stats (admin only).",
        "operationId": "get_survey_api_v1_surveys__survey_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Survey",
        "tags": [
          "surveys"
        ]
      },
      "patch": {
        "description": "Update a draft survey (admin only).",
        "operationId": "update_survey_api_v1_surveys__survey_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SurveyUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Survey",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}/apply": {
      "post": {
        "description": "Apply selected survey responses to cards (admin only).",
        "operationId": "apply_responses_api_v1_surveys__survey_id__apply_post",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplyBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Apply Responses",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}/close": {
      "post": {
        "description": "Close an active survey (admin only).",
        "operationId": "close_survey_api_v1_surveys__survey_id__close_post",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Close Survey",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}/preview": {
      "post": {
        "description": "Preview resolved targets before sending (admin only).",
        "operationId": "preview_survey_api_v1_surveys__survey_id__preview_post",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Preview Survey",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}/respond/{card_id}": {
      "get": {
        "description": "Get the response form data for a card in a survey.",
        "operationId": "get_response_form_api_v1_surveys__survey_id__respond__card_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Response Form",
        "tags": [
          "surveys"
        ]
      },
      "post": {
        "description": "Submit a survey response for a card.",
        "operationId": "submit_response_api_v1_surveys__survey_id__respond__card_id__post",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "card_id",
            "required": true,
            "schema": {
              "title": "Card Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitResponse"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Submit Response",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}/responses": {
      "get": {
        "description": "Get all responses for a survey (admin only).",
        "operationId": "list_responses_api_v1_surveys__survey_id__responses_get",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Responses",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/surveys/{survey_id}/send": {
      "post": {
        "description": "Activate survey: resolve targets, create responses, notify.",
        "operationId": "send_survey_api_v1_surveys__survey_id__send_post",
        "parameters": [
          {
            "in": "path",
            "name": "survey_id",
            "required": true,
            "schema": {
              "title": "Survey Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Send Survey",
        "tags": [
          "surveys"
        ]
      }
    },
    "/api/v1/tag-groups": {
      "get": {
        "operationId": "list_tag_groups_api_v1_tag_groups_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Tag Groups",
        "tags": [
          "tags"
        ]
      },
      "post": {
        "operationId": "create_tag_group_api_v1_tag_groups_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagGroupCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Tag Group",
        "tags": [
          "tags"
        ]
      }
    },
    "/api/v1/tag-groups/{group_id}": {
      "delete": {
        "operationId": "delete_tag_group_api_v1_tag_groups__group_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Tag Group",
        "tags": [
          "tags"
        ]
      },
      "patch": {
        "operationId": "update_tag_group_api_v1_tag_groups__group_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagGroupUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Tag Group",
        "tags": [
          "tags"
        ]
      }
    },
    "/api/v1/tag-groups/{group_id}/tags": {
      "post": {
        "operationId": "create_tag_api_v1_tag_groups__group_id__tags_post",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Tag",
        "tags": [
          "tags"
        ]
      }
    },
    "/api/v1/tag-groups/{group_id}/tags/{tag_id}": {
      "delete": {
        "operationId": "delete_tag_api_v1_tag_groups__group_id__tags__tag_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tag_id",
            "required": true,
            "schema": {
              "title": "Tag Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Tag",
        "tags": [
          "tags"
        ]
      },
      "patch": {
        "operationId": "update_tag_api_v1_tag_groups__group_id__tags__tag_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "required": true,
            "schema": {
              "title": "Group Id",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "tag_id",
            "required": true,
            "schema": {
              "title": "Tag Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Tag",
        "tags": [
          "tags"
        ]
      }
    },
    "/api/v1/todos": {
      "get": {
        "operationId": "list_all_todos_api_v1_todos_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "assigned_to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Assigned To"
            }
          },
          {
            "in": "query",
            "name": "mine",
            "required": false,
            "schema": {
              "default": true,
              "title": "Mine",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "assigned_only",
            "required": false,
            "schema": {
              "default": false,
              "title": "Assigned Only",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "created_only",
            "required": false,
            "schema": {
              "default": false,
              "title": "Created Only",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List All Todos",
        "tags": [
          "todos"
        ]
      },
      "post": {
        "description": "Create a todo that is not attached to a card \u2014 e.g. pointing at an\nADR, a risk, or an extension page via ``link``. Same shape and rules as\ncard todos (assignment notification included), just without a card.",
        "operationId": "create_standalone_todo_api_v1_todos_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TodoCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Standalone Todo",
        "tags": [
          "todos"
        ]
      }
    },
    "/api/v1/todos/{todo_id}": {
      "delete": {
        "operationId": "delete_todo_api_v1_todos__todo_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "todo_id",
            "required": true,
            "schema": {
              "title": "Todo Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Todo",
        "tags": [
          "todos"
        ]
      },
      "patch": {
        "operationId": "update_todo_api_v1_todos__todo_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "todo_id",
            "required": true,
            "schema": {
              "title": "Todo Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TodoUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Todo",
        "tags": [
          "todos"
        ]
      }
    },
    "/api/v1/todos/{todo_id}/promote": {
      "post": {
        "description": "Manually activate a scheduled recurring todo (\"do the review early\").\n\nShort-circuits the wait for the daily promotion loop. Idempotent on\ntodos that are already open.",
        "operationId": "promote_todo_api_v1_todos__todo_id__promote_post",
        "parameters": [
          {
            "in": "path",
            "name": "todo_id",
            "required": true,
            "schema": {
              "title": "Todo Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Promote Todo",
        "tags": [
          "todos"
        ]
      }
    },
    "/api/v1/turbolens/analysis-runs": {
      "get": {
        "description": "List analysis runs.",
        "operationId": "get_analysis_runs_api_v1_turbolens_analysis_runs_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/TurboLensAnalysisRunOut"
                  },
                  "title": "Response Get Analysis Runs Api V1 Turbolens Analysis Runs Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Analysis Runs",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/analysis-runs/{run_id}": {
      "get": {
        "description": "Get a specific analysis run with results.",
        "operationId": "get_analysis_run_api_v1_turbolens_analysis_runs__run_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "title": "Run Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Analysis Run",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/capabilities": {
      "get": {
        "description": "Search BusinessCapability cards for architect capability selection.",
        "operationId": "architect_capabilities_api_v1_turbolens_architect_capabilities_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Capabilities",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/commit": {
      "post": {
        "description": "Commit an assessment: create Initiative, cards, relations, and ADR.",
        "operationId": "architect_commit_api_v1_turbolens_architect_commit_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensCommitRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Commit",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/objective-dependencies": {
      "get": {
        "description": "Fetch dependency subgraph for selected Objectives (BFS depth 3).",
        "operationId": "architect_objective_dependencies_api_v1_turbolens_architect_objective_dependencies_get",
        "parameters": [
          {
            "in": "query",
            "name": "objective_ids",
            "required": false,
            "schema": {
              "default": "",
              "title": "Objective Ids",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Objective Dependencies",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/objectives": {
      "get": {
        "description": "Search Objective cards for architect objective selection.",
        "operationId": "architect_objectives_api_v1_turbolens_architect_objectives_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Objectives",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/phase1": {
      "post": {
        "description": "Phase 1: business & functional clarification questions.",
        "operationId": "architect_phase1_api_v1_turbolens_architect_phase1_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensArchitectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Phase1",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/phase2": {
      "post": {
        "description": "Phase 2: technical & NFR deep-dive questions.",
        "operationId": "architect_phase2_api_v1_turbolens_architect_phase2_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensArchitectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Phase2",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/phase3": {
      "post": {
        "description": "Phase 4: capability mapping with selected option context.",
        "operationId": "architect_phase3_api_v1_turbolens_architect_phase3_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensArchitectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Phase3",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/phase3/deps": {
      "post": {
        "description": "Phase 3c: dependency analysis for selected products.",
        "operationId": "architect_phase3_deps_api_v1_turbolens_architect_phase3_deps_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensArchitectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Phase3 Deps",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/phase3/gaps": {
      "post": {
        "description": "Phase 3b: identify products needed for the business requirements.",
        "operationId": "architect_phase3_gaps_api_v1_turbolens_architect_phase3_gaps_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensArchitectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Phase3 Gaps",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/architect/phase3/options": {
      "post": {
        "description": "Phase 3a: generate solution options.",
        "operationId": "architect_phase3_options_api_v1_turbolens_architect_phase3_options_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensArchitectRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Architect Phase3 Options",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/assessments": {
      "get": {
        "description": "List all architecture assessments.",
        "operationId": "list_assessments_api_v1_turbolens_assessments_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Assessments",
        "tags": [
          "TurboLens"
        ]
      },
      "post": {
        "description": "Save an architecture assessment session.",
        "operationId": "save_assessment_api_v1_turbolens_assessments_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensAssessmentCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Save Assessment",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/assessments/{assessment_id}": {
      "get": {
        "description": "Get a full assessment with session data.",
        "operationId": "get_assessment_api_v1_turbolens_assessments__assessment_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "assessment_id",
            "required": true,
            "schema": {
              "title": "Assessment Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Assessment",
        "tags": [
          "TurboLens"
        ]
      },
      "patch": {
        "description": "Update a saved (non-committed) assessment.",
        "operationId": "update_assessment_api_v1_turbolens_assessments__assessment_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "assessment_id",
            "required": true,
            "schema": {
              "title": "Assessment Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensAssessmentUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Assessment",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/duplicates": {
      "get": {
        "description": "Get duplicate clusters.",
        "operationId": "get_duplicates_api_v1_turbolens_duplicates_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/DuplicateClusterOut"
                  },
                  "title": "Response Get Duplicates Api V1 Turbolens Duplicates Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Duplicates",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/duplicates/analyse": {
      "post": {
        "description": "Trigger duplicate detection (background task).",
        "operationId": "trigger_duplicate_detection_api_v1_turbolens_duplicates_analyse_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Trigger Duplicate Detection",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/duplicates/modernizations": {
      "get": {
        "description": "Get modernization assessments.",
        "operationId": "get_modernizations_api_v1_turbolens_duplicates_modernizations_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ModernizationOut"
                  },
                  "title": "Response Get Modernizations Api V1 Turbolens Duplicates Modernizations Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Modernizations",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/duplicates/modernize": {
      "post": {
        "description": "Trigger modernization assessment for a card type.",
        "operationId": "trigger_modernization_api_v1_turbolens_duplicates_modernize_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensModernizeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Trigger Modernization",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/duplicates/{cluster_id}/status": {
      "patch": {
        "description": "Update cluster status (confirm/dismiss/investigate).",
        "operationId": "update_duplicate_status_api_v1_turbolens_duplicates__cluster_id__status_patch",
        "parameters": [
          {
            "in": "path",
            "name": "cluster_id",
            "required": true,
            "schema": {
              "title": "Cluster Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TurboLensDuplicateStatusUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Duplicate Status",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/overview": {
      "get": {
        "description": "Dashboard KPIs: card counts, quality, vendor/duplicate summaries.",
        "operationId": "turbolens_overview_api_v1_turbolens_overview_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurboLensOverviewOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Turbolens Overview",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/status": {
      "get": {
        "description": "Check if TurboLens AI is configured, enabled, and ready.",
        "operationId": "turbolens_status_api_v1_turbolens_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TurboLensStatusOut"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Turbolens Status",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/vendors": {
      "get": {
        "description": "Get categorised vendors.",
        "operationId": "get_vendors_api_v1_turbolens_vendors_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/VendorAnalysisOut"
                  },
                  "title": "Response Get Vendors Api V1 Turbolens Vendors Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Vendors",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/vendors/analyse": {
      "post": {
        "description": "Trigger vendor categorisation (background task).",
        "operationId": "trigger_vendor_analysis_api_v1_turbolens_vendors_analyse_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Trigger Vendor Analysis",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/vendors/hierarchy": {
      "get": {
        "description": "Get canonical vendor hierarchy tree.",
        "operationId": "get_vendor_hierarchy_api_v1_turbolens_vendors_hierarchy_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/VendorHierarchyOut"
                  },
                  "title": "Response Get Vendor Hierarchy Api V1 Turbolens Vendors Hierarchy Get",
                  "type": "array"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Vendor Hierarchy",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/turbolens/vendors/resolve": {
      "post": {
        "description": "Trigger vendor hierarchy resolution (background task).",
        "operationId": "trigger_vendor_resolution_api_v1_turbolens_vendors_resolve_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Trigger Vendor Resolution",
        "tags": [
          "TurboLens"
        ]
      }
    },
    "/api/v1/users": {
      "get": {
        "operationId": "list_users_api_v1_users_get",
        "parameters": [
          {
            "description": "Include disabled (is_active=False) users in the result. Default False so owner / assignee / stakeholder pickers don't list disabled accounts. The Users admin page passes True.",
            "in": "query",
            "name": "include_inactive",
            "required": false,
            "schema": {
              "default": false,
              "description": "Include disabled (is_active=False) users in the result. Default False so owner / assignee / stakeholder pickers don't list disabled accounts. The Users admin page passes True.",
              "title": "Include Inactive",
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "List Users",
        "tags": [
          "users"
        ]
      },
      "post": {
        "operationId": "create_user_api_v1_users_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create User",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/bulk": {
      "patch": {
        "description": "Admin only \u2014 bulk update role and/or is_active for many users at once.\n\nOnly `role` and `is_active` are bulk-editable. Email, password, locale and\nauth_provider are per-user identity / sensitive fields and stay one-by-one.",
        "operationId": "bulk_update_users_api_v1_users_bulk_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBulkUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Update Users",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/bulk-delete": {
      "post": {
        "description": "Admin only \u2014 hard-delete many users at once.\n\nMatches the single-row constraint in the admin UI: only deactivated users\ncan be deleted. Active users in the selection are skipped and surfaced in\nthe response so the admin can deactivate them first.",
        "operationId": "bulk_delete_users_api_v1_users_bulk_delete_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserBulkDelete"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Bulk Delete Users",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/invitations": {
      "get": {
        "description": "Admin only \u2014 list pending invitations.\n\n\u00abPending\u00bb means the invited user has not yet actually used the system. The\ncriterion is `users.last_login IS NULL` \u2014 an admin who has set a password\non behalf of the user (PATCH /users/{id}) hasn't *accepted* anything, so\nthe invitation stays on the list until the user signs in for the first\ntime. This is what powers the \u00abresend invite\u00bb UX (#539).",
        "operationId": "list_invitations_api_v1_users_invitations_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Invitations",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/invitations/{invitation_id}": {
      "delete": {
        "description": "Admin only \u2014 delete/revoke a pending SSO invitation.",
        "operationId": "delete_invitation_api_v1_users_invitations__invitation_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "invitation_id",
            "required": true,
            "schema": {
              "title": "Invitation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Invitation",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/invitations/{invitation_id}/resend": {
      "post": {
        "description": "Re-send the invitation email for a row in the Pending Invitations list.\n\nLooks up the matching user by email and reuses the same email shape\nas ``POST /users/{id}/resend-invitation``. Falls back to a generic\ninvite when no user row exists yet (shouldn't normally happen, but\nkeeps the action safe for SSO-only deployments).",
        "operationId": "resend_invitation_by_invitation_api_v1_users_invitations__invitation_id__resend_post",
        "parameters": [
          {
            "in": "path",
            "name": "invitation_id",
            "required": true,
            "schema": {
              "title": "Invitation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Resend Invitation By Invitation",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/me/notification-preferences": {
      "get": {
        "description": "Stored opt-ins, plus what the dialog needs to render itself.\n\n``types`` is served rather than hardcoded in the frontend because the two\nlists had already drifted: fourteen emitted types appeared in neither, so\nthey could not be configured at all. The dialog renders one row per entry\nhere, so adding a type to ``NOTIFICATION_TYPE_SPECS`` is all it takes.",
        "operationId": "get_notification_preferences_api_v1_users_me_notification_preferences_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Notification Preferences",
        "tags": [
          "users"
        ]
      },
      "patch": {
        "operationId": "update_notification_preferences_api_v1_users_me_notification_preferences_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NotificationPreferencesUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Notification Preferences",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/me/ui-preferences": {
      "get": {
        "operationId": "get_ui_preferences_api_v1_users_me_ui_preferences_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Get Ui Preferences",
        "tags": [
          "users"
        ]
      },
      "patch": {
        "operationId": "update_ui_preferences_api_v1_users_me_ui_preferences_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UiPreferencesUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Ui Preferences",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/users/{user_id}": {
      "delete": {
        "operationId": "delete_user_api_v1_users__user_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete User",
        "tags": [
          "users"
        ]
      },
      "get": {
        "operationId": "get_user_api_v1_users__user_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get User",
        "tags": [
          "users"
        ]
      },
      "patch": {
        "operationId": "update_user_api_v1_users__user_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "title": "User Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update User",
        "tags": [
          "users"
        ]
      }
    },
    "/api/v1/value-stream-catalogue": {
      "get": {
        "description": "Return the full active value-stream catalogue, flattened to a\nparent-stream + child-stage tree so the existing browser UI can render\nit. Each node is annotated with `existing_card_id`.",
        "operationId": "get_catalogue_api_v1_value_stream_catalogue_get",
        "parameters": [
          {
            "in": "query",
            "name": "locale",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Locale"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Catalogue",
        "tags": [
          "value-stream-catalogue"
        ]
      }
    },
    "/api/v1/value-stream-catalogue/import": {
      "post": {
        "description": "Create BusinessContext / valueStream cards for selected streams or\nstages. Selecting a stage automatically pulls in its parent stream so\n`parent_id` is wired correctly. Auto-creates relBizCtxToBC and\nrelProcessToBizCtx relations to any matching capability/process cards.",
        "operationId": "import_value_streams_api_v1_value_stream_catalogue_import_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Import Value Streams",
        "tags": [
          "value-stream-catalogue"
        ]
      }
    },
    "/api/v1/value-stream-catalogue/update-fetch": {
      "post": {
        "operationId": "update_fetch_api_v1_value_stream_catalogue_update_fetch_post",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Update Fetch",
        "tags": [
          "value-stream-catalogue"
        ]
      }
    },
    "/api/v1/value-stream-catalogue/update-status": {
      "get": {
        "operationId": "update_status_api_v1_value_stream_catalogue_update_status_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Update Status",
        "tags": [
          "value-stream-catalogue"
        ]
      }
    },
    "/api/v1/web-portals": {
      "get": {
        "operationId": "list_portals_api_v1_web_portals_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "List Portals",
        "tags": [
          "web-portals"
        ]
      },
      "post": {
        "operationId": "create_portal_api_v1_web_portals_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebPortalCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Create Portal",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}": {
      "get": {
        "operationId": "get_public_portal_api_v1_web_portals_public__slug__get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Portal",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/bpm/process-map": {
      "get": {
        "description": "The read-only Process House, for a portal published with that view.\n\nShares one builder with the authenticated ``/reports/bpm/process-map`` route\nso the two houses cannot drift, then projects the result onto a separate,\nopt-in public shape (``to_public_process_map``) rather than filtering fields\nout of the internal one \u2014 a subtractive filter would publish whatever field\nsomeone adds to the internal item next.\n\nOn what is *not* published: the internal item carries every linked\nApplication with its full attributes (costs included), every linked\nDataObject, an application count and a cost rollup. None of it is here, and\nthere is no switch to turn it on \u2014 a navigator portal publishes how the\norganisation works, not which systems run it. See ``app/schemas/bpm_public.py``.",
        "operationId": "get_public_portal_process_map_api_v1_web_portals_public__slug__bpm_process_map_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BpmPublicProcessMap"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Portal Process Map",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/bpm/processes/{process_id}/flow": {
      "get": {
        "description": "The published BPMN flow and its steps for one in-scope process.\n\nOne route rather than two because the Steps tab, the flow thumbnail and the\nfullscreen preview are three renderings of the same published artefact; the\nauthenticated navigator fetches it three times over two endpoints today. One\nroute means one scope check and one rate-limit bucket.\n\n**The scope check is the security of this route.** A portal narrowed by\n``filters`` publishes a subset of processes, and process ids are handed out\nfreely by other portals' maps \u2014 so without re-running the portal's own\npredicate against the requested id, a portal scoped to one branch of the\nhouse would serve every other process's BPMN to anyone who asks.\n\nOnly a ``published`` version is ever served. A process with only drafts, only\narchived or withdrawn revisions, or only a legacy ``process_diagrams`` row\nreturns an empty flow \u2014 and its steps stay empty too, because that legacy\nsave path populates ``process_elements`` with no approval involved.",
        "operationId": "get_public_portal_process_flow_api_v1_web_portals_public__slug__bpm_processes__process_id__flow_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "process_id",
            "required": true,
            "schema": {
              "title": "Process Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BpmPublicFlow"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Portal Process Flow",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/cards": {
      "get": {
        "description": "Public endpoint: returns cards for a published portal with optional filtering.\n\nEach card carries only what the portal's page shows (``card_config.toggles``),\nand a filter or sort on anything else is ignored: a filtered ``total`` would\notherwise reveal the value the page hides.",
        "operationId": "get_public_portal_cards_api_v1_web_portals_public__slug__cards_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "subtype",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Subtype"
            }
          },
          {
            "in": "query",
            "name": "tag_ids",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Tag Ids"
            }
          },
          {
            "in": "query",
            "name": "related_type",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Related Type"
            }
          },
          {
            "in": "query",
            "name": "related_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Related Id"
            }
          },
          {
            "in": "query",
            "name": "relation_filters",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Relation Filters"
            }
          },
          {
            "in": "query",
            "name": "attr_filters",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Attr Filters"
            }
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "default": 1,
              "minimum": 1,
              "title": "Page",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "page_size",
            "required": false,
            "schema": {
              "default": 24,
              "maximum": 100,
              "minimum": 1,
              "title": "Page Size",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "sort_by",
            "required": false,
            "schema": {
              "default": "name",
              "title": "Sort By",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sort_dir",
            "required": false,
            "schema": {
              "default": "asc",
              "title": "Sort Dir",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Portal Cards",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/gate": {
      "get": {
        "description": "Always-public gate metadata: which access mode a portal uses, and \u2014 for\nSSO \u2014 the config the viewer needs to start the IdP redirect. Returns only\nname + mode + SSO-initiation fields; never description, filters, or cards.",
        "operationId": "get_portal_gate_api_v1_web_portals_public__slug__gate_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Portal Gate",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/ppm/portfolio": {
      "get": {
        "description": "The read-only PPM portfolio board, for a portal published with that view.\n\nShares one builder with the authenticated ``/reports/ppm/*`` routes so the two\nboards cannot drift, then projects the result onto a separate, opt-in public\nshape (``to_public_portfolio``) rather than filtering fields out of the\ninternal one \u2014 a subtractive filter would publish whatever field someone adds\nto ``PpmGanttItem`` next.\n\nOn what may be published: ``show_costs`` governs the capex/opex aggregates and\nthe portfolio budget total, which are sums over ``ppm_cost_lines`` /\n``ppm_budget_lines``. It does **not** reach the Initiative card's own\n``costBudget`` / ``costActual`` attributes \u2014 those are ``type: \"cost\"``\nmetamodel fields, and public portals strip cost-typed fields unconditionally\n(see ``get_public_portal``). This is not an exemption from that invariant; the\nPPM tables simply sit outside it, and the board renders the two card\nattributes nowhere.\n\nA 404 (never a 400) is returned when the portal is not a portfolio portal or\nthe module is off, so a card-portal slug never confirms that this route exists.",
        "operationId": "get_public_portal_ppm_portfolio_api_v1_web_portals_public__slug__ppm_portfolio_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          },
          {
            "description": "Card type key to group by",
            "in": "query",
            "name": "group_by",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Card type key to group by",
              "title": "Group By"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PpmPublicPortfolio"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Portal Ppm Portfolio",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/relation-options": {
      "get": {
        "description": "Return card name/id pairs for a given type, for filter dropdowns.\n\nM-7: Only returns cards that are actually related to at least one card\nvisible through the portal (matching the portal's card_type and filters),\nand only through a relation type the portal shows: the page offers this\nfilter for those alone, and any other answer would publish the names of\ncards the portal hides.",
        "operationId": "get_public_portal_relation_options_api_v1_web_portals_public__slug__relation_options_get",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type_key",
            "required": true,
            "schema": {
              "title": "Type Key",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Public Portal Relation Options",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/public/{slug}/sso/callback": {
      "post": {
        "description": "Exchange an SSO authorization code for an account-less portal session.\n\nVerifies the id_token against the org IdP, enforces email verification, the\nGoogle hosted-domain rule, and the portal's optional email-domain allowlist,\nthen mints a portal-session cookie. Creates NO user account.",
        "operationId": "portal_sso_callback_api_v1_web_portals_public__slug__sso_callback_post",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "schema": {
              "title": "Slug",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortalSsoCallbackRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Portal Sso Callback",
        "tags": [
          "web-portals"
        ]
      }
    },
    "/api/v1/web-portals/{portal_id}": {
      "delete": {
        "operationId": "delete_portal_api_v1_web_portals__portal_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "portal_id",
            "required": true,
            "schema": {
              "title": "Portal Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Delete Portal",
        "tags": [
          "web-portals"
        ]
      },
      "get": {
        "operationId": "get_portal_api_v1_web_portals__portal_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "portal_id",
            "required": true,
            "schema": {
              "title": "Portal Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Get Portal",
        "tags": [
          "web-portals"
        ]
      },
      "patch": {
        "operationId": "update_portal_api_v1_web_portals__portal_id__patch",
        "parameters": [
          {
            "in": "path",
            "name": "portal_id",
            "required": true,
            "schema": {
              "title": "Portal Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebPortalUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Update Portal",
        "tags": [
          "web-portals"
        ]
      }
    }
  }
}
