{
  "openapi": "3.1.0",
  "info": {
    "title": "Precisely Integration Adapter Service",
    "description": "Exposing Public REST APIs for integrating with Precisely Data Integration Platform.\n \nAPIs require JWT bearer authentication (`Authorization: Bearer {token}`) and return standardized DI-ADAPTER error codes (see the Error Codes table). \nLong-running operations (validation, staging, activation, deployment, dataset creation) are asynchronous — follow Location headers and poll the provided status endpoints (including project validation/commit status polling). \nClients should validate requests to minimize validation (VAL) errors and implement retry/backoff for transient IO/GEN errors. Ensure callers have the proper permission scopes (for example: `replication-pipeline::create`, `replication-pipeline::update`, `replication-pipeline::delete`, `replication-pipeline::view`, `replication-pipeline::operate`). Permission-harmonized APIs use `replication-pipeline::manage` as the legacy fallback when harmonization is disabled. \n \n<details>\n<summary>Error Codes</summary>\n \nAPIs will return the following error codes in case of any error:\n \n**Integration Adapter Errors**\n| Error Code | Description |\n|------------|-------------|\n| DI-ADAPTER-VAL-0000 | Validation error occurred |\n| DI-ADAPTER-VAL-0001 | Constraint violation error |\n| DI-ADAPTER-VAL-0002 | Invalid request parameter |\n| DI-ADAPTER-IO-0000 | Input/Output error occurred |\n| DI-ADAPTER-IO-0001 | JSON processing error |\n| DI-ADAPTER-PRJ-0001 | Failed to retrieve projects |\n| DI-ADAPTER-PRJ-0002 | Failed to retrieve project |\n| DI-ADAPTER-PRJ-0003 | Failed to create project |\n| DI-ADAPTER-PRJ-0004 | Failed to update project |\n| DI-ADAPTER-PRJ-0005 | Project not found |\n| DI-ADAPTER-PRJ-0006 | Project with the same name already exists |\n| DI-ADAPTER-PRJ-0007 | Failed to delete project |\n| DI-ADAPTER-PRJ-0008 | Project deletion blocked by unmet pre-conditions |\n| DI-ADAPTER-PRJ-0009 | Project not found for validation |\n| DI-ADAPTER-PRJ-0010 | Failed to validate project |\n| DI-ADAPTER-PRJ-0011 | Project status not found |\n| DI-ADAPTER-PRJ-0012 | Failed to retrieve project status |\n| DI-ADAPTER-PRJ-0013 | The requested project type is not supported for this operation |\n| DI-ADAPTER-ACT-0001 | No actions specified for project activation |\n| DI-ADAPTER-ACT-0002 | Project activation failed while polling staging status |\n| DI-ADAPTER-ACT-0003 | Project activation failed while staging |\n| DI-ADAPTER-ACT-0004 | Project must be staged before activating configuration |\n| DI-ADAPTER-ACT-0005 | Project must be activated before starting pipelines |\n| DI-ADAPTER-ACT-0006 | Project must be activated before attempting trigger operations |\n| DI-ADAPTER-ACT-0007 | Project activation failed |\n| DI-ADAPTER-ACT-0008 | Project is not activated yet |\n| DI-ADAPTER-ACT-0009 | One or more pipelines failed activation readiness validation |\n| DI-ADAPTER-ACT-0010 | Failed to trigger project validation |\n| DI-ADAPTER-COM-0001 | Failed to trigger project staging |\n| DI-ADAPTER-COM-0002 | Project staging status not found |\n| DI-ADAPTER-COM-0003 | Failed to retrieve project staging status |\n| DI-ADAPTER-CMP-0001 | Mentioned connection type is not supported as source for replication |\n| DI-ADAPTER-CMP-0002 | No suitable target connections found for the selected source for replication |\n| DI-ADAPTER-CMP-0003 | Failed to retrieve connection compatibility matrix |\n| DI-ADAPTER-DEP-0001 | Failed to trigger project deployment |\n| DI-ADAPTER-PIT-0001 | No Pipelines activated to get started |\n| DI-ADAPTER-PIT-0002 | Pipeline must be activated before starting |\n| DI-ADAPTER-PIT-0003 | Invalid Pipeline start request |\n| DI-ADAPTER-PIT-0004 | Failed to trigger pipeline start action |\n| DI-ADAPTER-PIT-0005 | No Pipelines activated to get stopped |\n| DI-ADAPTER-PIT-0006 | Pipeline must be activated before stopping |\n| DI-ADAPTER-PIT-0007 | Invalid Pipeline stop request |\n| DI-ADAPTER-PIT-0008 | Failed to trigger pipeline stop action |\n| DI-ADAPTER-CST-0001 | Pipeline must be configured before starting Log Reader |\n| DI-ADAPTER-CST-0002 | No Log Readers configured to get started |\n| DI-ADAPTER-CST-0003 | Log Reader must be configured before starting |\n| DI-ADAPTER-CST-0004 | Invalid Log Reader start request |\n| DI-ADAPTER-CST-0005 | Failed to trigger log reader start action |\n| DI-ADAPTER-CST-0006 | Pipeline must be configured before stopping Log Reader |\n| DI-ADAPTER-CST-0007 | No Log Readers configured to get stopped |\n| DI-ADAPTER-CST-0008 | Log Reader must be configured before stopping |\n| DI-ADAPTER-CST-0009 | Invalid Log Reader stop request |\n| DI-ADAPTER-CST-0010 | Failed to trigger log reader stop action |\n| DI-ADAPTER-CPT-0001 | Pipeline must be configured before starting capture operation |\n| DI-ADAPTER-CPT-0002 | Pipeline status is missing before starting capture operation |\n| DI-ADAPTER-CPT-0003 | Pipeline issues must be fixed before starting capture operation |\n| DI-ADAPTER-CPT-0004 | Pipeline must be started before starting capture operation |\n| DI-ADAPTER-CPT-0005 | Pipeline is yet to start before starting capture operation |\n| DI-ADAPTER-CPT-0006 | Invalid Capture start request |\n| DI-ADAPTER-CPT-0007 | Invalid Capture request: Missing database details in table identifiers |\n| DI-ADAPTER-CPT-0008 | Failed to trigger start capture operation |\n| DI-ADAPTER-CPT-0009 | Pipeline must be configured before stopping capture operation |\n| DI-ADAPTER-CPT-0010 | Pipeline status is missing before stopping capture operation |\n| DI-ADAPTER-CPT-0011 | Pipeline issues must be fixed before stopping capture operation |\n| DI-ADAPTER-CPT-0012 | Pipeline must be started before stopping capture operation |\n| DI-ADAPTER-CPT-0013 | Pipeline is yet to start before stopping capture operation |\n| DI-ADAPTER-CPT-0014 | Invalid Capture stop request |\n| DI-ADAPTER-CPT-0015 | Failed to trigger stop capture operation |\n| DI-ADAPTER-RTT-0001 | Invalid runtime engines start request |\n| DI-ADAPTER-RTT-0002 | Failed to trigger runtime engines start action |\n| DI-ADAPTER-RTT-0003 | Invalid runtime engines stop request |\n| DI-ADAPTER-RTT-0004 | Failed to trigger runtime engines stop action |\n| DI-ADAPTER-BLT-0001 | Invalid backlog rows clear request |\n| DI-ADAPTER-BLT-0002 | Failed to trigger backlog rows clear action |\n| DI-ADAPTER-STA-0001 | Failed to retrieve project status |\n| DI-ADAPTER-STA-0002 | Project status not found |\n| DI-ADAPTER-STA-0003 | Failed to retrieve pipeline status |\n| DI-ADAPTER-STA-0004 | Pipeline status not found |\n| DI-ADAPTER-STA-0005 | Failed to retrieve project deletion status |\n| DI-ADAPTER-STA-0006 | Project deletion status not found |\n| DI-ADAPTER-STA-0007 | Failed to retrieve pipeline deletion status |\n| DI-ADAPTER-STA-0008 | Pipeline deletion status not found |\n| DI-ADAPTER-STA-0009 | Invalid unified project monitoring status request |\n| DI-ADAPTER-ALT-0001 | Failed to retrieve project alerts |\n| DI-ADAPTER-ALT-0002 | Project alerts not found |\n| DI-ADAPTER-SNP-0001 | Snapshot is missing project details |\n| DI-ADAPTER-SNP-0002 | Invalid snapshot details |\n| DI-ADAPTER-SNP-0003 | Snapshot not found |\n| DI-ADAPTER-SNP-0004 | Failed to retrieve snapshot |\n| DI-ADAPTER-SNP-0005 | Deployed snapshot not found |\n| DI-ADAPTER-SNP-0006 | Failed to retrieve deployed snapshot |\n| DI-ADAPTER-SNP-0007 | Invalid snapshot request type |\n| DI-ADAPTER-MBS-0001 | Metabase with the same name already exists |\n| DI-ADAPTER-MBS-0002 | Invalid request for metabase creation |\n| DI-ADAPTER-MBS-0003 | Failed to create metabase |\n| DI-ADAPTER-MBS-0004 | No metabase found |\n| DI-ADAPTER-MBS-0005 | Failed to retrieve metabase |\n| DI-ADAPTER-MBS-0006 | Failed to delete metabase |\n| DI-ADAPTER-MFD-0001 | Failed to export mainframe pipelines |\n| DI-ADAPTER-MFD-0002 | Failed to import mainframe pipelines |\n| DI-ADAPTER-MFD-0003 | Invalid pipeline configuration for mainframe script generation |\n| DI-ADAPTER-MFD-0004 | Failed to generate mainframe pipeline scripts |\n| DI-ADAPTER-MFD-0005 | Mainframe pipeline script already exists for the given pipeline |\n| DI-ADAPTER-MFD-0006 | No actions specified in the mainframe pipeline activation request |\n| DI-ADAPTER-MFD-0007 | Failed to parse mainframe pipeline validation results |\n| DI-ADAPTER-MFD-0008 | Failed to commit mainframe pipeline |\n| DI-ADAPTER-MFD-0009 | Failed to deploy mainframe pipeline |\n| DI-ADAPTER-MFD-0010 | Failed to start mainframe pipeline |\n| DI-ADAPTER-MFD-0011 | Failed to activate mainframe pipeline |\n| DI-ADAPTER-MFD-0012 | Failed to stop mainframe pipeline |\n| DI-ADAPTER-MFD-0013 | Failed to delete mainframe pipeline |\n| DI-ADAPTER-MFD-0014 | Mainframe pipeline logs not found |\n| DI-ADAPTER-MFD-0015 | Failed to retrieve mainframe pipeline logs |\n| DI-ADAPTER-MFD-0016 | Mainframe pipeline reports not found |\n| DI-ADAPTER-MFD-0017 | Failed to retrieve mainframe pipeline reports |\n| DI-ADAPTER-MFD-0018 | Failed to update mainframe pipeline entry file name |\n| DI-ADAPTER-MFF-0001 | Failed to create mainframe file |\n| DI-ADAPTER-MFF-0002 | Mainframe file content is empty for non-directory file |\n| DI-ADAPTER-MFF-0003 | Failed to retrieve mainframe files |\n| DI-ADAPTER-MFF-0004 | Mainframe files not found for the given pipeline |\n| DI-ADAPTER-MFF-0005 | Failed to rename mainframe files |\n| DI-ADAPTER-MFF-0006 | Failed to download mainframe files |\n| DI-ADAPTER-MFF-0007 | Failed to delete mainframe file |\n| DI-ADAPTER-MFF-0008 | Failed to update mainframe file |\n| DI-ADAPTER-MFF-0009 | Invalid file IDs provided for mainframe migration |\n| DI-ADAPTER-MFF-0010 | Failed while executing mainframe migration operation |\n| DI-ADAPTER-MFF-0011 | Failed to fetch mainframe files for pull status |\n| DI-ADAPTER-MFF-0012 | Failed to compute mainframe pull status |\n| DI-ADAPTER-MFF-0013 | Failed to hydrate selected mainframe files |\n| DI-ADAPTER-MFF-0014 | Failed to fetch mainframe files for push status |\n| DI-ADAPTER-MFF-0015 | Mainframe push preflight failed due to remote drift |\n| DI-ADAPTER-MFF-0016 | Mainframe push upload phase failed |\n| DI-ADAPTER-MFF-0017 | Mainframe push rename phase failed |\n| DI-ADAPTER-MFF-0018 | Mainframe push delete phase failed |\n| DI-ADAPTER-MFF-0019 | Mainframe push reconcile phase failed |\n| DI-ADAPTER-MFF-0020 | Failed to acquire push reservation lock — another push is already in progress |\n| DI-ADAPTER-MFF-0021 | Failed to fetch remote files push reservation status |\n| DI-ADAPTER-MFF-0022 | Push reservation is missing, expired, or no longer valid |\n| DI-ADAPTER-MFF-0023 | Failed to acquire push reservation lock |\n| DI-ADAPTER-PRF-0001 | Project file not found |\n| DI-ADAPTER-PRF-0002 | Project file operation failed |\n| DI-ADAPTER-PRF-0003 | A project file already exists at the requested path |\n| DI-ADAPTER-PRF-0004 | This project file was changed by someone else after it was opened |\n| DI-ADAPTER-PRF-0005 | Project file operation cannot be completed while the project is busy |\n| DI-ADAPTER-PRF-0006 | Project file batch size exceeds the maximum allowed |\n| DI-ADAPTER-PRF-0007 | The project file search expression is invalid |\n| DI-ADAPTER-PRF-0008 | Project file archive size exceeds the maximum allowed |\n| DI-ADAPTER-PRF-0009 | File related operations are not supported for the requested project type |\n| DI-ADAPTER-PRF-0010 | A flattenedPath is required when creating a new project file |\n| DI-ADAPTER-MFP-0001 | Mainframe parameter not found |\n| DI-ADAPTER-MFP-0002 | Failed to retrieve mainframe parameter |\n| DI-ADAPTER-MFP-0003 | Failed to create mainframe parameter |\n| DI-ADAPTER-MFP-0004 | Failed to update mainframe parameter |\n| DI-ADAPTER-MFP-0005 | Failed to delete mainframe parameter |\n| DI-ADAPTER-MFP-0006 | Mainframe parameter with the same name already exists |\n| DI-ADAPTER-MFP-0007 | Encrypted parameter cannot be changed to plain text |\n| DI-ADAPTER-LGR-0001 | Failed to create log reader |\n| DI-ADAPTER-LGR-0002 | No log reader found |\n| DI-ADAPTER-LGR-0003 | Failed to retrieve log reader |\n| DI-ADAPTER-LGR-0004 | Failed to delete log reader |\n| DI-ADAPTER-LGR-0005 | Log reader with the same name already exists |\n| DI-ADAPTER-JRN-0001 | No journal found |\n| DI-ADAPTER-JRN-0002 | Failed to retrieve journals |\n| DI-ADAPTER-UDB-0001 | Failed to create user database |\n| DI-ADAPTER-LDR-0001 | SQL Server log directory not found |\n| DI-ADAPTER-LDR-0002 | Failed to retrieve SQL Server log directory |\n| DI-ADAPTER-DFL-0001 | Failed to retrieve pipelines |\n| DI-ADAPTER-DFL-0002 | Failed to retrieve pipeline |\n| DI-ADAPTER-DFL-0003 | Pipeline is not associated with the specified project |\n| DI-ADAPTER-DFL-0004 | Failed to create pipeline |\n| DI-ADAPTER-DFL-0005 | Pipeline with the same name already exists in the project |\n| DI-ADAPTER-DFL-0006 | Failed to associate connections with pipeline |\n| DI-ADAPTER-DFL-0007 | Pipeline not found |\n| DI-ADAPTER-DFL-0008 | Source or Target connection not found associated with the pipeline |\n| DI-ADAPTER-DFL-0009 | Failed to associate log reader configuration with pipeline |\n| DI-ADAPTER-DFL-0010 | Failed to associate staging configuration with pipeline |\n| DI-ADAPTER-DFL-0011 | Failed to process pipeline configuration |\n| DI-ADAPTER-DFL-0012 | Invalid connection combination: Sync Pipeline can not have source connection as Kafka |\n| DI-ADAPTER-DFL-0013 | Invalid connection combination: Sync Pipeline can only have source connection as IMS, VSAM or DB2 z/OS |\n| DI-ADAPTER-DFL-0014 | Invalid connection combination: Sync Pipeline should have target connection as Kafka |\n| DI-ADAPTER-DFL-0015 | Invalid connection combination: Reverse Sync Pipeline should have source connection as Kafka |\n| DI-ADAPTER-DFL-0016 | Invalid connection combination: Reverse Sync Pipeline can only have target connection as DB2 i or DB2 z/OS |\n| DI-ADAPTER-DFL-0017 | Invalid connection details: ID and Type mismatch |\n| DI-ADAPTER-DFL-0018 | Invalid mainframe replication mode |\n| DI-ADAPTER-DFL-0019 | Missing configuration for the selected mainframe replication pipeline |\n| DI-ADAPTER-DFL-0020 | Failed to associate source selection configuration with pipeline |\n| DI-ADAPTER-DFL-0021 | Selected source assets configuration to be associated with pipeline is not yet cataloged |\n| DI-ADAPTER-DFL-0022 | Missing Selected source assets configuration to be associated with pipeline in Data Catalog |\n| DI-ADAPTER-DFL-0023 | Failed to associate target selection configuration with pipeline |\n| DI-ADAPTER-DFL-0024 | Selected target assets configuration to be associated with pipeline is not yet cataloged |\n| DI-ADAPTER-DFL-0025 | Missing Selected target assets configuration to be associated with pipeline in Data Catalog |\n| DI-ADAPTER-DFL-0026 | Failed to apply transformation rule with pipeline |\n| DI-ADAPTER-DFL-0027 | Failed to delete pipeline |\n| DI-ADAPTER-DFL-0028 | Invalid connection combination: NONE source and target must both be NONE for a sync mainframe pipeline |\n| DI-ADAPTER-DFL-0029 | Staging must be configured for the target connection before table mappings can be configured |\n| DI-ADAPTER-DFL-0030 | Metabase must be configured for the required connection before table mappings can be configured |\n| DI-ADAPTER-DFL-0031 | User database must be configured for the SQL Server or Postgres connection before table mappings can be configured |\n| DI-ADAPTER-DFL-0032 | Table mappings must be configured for the pipeline before the project can be activated |\n| DI-ADAPTER-DFL-0033 | Target dataset must be created for the pipeline before the project can be activated |\n| DI-ADAPTER-MAP-0001 | Failed to associate selected tables with pipeline |\n| DI-ADAPTER-MAP-0002 | Failed to associate table mapping configuration with pipeline |\n| DI-ADAPTER-MAP-0003 | Source Mapping assets missing in Data Catalog |\n| DI-ADAPTER-MAP-0004 | Target Mapping assets missing in Data Catalog |\n| DI-ADAPTER-MAP-0005 | Target Mapping assets are not selected in pipeline configuration |\n| DI-ADAPTER-MAP-0006 | Missing source selection assets matching criteria in Data Catalog |\n| DI-ADAPTER-MAP-0007 | Failed to fetch source assets matching desired selection criteria |\n| DI-ADAPTER-MAP-0008 | Table mapping not found |\n| DI-ADAPTER-MAP-0009 | Failed to retrieve column mappings for table mapping |\n| DI-ADAPTER-AST-0001 | Asset not found in Data Catalog |\n| DI-ADAPTER-AST-0002 | Failed to retrieve asset from Data Catalog |\n| DI-ADAPTER-AST-0003 | Database assets not available in Data Catalog |\n| DI-ADAPTER-AST-0004 | Failed to retrieve Database assets from Data Catalog |\n| DI-ADAPTER-AST-0005 | Schema assets not available in Data Catalog |\n| DI-ADAPTER-AST-0006 | Failed to retrieve Schema assets from Data Catalog |\n| DI-ADAPTER-AST-0007 | Table assets not available in Data Catalog |\n| DI-ADAPTER-AST-0008 | Failed to retrieve Table assets from Data Catalog |\n| DI-ADAPTER-AST-0009 | Topic assets not available in Data Catalog |\n| DI-ADAPTER-AST-0010 | Failed to retrieve Topic assets from Data Catalog |\n| DI-ADAPTER-AST-0011 | Schema Registry Subject assets not available in Data Catalog |\n| DI-ADAPTER-AST-0012 | Failed to retrieve Schema Registry Subject assets from Data Catalog |\n| DI-ADAPTER-AST-0013 | Missing harvested Host asset in Data Catalog |\n| DI-ADAPTER-AST-0014 | Failed to retrieve harvested Host asset from Data Catalog |\n| DI-ADAPTER-AST-0015 | Missing harvested Kafka Cluster asset in Data Catalog |\n| DI-ADAPTER-AST-0016 | Failed to retrieve harvested Kafka Cluster asset from Data Catalog |\n| DI-ADAPTER-CON-0001 | Source connection not found |\n| DI-ADAPTER-CON-0002 | Failed to retrieve source connection |\n| DI-ADAPTER-CON-0003 | Invalid source connection asset |\n| DI-ADAPTER-CON-0004 | Invalid type for source connection |\n| DI-ADAPTER-CON-0005 | Source connection is not supported |\n| DI-ADAPTER-CON-0006 | Target connection not found |\n| DI-ADAPTER-CON-0007 | Failed to retrieve target connection |\n| DI-ADAPTER-CON-0008 | Invalid target connection asset |\n| DI-ADAPTER-CON-0009 | Target connection is not supported |\n| DI-ADAPTER-CON-0010 | Invalid type for target connection |\n| DI-ADAPTER-DBL-0001 | Failed to retrieve logs metadata for diagnostic bundling |\n| DI-ADAPTER-DBL-0002 | Diagnostic bundle with the same name already exists |\n| DI-ADAPTER-DBL-0003 | Failed to start diagnostic bundling process |\n| DI-ADAPTER-DBL-0004 | Failed to stop diagnostic bundling process |\n| DI-ADAPTER-DBL-0005 | Diagnostic bundle status not found |\n| DI-ADAPTER-DBL-0006 | Failed to retrieve diagnostic bundle status |\n| DI-ADAPTER-DBL-0007 | Failed to delete diagnostic bundle |\n| DI-ADAPTER-DBL-0008 | Failed to delete diagnostic bundle status |\n| DI-ADAPTER-DBL-0009 | Only one of bundleId or bundleName should be provided, not both |\n| DI-ADAPTER-AUT-0001 | Authorization failed - missing or invalid credentials |\n| DI-ADAPTER-AUT-0002 | Authorization failed - insufficient permissions |\n| DI-ADAPTER-AUT-0003 | Authorization token expired |\n| DI-ADAPTER-DTS-0001 | Invalid target dataset creation details |\n| DI-ADAPTER-DTS-0002 | Failed to create target dataset |\n| DI-ADAPTER-DTS-0003 | Target Dataset creation for the given pipeline is already in progress |\n| DI-ADAPTER-DTS-0004 | Target Dataset creation status not found |\n| DI-ADAPTER-DTS-0005 | Failed to fetch target dataset creation status |\n| DI-ADAPTER-DTS-0006 | No valid table mappings found for the provided IDs in pipeline |\n| DI-ADAPTER-DTS-0007 | Unsupported target connection type for dataset creation |\n| DI-ADAPTER-RTE-0001 | Failed to retrieve runtime engines |\n| DI-ADAPTER-RTE-0002 | Runtime engine not found |\n| DI-ADAPTER-DSL-0001 | Failed to acquire push lock for the project |\n| DI-ADAPTER-DSL-0002 | Another push operation is currently in progress for this project |\n| DI-ADAPTER-DSL-0003 | Base revision is stale — a newer revision exists on the server |\n| DI-ADAPTER-DSL-0004 | Push reservation has expired |\n| DI-ADAPTER-DSL-0005 | Failed to execute push orchestration |\n| DI-ADAPTER-DSL-0006 | Failed to process uploaded files |\n| DI-ADAPTER-DSL-0007 | Failed to create revision asset |\n| DI-ADAPTER-DSL-0008 | Failed to create asset relationships |\n| DI-ADAPTER-DSL-0009 | Failed to check pull status |\n| DI-ADAPTER-DSL-0010 | Revision not found for the given project |\n| DI-ADAPTER-DSL-0011 | DSL project not found |\n| DI-ADAPTER-DSL-0012 | No revisions found for this DSL project |\n| DI-ADAPTER-DSL-0013 | No files found for the given project revision |\n| DI-ADAPTER-DSL-0014 | Push failed; best-effort cleanup completed with some orphaned assets |\n| DI-ADAPTER-DSL-0015 | Invalid batch: exceeds 499 assets or 24 MB limit |\n| DI-ADAPTER-DSL-0016 | Failed to extend push lock TTL |\n| DI-ADAPTER-DSL-0017 | DSL project validation failed |\n| DI-ADAPTER-DSL-0018 | Invalid batch: unchangedFileIds and transitionDraftAssetIds are allowed only when isFinal=true |\n| DI-ADAPTER-DSL-0019 | DSL file not found for the given project |\n| DI-ADAPTER-DSL-0020 | Failed to save DSL file content |\n| DI-ADAPTER-DSL-0021 | Failed to delete DSL file from project |\n| DI-ADAPTER-DSL-0022 | Failed to delete DSL revision |\n| DI-ADAPTER-DSL-0023 | Cannot delete the latest revision without force=true |\n| DI-ADAPTER-DSL-0024 | File is not associated with the given revision |\n| DI-ADAPTER-DSL-0025 | File version conflict — expected version does not match current version |\n| DI-ADAPTER-DSL-0026 | Conversion analysis not found or expired |\n| DI-ADAPTER-DSL-0027 | Conversion cannot proceed because of a project conflict |\n| DI-ADAPTER-DSL-0028 | Failed to execute project conversion operation |\n| DI-ADAPTER-DSL-0029 | DSL project or pipeline not found for connection resolution |\n| DI-ADAPTER-DSL-0030 | Failed to resolve DSL pipeline connections |\n| DI-ADAPTER-UDB-0002 | No prepared user database state found for the given pipeline |\n| DI-ADAPTER-UDB-0003 | Failed to retrieve prepared user database state |\n| DI-ADAPTER-GEN-0000 | An unexpected error occurred |\n| DI-ADAPTER-GEN-0001 | Failed to map entity to response due to unsupported entity type |\n</details>\n ",
    "contact": {
      "name": "Precisely Support",
      "url": "https://support.precisely.com",
      "email": "support@precisely.com"
    },
    "license": {
      "name": "Precisely Software License",
      "url": "https://precisely.com/legal/licensing"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://integration-adapter.connect.cloud.precisely.com",
      "description": "Development"
    },
    {
      "url": "https://integration-adapter-stg.connect.cloud.precisely.com",
      "description": "Staging"
    },
    {
      "url": "https://integration-adapter.connect.cloud.precisely.com",
      "description": "Production"
    },
    {
      "url": "https://api.eu1.cloud.precisely.com"
    },
    {
      "url": "https://api.au1.cloud.precisely.com"
    },
    {
      "url": "https://api.gb1.cloud.precisely.com"
    }
  ],
  "security": [
    {
      "bearer_token": []
    }
  ],
  "tags": [
    {
      "name": "Build and Configure Continuous Integration Projects",
      "description": "API endpoints for configuring continuous data integration projects and pipelines"
    },
    {
      "name": "Monitor and Trigger Continuous Integration Projects",
      "description": "API endpoints for monitoring continuous data integration projects and its associated pipelines and resources"
    },
    {
      "name": "Build and Configure Mainframe Integration Projects",
      "description": "API endpoints for configuring mainframe data integration projects and pipelines"
    },
    {
      "name": "Monitor and Trigger Mainframe Integration Projects",
      "description": "API endpoints for monitoring mainframe data integration projects and its associated pipelines and resources"
    },
    {
      "name": "Advanced DSL Project Management",
      "description": "API endpoints for managing Advanced DSL projects — push, pull, revision history, and status. Temporary VS Code extension APIs during transition; new consumers use unified project file APIs."
    },
    {
      "name": "Monitor Unified Integration Projects",
      "description": "Type-agnostic runtime monitoring status APIs for Continuous, Mainframe, and Advanced projects"
    },
    {
      "name": "Unified Project Lifecycle APIs",
      "description": "Type-agnostic project lifecycle APIs for Continuous, Mainframe, and Advanced projects"
    }
  ],
  "paths": {
    "/v1/integration/continuous/projects": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get paginated list of projects",
        "description": "Retrieves a paginated list of continuous data integration projects with optional filtering and sorting.\n\n**Features:**\n- Pagination support with configurable page size and number\n- Optional pipeline details inclusion\n- Optional inclusion of component/config fields (metabases/logreaders)\n- Comprehensive sorting options\n\n**Supported Sort Properties:**\n- `name` - Project name\n- `projectType` - Project type (REPLICATION, COPY)\n- `createdAt` - Creation timestamp\n- `modifiedAt` - Last modification timestamp\n- `createdBy` - Creator user\n- `modifiedBy` - Last modifier user\n- `committedAt` - Last commit timestamp\n- `deployedAt` - Deployment timestamp\n- `committedBy` - User who committed\n- `deployedBy` - User who deployed\n\n**Use Cases:**\n- Browse available projects for dashboard displays\n- Filter projects by type for specific workflows\n- Search and sort projects by various criteria\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjects",
        "parameters": [
          {
            "name": "includePipelines",
            "in": "query",
            "description": "Flag to determine if pipeline details should be included with project details",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "loadConfigs",
            "in": "query",
            "description": "Whether to include component/config fields (metabases/logreaders) in project responses",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "page",
            "in": "query",
            "description": "Zero-based page index (0..N).\n\nValidation Rules:\n- Must be greater than or equal to 0\n- Default: 0 (first page)\n\nExamples:\n- page=0 (first page)\n- page=1 (second page)\n- page=5 (sixth page)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "maximum": 10000,
              "minimum": 0
            },
            "example": 0
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of items to return per page.\n\nValidation Rules:\n- Must be between 1 and 100 (inclusive)\n- Default: 10 items per page\n- Values exceeding 100 will return validation error\n\nExamples:\n- size=10 (10 items per page)\n- size=50 (50 items per page)\n- size=100 (maximum allowed)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "minimum": 1
            },
            "example": 50
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting criteria with flexible format options.\nMultiple sort parameters supported for multi-level sorting.\n\nDefault: name,asc (sort by name in ascending order)\n\nSort Format Options:\n- sort=property (e.g., sort=name - defaults to ascending)\n- sort=property,direction (e.g., sort=name,asc or sort=createdAt,desc)\n- sort=property,asc,ignoreCase (for case-insensitive sorting)\n\nMulti-level Sorting:\n- sort=property1,asc&sort=property2,desc (multiple sort parameters)\n- First sort criteria takes priority, subsequent ones used for tie-breaking\n\nNote: Supported sort properties vary by endpoint. Check the specific endpoint\ndocumentation for the list of valid sort properties for that resource type.\n\nExamples:\n- sort=name,asc (sort by name ascending)\n- sort=createdAt,desc (sort by creation date descending)\n- sort=type,asc&sort=name,asc (multi-level sort)\n- sort=deployedAt,desc,ignoreCase (case-insensitive sort)\n",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "default": "name,asc"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectPageResponse"
                },
                "example": {
                  "content": [
                    {
                      "id": "project-123",
                      "name": "Customer Data Integration Project",
                      "description": "Integration project for customer data synchronization",
                      "projectType": "REPLICATION",
                      "createdAt": "2025-08-24T14:15:22Z",
                      "createdBy": "john.doe@example.com",
                      "modifiedAt": "2025-08-25T10:30:15Z",
                      "modifiedBy": "jane.smith@example.com",
                      "committedAt": "2025-08-25T11:45:30Z",
                      "committedBy": "jane.smith@example.com",
                      "deployedAt": "2025-08-25T12:00:00Z",
                      "deployedBy": "admin@precisely.com",
                      "parameters": {
                        "additionalProp1": "string",
                        "additionalProp2": "string",
                        "additionalProp3": "string"
                      },
                      "pipelines": [
                        {
                          "id": "dataflow-456",
                          "name": "Customer Data Synchronization",
                          "description": "Synchronizes customer data between systems",
                          "pipelineType": "REPLICATE",
                          "projectId": "project-123",
                          "source": {
                            "id": "conn-src-uuid",
                            "name": "Source Connection",
                            "type": "DB2I",
                            "parameters": {
                              "additionalProp1": "string",
                              "additionalProp2": "string",
                              "additionalProp3": "string"
                            }
                          },
                          "target": {
                            "id": "conn-tgt-uuid",
                            "name": "Target Connection",
                            "type": "Bigquery",
                            "parameters": {
                              "additionalProp1": "string",
                              "additionalProp2": "string",
                              "additionalProp3": "string"
                            }
                          },
                          "staging": {
                            "id": "conn-schema-registry-uuid",
                            "name": "Schema Registry",
                            "type": "SCHEMAREGISTRY",
                            "parameters": {
                              "additionalProp1": "string"
                            }
                          },
                          "userDatabases": [
                            {
                              "name": "userdb1",
                              "dataConnectionId": "conn-db-1"
                            }
                          ],
                          "includedCDCRowMetadata": [
                            "string"
                          ],
                          "createdAt": "2025-08-24T14:15:22Z",
                          "properties": {
                            "additionalProp1": "string",
                            "additionalProp2": "string",
                            "additionalProp3": "string"
                          },
                          "createdBy": "john.doe@example.com",
                          "modifiedAt": "2025-08-25T10:30:15Z",
                          "modifiedBy": "jane.smith@example.com",
                          "tableMappings": [
                            {
                              "sourceDatabase": "source-database",
                              "sourceSchema": "source-schema",
                              "sourceTable": "source-table",
                              "targetDatabase": "target-database",
                              "targetSchema": "target-schema",
                              "targetTable": "target-table",
                              "targetTopic": "target-topic",
                              "targetSubject": "target-subject",
                              "type": "TARGET_EXISTS_WITH_MATCH",
                              "hasCustomColMappings": true,
                              "includedCDCRowMetadata": [
                                "string"
                              ],
                              "schemaVersion": "1",
                              "softDeleteColumnName": "soft_delete_column",
                              "columnMappings": [
                                {
                                  "sourceColumnName": "ACCOUNT_ID",
                                  "targetColumnName": "ACCOUNT_ID",
                                  "sourceColType": "INTEGER",
                                  "targetColType": "INT64",
                                  "isDistributionKey": true,
                                  "action": "Copy",
                                  "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                  "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                  "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                  "metadataMapping": false,
                                  "mappingType": "FIELD"
                                }
                              ]
                            }
                          ]
                        }
                      ],
                      "metabases": [
                        {
                          "name": "BQDEV2111",
                          "version": "40n",
                          "dataConnectionId": "conn-src-uuid",
                          "vaultConnectionId": "vault-connection-uuid",
                          "parameters": {
                            "IN_SYSBAS": "true"
                          }
                        }
                      ],
                      "logreaders": [
                        {
                          "name": "logreader-name",
                          "journal": "journal-name",
                          "dataConnectionId": "conn-src-uuid",
                          "parameters": {
                            "TRACING_SQL_ALL_OTHER_QUERIES": "N",
                            "DEL_JRN_RCV": "1",
                            "REP_CLEAR_PF_MEMBER": "1",
                            "COMMIT_WAIT_TIME": "2"
                          }
                        }
                      ]
                    }
                  ],
                  "pageNumber": 0,
                  "pageSize": 20,
                  "numberOfElements": 15,
                  "totalElements": 157,
                  "totalPages": 8,
                  "first": true,
                  "last": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid pagination parameters (page < 0, size < 1, size > 100)\n- Invalid sort parameters (unsupported sort property or direction)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request parameters are syntactically correct but semantically invalid:\n- Page size exceeds maximum allowed limit (100)\n- Sort property not supported for the resource type\n- Invalid sort direction specified\n- Malformed sort parameter format\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Connect Portal service client errors\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0001"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Create a new project",
        "description": "Creates a new continuous data integration project with the specified name and parameters.\n\n**Process Overview:**\n1. **Validation** - Verifies project name format and checks for existing project\n2. **Project Creation** - Creates new project with REPLICATION type\n3. **Response** - Returns project ID with HTTP 201 status and Location header\n\n**Project Name Constraints:**\n- Must contain only letters, numbers, periods, underscores, and hyphens\n- Must not be blank\n- Must be unique (ProjectAlreadyExistsException thrown if exists)\n\n**Description:**\n- Optional description can be provided for project context\n- Description will be associated with the created project\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createProject",
        "requestBody": {
          "description": "Project creation details including:\n- Project name (required, unique, format validated)\n- Project description (optional)\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateProjectRequest"
              },
              "example": {
                "name": "customer_data_integration_project",
                "description": "Project for managing continuous customer data integration pipelines"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Project successfully created",
            "headers": {
              "Location": {
                "description": "URI of the newly created project",
                "style": "simple",
                "schema": {
                  "type": "string",
                  "example": "/v1/integration/continuous/projects/project-789"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateContinuousProjectResponse"
                },
                "example": {
                  "id": "customer-data-integration-project-789"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Missing or blank project name\n- Invalid project name format (must contain only letters, numbers, periods, underscores, and hyphens)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict - Project with the specified name already exists.\nCannot create a duplicate project.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.9",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project with name 'existing-project' already exists",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0006"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project creation failure (ProjectUpsertFailedException)\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0003"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get project by ID",
        "description": "Retrieves a specific continuous data integration project by its unique identifier.\n\n**Features:**\n- Complete project information including metadata and configuration\n- Optional pipeline details inclusion\n- Metabase and LogReader details if configured\n- Project existence validation\n- Access control enforcement\n\n**Response Content:**\n- Project metadata (name, description, type, timestamps)\n- User information (creator, last modifier)\n- Optional pipeline details if requested\n- Optional configuration sections (metabases, logreaders) if requested\n\n**Use Cases:**\n- View detailed project information\n- Check project configuration and status\n- Access project-specific pipeline details\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "includePipelines",
            "in": "query",
            "description": "Flag to determine if pipeline details should be included with project details",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "loadConfigs",
            "in": "query",
            "description": "Whether to include component/config fields (metabases/logreaders) in project response",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponse"
                },
                "example": {
                  "id": "project-123",
                  "name": "Customer Data Integration Project",
                  "description": "Integration project for customer data synchronization",
                  "projectType": "REPLICATION",
                  "createdAt": "2025-08-24T14:15:22Z",
                  "createdBy": "john.doe@example.com",
                  "modifiedAt": "2025-08-25T10:30:15Z",
                  "modifiedBy": "jane.smith@example.com",
                  "committedAt": "2025-08-25T11:45:30Z",
                  "committedBy": "jane.smith@example.com",
                  "deployedAt": "2025-08-25T12:00:00Z",
                  "deployedBy": "admin@precisely.com",
                  "parameters": {
                    "additionalProp1": "string",
                    "additionalProp2": "string",
                    "additionalProp3": "string"
                  },
                  "pipelines": [
                    {
                      "id": "dataflow-456",
                      "name": "Customer Data Synchronization",
                      "description": "Synchronizes customer data between systems",
                      "pipelineType": "REPLICATE",
                      "projectId": "project-123",
                      "source": {
                        "id": "conn-src-uuid",
                        "name": "Source Connection",
                        "type": "DB2I",
                        "parameters": {
                          "additionalProp1": "string",
                          "additionalProp2": "string",
                          "additionalProp3": "string"
                        }
                      },
                      "target": {
                        "id": "conn-tgt-uuid",
                        "name": "Target Connection",
                        "type": "Bigquery",
                        "parameters": {
                          "additionalProp1": "string",
                          "additionalProp2": "string",
                          "additionalProp3": "string"
                        }
                      },
                      "staging": {
                        "id": "conn-schema-registry-uuid",
                        "name": "Schema Registry",
                        "type": "SCHEMAREGISTRY",
                        "parameters": {
                          "additionalProp1": "string"
                        }
                      },
                      "userDatabases": [
                        {
                          "name": "userdb1",
                          "dataConnectionId": "conn-db-1"
                        }
                      ],
                      "includedCDCRowMetadata": [
                        "string"
                      ],
                      "createdAt": "2025-08-24T14:15:22Z",
                      "properties": {
                        "additionalProp1": "string",
                        "additionalProp2": "string",
                        "additionalProp3": "string"
                      },
                      "createdBy": "john.doe@example.com",
                      "modifiedAt": "2025-08-25T10:30:15Z",
                      "modifiedBy": "jane.smith@example.com",
                      "tableMappings": [
                        {
                          "sourceDatabase": "source-database",
                          "sourceSchema": "source-schema",
                          "sourceTable": "source-table",
                          "targetDatabase": "target-database",
                          "targetSchema": "target-schema",
                          "targetTable": "target-table",
                          "targetTopic": "target-topic",
                          "targetSubject": "target-subject",
                          "type": "TARGET_EXISTS_WITH_MATCH",
                          "hasCustomColMappings": true,
                          "includedCDCRowMetadata": [
                            "string"
                          ],
                          "schemaVersion": "1",
                          "softDeleteColumnName": "soft_delete_column",
                          "columnMappings": [
                            {
                              "sourceColumnName": "ACCOUNT_ID",
                              "targetColumnName": "ACCOUNT_ID",
                              "sourceColType": "INTEGER",
                              "targetColType": "INT64",
                              "isDistributionKey": true,
                              "action": "Copy",
                              "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                              "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                              "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                              "metadataMapping": false,
                              "mappingType": "FIELD"
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "metabases": [
                    {
                      "name": "BQDEV2111",
                      "version": "40n",
                      "dataConnectionId": "conn-src-uuid",
                      "vaultConnectionId": "vault-connection-uuid",
                      "parameters": {
                        "IN_SYSBAS": "true"
                      }
                    }
                  ],
                  "logreaders": [
                    {
                      "name": "logreader-name",
                      "journal": "journal-name",
                      "dataConnectionId": "conn-src-uuid",
                      "parameters": {
                        "TRACING_SQL_ALL_OTHER_QUERIES": "N",
                        "DEL_JRN_RCV": "1",
                        "REP_CLEAR_PF_MEMBER": "1",
                        "COMMIT_WAIT_TIME": "2"
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID format\n- Missing required parameters\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project with the specified ID does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Connect Portal service client errors\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0001"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Delete a project by ID",
        "description": "Deletes a project by its ID with comprehensive cleanup options.\nThis operation can be performed synchronously or asynchronously depending on the `configOnly` flag.\n\n**Process Overview:**\n- **Validation Phase**: Validates project existence and user permissions\n- **Pre-deletion Operations** (when `configOnly` is false):\n  - Disables data capture for all pipelines (if `operations.disableCaptures` is true)\n  - Clears pending backlogs (if `operations.clearBacklogs` is true)\n  - Stops log reader processes (if `operations.stopLogReaders` is true)\n  - Deletes log readers (if `operations.deleteLogReaders` is true)\n  - Deletes associated metabases (if `operations.deleteMetabases.enabled` is true using provided details)\n- **Pipeline Deletion**: Deletes all pipelines within the project\n- **Project Deletion**: Removes project configuration from Data Integrity Suite\n\n**Execution Modes:**\n- **Synchronous**: For simple deletions (configOnly=true)\n- **Asynchronous**: For complex deletions requiring extensive cleanup operations\n\n**Configuration Only Deletion (`configOnly: true`):**\n**Use with extreme caution** - This mode only removes project configuration and skips all cleanup operations.\n- Cannot be undone - backup strongly recommended\n- Manual cleanup of runtime processes, metabases, and log readers will be required\n\n**Key Considerations:**\n- Monitor deletion progress using the endpoint returned in the `Location` header for 202 responses\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteProject",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project to delete.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "The delete project request containing options for pre-deletion operations.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteProjectRequest"
              },
              "examples": {
                "Full Deletion with Operations": {
                  "description": "Full Deletion with Operations",
                  "value": {
                    "configOnly": false,
                    "operations": {
                      "disableCaptures": false,
                      "clearBacklogs": false,
                      "stopLogReaders": false,
                      "deleteLogReaders": false,
                      "deleteMetabases": {
                        "enabled": false,
                        "metabaseDetails": [
                          {
                            "name": "test-metabase",
                            "adminUser": "admin",
                            "adminPassword": "********"
                          }
                        ]
                      }
                    }
                  }
                },
                "Configuration Only Deletion": {
                  "description": "Configuration Only Deletion",
                  "value": {
                    "configOnly": true,
                    "operations": {}
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Project deletion initiated successfully. Use the Location header to monitor progress.",
            "headers": {
              "Location": {
                "description": "URI to monitor deletion progress",
                "style": "simple",
                "schema": {
                  "type": "string",
                  "example": "/v1/integration/continuous/projects/project-123/deletion-status"
                }
              }
            }
          },
          "204": {
            "description": "Project deleted successfully."
          },
          "400": {
            "description": "Invalid request payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Unexpected server error during deletion.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0007"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/deletion-status": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get project deletion status",
        "description": "Retrieves the deletion status of a project. This endpoint provides real-time status information\nabout ongoing project deletion operations, including the progress of individual stages and\nthe status of pipeline deletions within the project.\n\n**Process Overview:**\n- This endpoint checks the current deletion status of the specified project from cache.\n- Returns detailed status information including overall progress and individual pipeline deletion statuses.\n\n**Key Features:**\n- Enables users to monitor the deletion progress of a project.\n- Provides detailed status of all deletion stages including pipeline deletions.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectDeletionStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project for which deletion status has to be retrieved.\n",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "responses": {
          "200": {
            "description": "Deletion status retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDeletionStatusResponse"
                },
                "example": {
                  "projectName": "test-project",
                  "status": "IN_PROGRESS",
                  "stages": [
                    {
                      "name": "PIPELINE_DELETION",
                      "status": "IN_PROGRESS",
                      "pipelineStatuses": [
                        {
                          "pipelineName": "test-pipeline",
                          "status": "IN_PROGRESS",
                          "stages": [
                            {
                              "name": "STOP_PIPELINE",
                              "status": "COMPLETED"
                            },
                            {
                              "name": "DISABLE_CAPTURE",
                              "status": "COMPLETED"
                            },
                            {
                              "name": "CLEAR_BACKLOG",
                              "status": "COMPLETED"
                            },
                            {
                              "name": "STOP_LOG_READER",
                              "status": "IN_PROGRESS"
                            },
                            {
                              "name": "DELETE_PIPELINE",
                              "status": "PENDING"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name": "STOP_RUNTIME_ENGINE",
                      "status": "COMPLETED"
                    },
                    {
                      "name": "METABASE_DELETION",
                      "status": "IN_PROGRESS",
                      "metabaseDeletionStatuses": {
                        "customer_db_metabase": {
                          "status": "COMPLETED"
                        },
                        "inventory_metabase": {
                          "status": "FAILED",
                          "error": "Connection timeout to database server"
                        },
                        "analytics_metabase": {
                          "status": "IN_PROGRESS"
                        }
                      }
                    },
                    {
                      "name": "LOG_READER_DELETION",
                      "status": "IN_PROGRESS",
                      "logReaderDeletionStatuses": {
                        "reader1": {
                          "status": "IN_PROGRESS"
                        },
                        "reader2": {
                          "status": "FAILED",
                          "error": "Log reader process not responding"
                        }
                      }
                    },
                    {
                      "name": "PROJECT_DELETION",
                      "status": "PENDING"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project deletion status not found - no deletion operation is currently in progress for this project.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project deletion status not found",
                  "instance": "/v1/integration/continuous/projects/{projectId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0006"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error during status retrieval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve project deletion status",
                  "instance": "/v1/integration/continuous/projects/{projectId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/conversion/analyze": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Analyze a continuous replication project for Advanced Replication conversion",
        "description": "Generates a reviewable Advanced Replication DSL analysis from the current project state.\n\n**Features:**\n- Dispatches asynchronous multi-file DSL generation\n- Optionally generates source table definitions\n\n**Use Cases:**\n- Preview a Continuous Replication project as Advanced Replication DSL\n- Start a conversion review before confirming target creation\n\n**Authorization:** Requires either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "analyzeProjectConversion",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the source project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "generateTableDefinitions",
            "in": "query",
            "description": "Whether source table definitions should be generated",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Analysis dispatched",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectStatusResponse"
                },
                "example": {
                  "projectId": "project-123",
                  "analyzeStatus": {
                    "status": "INPROGRESS"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid generateTableDefinitions value",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conversion conflict (DI-ADAPTER-DSL-0027)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Conversion failed (DI-ADAPTER-DSL-0028)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/conversion/analysis/files/{fileId}": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Retrieve one generated conversion file",
        "description": "Returns the exact Base64-encoded file bytes retained in the active conversion analysis.\n\n**Features:**\n- Preserves the reviewed content without regeneration\n- Validates file ownership against the active project analysis\n\n**Use Cases:**\n- Open generated DSL in an editor\n- Materialize reviewed files into a local workspace\n\n**Authorization:** Requires `replication-pipeline::view` permission.\n",
        "operationId": "getProjectConversionAnalysisFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the source project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of a generated analysis file",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "file-1"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConversionAnalysisFileContent"
                },
                "example": {
                  "fileId": "file-1",
                  "fileName": "project.dis.yaml",
                  "relativePath": "project.dis.yaml",
                  "sizeBytes": 21,
                  "encoding": "base64",
                  "content": "ZGlzRHNsVmVyc2lvbjogJzEuMCcK"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project, analysis, or file not found (DI-ADAPTER-DSL-0026)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Conversion failed (DI-ADAPTER-DSL-0028)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/conversion/analysis": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Retrieve conversion analysis metadata",
        "description": "Returns generated file metadata and conversion findings for review.\n\n**Features:**\n- Returns file identifiers without embedding file content\n- Includes warning and error locations for authoring tools\n\n**Use Cases:**\n- Populate a conversion review workspace\n- Inspect conversion findings before confirmation\n\n**Authorization:** Requires `replication-pipeline::view` permission.\n",
        "operationId": "getProjectConversionAnalysis",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the source project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConversionAnalysisMetadata"
                },
                "example": {
                  "sourceProjectId": "project-123",
                  "files": [
                    {
                      "fileId": "file-1",
                      "fileName": "project.dis.yaml",
                      "relativePath": "project.dis.yaml",
                      "sizeBytes": 21
                    }
                  ],
                  "warnings": []
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project or analysis not found (DI-ADAPTER-DSL-0026)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Conversion failed (DI-ADAPTER-DSL-0028)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Cancel and evict conversion analysis",
        "description": "Cancels the active conversion generation and evicts all cached review files.\n\n**Features:**\n- Idempotent cancellation\n- Atomic project-scoped cache eviction\n\n**Use Cases:**\n- Abandon an in-progress conversion review\n- Clear stale generated content before re-analysis\n\n**Authorization:** Requires `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "cancelProjectConversionAnalysis",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the source project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "responses": {
          "204": {
            "description": "Analysis cancellation accepted"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Conversion failed (DI-ADAPTER-DSL-0028)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/conversion/confirm": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Confirm conversion and create the Advanced Replication project",
        "description": "Persists the exact reviewed DSL files as a new Advanced Replication project while leaving the source unchanged.\n\n**Features:**\n- Uses the active cached analysis without regeneration\n- Returns the newly created target project identifier\n\n**Use Cases:**\n- Complete a reviewed project conversion\n- Navigate directly to the new Advanced Replication project\n\n**Authorization:** Requires either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "confirmProjectConversion",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the source project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectId"
                },
                "example": {
                  "id": "advanced-project-456"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project or analysis not found (DI-ADAPTER-DSL-0026)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Conversion conflict (DI-ADAPTER-DSL-0027)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Conversion failed (DI-ADAPTER-DSL-0028)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get pipelines by project ID",
        "description": "Retrieves all continuous data integration pipelines associated with a specific project with pagination and sorting.\n\n**Features:**\n- Pagination support with configurable page size and number\n- Pipeline sorting by multiple properties\n- Optional connection and mapping details inclusion\n- Optional configuration fields inclusion\n- Project-specific pipeline filtering\n\n**Supported Sort Properties:**\n- `name` - Pipeline name\n- `pipelineType` - Pipeline type (COPY, REPLICATE, SYNCHRONIZE, AUDIT)\n- `createdAt` - Creation timestamp\n- `modifiedAt` - Last modification timestamp\n- `createdBy` - Creator user\n- `modifiedBy` - Last modifier user\n\n**Optional Data Loading:**\n- `includeConnections` - Include source and target connection details\n- `includeMappings` - Include table mapping configurations (columnMappings may be partial for default mappings)\n- For fully resolved default/custom column mappings of a specific table mapping, use\n  `GET /v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}`\n- `loadConfigs` - Include component/config fields (cdc row metadata/user databases) in pipeline responses\n\n**Use Cases:**\n- Browse pipelines within a specific project\n- Monitor pipeline status and configuration\n- Access pipeline details for management operations\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getPipelinesByProjectId",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "includeConnections",
            "in": "query",
            "description": "Whether to include connection details in the response.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "includeMappings",
            "in": "query",
            "description": " Whether to include table mapping details in the response. \n Note: This parameter is only effective when includeConnections parameter is enabled. \n When includeConnections is disabled, mappings will not be loaded regardless of this parameter value. \n",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "description": "Only effective when includeConnections=true"
            },
            "example": false
          },
          {
            "name": "loadConfigs",
            "in": "query",
            "description": "Whether to include configuration fields (cdc row metadata/user databases) in pipeline responses",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "page",
            "in": "query",
            "description": "Zero-based page index (0..N).\n\nValidation Rules:\n- Must be greater than or equal to 0\n- Default: 0 (first page)\n\nExamples:\n- page=0 (first page)\n- page=1 (second page)\n- page=5 (sixth page)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "maximum": 10000,
              "minimum": 0
            },
            "example": 0
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of items to return per page.\n\nValidation Rules:\n- Must be between 1 and 100 (inclusive)\n- Default: 10 items per page\n- Values exceeding 100 will return validation error\n\nExamples:\n- size=10 (10 items per page)\n- size=50 (50 items per page)\n- size=100 (maximum allowed)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "minimum": 1
            },
            "example": 50
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting criteria with flexible format options.\nMultiple sort parameters supported for multi-level sorting.\n\nDefault: name,asc (sort by name in ascending order)\n\nSort Format Options:\n- sort=property (e.g., sort=name - defaults to ascending)\n- sort=property,direction (e.g., sort=name,asc or sort=createdAt,desc)\n- sort=property,asc,ignoreCase (for case-insensitive sorting)\n\nMulti-level Sorting:\n- sort=property1,asc&sort=property2,desc (multiple sort parameters)\n- First sort criteria takes priority, subsequent ones used for tie-breaking\n\nNote: Supported sort properties vary by endpoint. Check the specific endpoint\ndocumentation for the list of valid sort properties for that resource type.\n\nExamples:\n- sort=name,asc (sort by name ascending)\n- sort=createdAt,desc (sort by creation date descending)\n- sort=type,asc&sort=name,asc (multi-level sort)\n- sort=deployedAt,desc,ignoreCase (case-insensitive sort)\n",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "default": "name,asc"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved pipelines for the project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContinuousPipelinePageResponse"
                },
                "example": {
                  "content": [
                    {
                      "id": "dataflow-456",
                      "name": "Customer Data Synchronization",
                      "description": "Synchronizes customer data between systems",
                      "pipelineType": "REPLICATE",
                      "projectId": "project-123",
                      "source": {
                        "id": "conn-src-uuid",
                        "name": "Source Connection",
                        "type": "DB2I",
                        "parameters": {
                          "additionalProp1": "string",
                          "additionalProp2": "string",
                          "additionalProp3": "string"
                        }
                      },
                      "target": {
                        "id": "conn-tgt-uuid",
                        "name": "Target Connection",
                        "type": "Bigquery",
                        "parameters": {
                          "additionalProp1": "string",
                          "additionalProp2": "string",
                          "additionalProp3": "string"
                        }
                      },
                      "staging": {
                        "id": "conn-schema-registry-uuid",
                        "name": "Schema Registry",
                        "type": "SCHEMAREGISTRY",
                        "parameters": {
                          "additionalProp1": "string"
                        }
                      },
                      "userDatabases": [
                        {
                          "name": "userdb1",
                          "dataConnectionId": "conn-db-1"
                        }
                      ],
                      "includedCDCRowMetadata": [
                        "string"
                      ],
                      "createdAt": "2025-08-24T14:15:22Z",
                      "properties": {
                        "additionalProp1": "string",
                        "additionalProp2": "string",
                        "additionalProp3": "string"
                      },
                      "createdBy": "john.doe@example.com",
                      "modifiedAt": "2025-08-25T10:30:15Z",
                      "modifiedBy": "jane.smith@example.com",
                      "tableMappings": [
                        {
                          "sourceDatabase": "source-database",
                          "sourceSchema": "source-schema",
                          "sourceTable": "source-table",
                          "targetDatabase": "target-database",
                          "targetSchema": "target-schema",
                          "targetTable": "target-table",
                          "targetTopic": "target-topic",
                          "targetSubject": "target-subject",
                          "type": "TARGET_EXISTS_WITH_MATCH",
                          "hasCustomColMappings": true,
                          "includedCDCRowMetadata": [
                            "string"
                          ],
                          "schemaVersion": "1",
                          "softDeleteColumnName": "soft_delete_column",
                          "columnMappings": [
                            {
                              "sourceColumnName": "ACCOUNT_ID",
                              "targetColumnName": "ACCOUNT_ID",
                              "sourceColType": "INTEGER",
                              "targetColType": "INT64",
                              "isDistributionKey": true,
                              "action": "Copy",
                              "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                              "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                              "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                              "metadataMapping": false,
                              "mappingType": "FIELD"
                            }
                          ]
                        }
                      ]
                    }
                  ],
                  "pageNumber": 0,
                  "pageSize": 20,
                  "numberOfElements": 15,
                  "totalElements": 157,
                  "totalPages": 8,
                  "first": true,
                  "last": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid pagination parameters (page < 0, size < 1, size > 100)\n- Invalid sort parameters (unsupported sort property or direction)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request parameters are syntactically correct but semantically invalid:\n- Page size exceeds maximum allowed limit (100)\n- Sort property not supported for the resource type\n- Invalid sort direction specified\n- Malformed sort parameter format\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Connect Portal service client errors\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get pipeline by ID",
        "description": "Retrieves a specific continuous data integration pipeline by its unique identifier.\n\n**Features:**\n- Complete pipeline information including metadata and configuration\n- Optional connection and mapping details inclusion\n- Optional configuration fields inclusion\n- Pipeline existence validation\n- Access control enforcement\n\n**Response Content:**\n- Pipeline metadata (name, description, type, timestamps)\n- User information (creator, last modifier)\n- Project association details\n- Optional connection configurations if requested\n- Optional table mapping configurations if requested\n- Optional configuration fields (cdc row metadata/user databases)\n\n**Optional Data Loading:**\n- `includeConnections` - Include source and target connection details\n- `includeMappings` - Include table mapping configurations and column mappings (default mappings may not be fully expanded)\n- To fetch a fully resolved mapping (including default column mappings), use\n  `GET /v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}`\n\n**Use Cases:**\n- View detailed pipeline information\n- Check pipeline configuration and status\n- Access pipeline-specific connection and mapping details\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getPipelineById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "includeConnections",
            "in": "query",
            "description": "Whether to include connection details in the response.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "includeMappings",
            "in": "query",
            "description": "Whether to include table mapping details in the response. \nNote: This parameter is only effective when loadConnections parameter is enabled. \nWhen loadConnections is disabled, mappings will not be loaded regardless of this parameter value. \n",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "description": "Only effective when includeConnections=true"
            },
            "example": false
          },
          {
            "name": "loadConfigs",
            "in": "query",
            "description": "Whether to include configuration fields (cdc row metadata/user databases) in pipeline response",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved the pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContinuousPipelineResponse"
                },
                "example": {
                  "id": "dataflow-456",
                  "name": "Customer Data Synchronization",
                  "description": "Synchronizes customer data between systems",
                  "pipelineType": "REPLICATE",
                  "projectId": "project-123",
                  "source": {
                    "id": "conn-src-uuid",
                    "name": "Source Connection",
                    "type": "DB2I",
                    "parameters": {
                      "additionalProp1": "string",
                      "additionalProp2": "string",
                      "additionalProp3": "string"
                    }
                  },
                  "target": {
                    "id": "conn-tgt-uuid",
                    "name": "Target Connection",
                    "type": "Bigquery",
                    "parameters": {
                      "additionalProp1": "string",
                      "additionalProp2": "string",
                      "additionalProp3": "string"
                    }
                  },
                  "staging": {
                    "id": "conn-schema-registry-uuid",
                    "name": "Schema Registry",
                    "type": "SCHEMAREGISTRY",
                    "parameters": {
                      "additionalProp1": "string"
                    }
                  },
                  "userDatabases": [
                    {
                      "name": "userdb1",
                      "dataConnectionId": "conn-db-1"
                    }
                  ],
                  "includedCDCRowMetadata": [
                    "string"
                  ],
                  "createdAt": "2025-08-24T14:15:22Z",
                  "properties": {
                    "additionalProp1": "string",
                    "additionalProp2": "string",
                    "additionalProp3": "string"
                  },
                  "createdBy": "john.doe@example.com",
                  "modifiedAt": "2025-08-25T10:30:15Z",
                  "modifiedBy": "jane.smith@example.com",
                  "tableMappings": [
                    {
                      "id": "mapping_x688lglh9kq5",
                      "sourceDatabase": "source-database",
                      "sourceSchema": "source-schema",
                      "sourceTable": "source-table",
                      "targetDatabase": "target-database",
                      "targetSchema": "target-schema",
                      "targetTable": "target-table",
                      "targetTopic": "target-topic",
                      "targetSubject": "target-subject",
                      "type": "TARGET_EXISTS_WITH_MATCH",
                      "hasCustomColMappings": true,
                      "includedCDCRowMetadata": [
                        "string"
                      ],
                      "schemaVersion": "1",
                      "softDeleteColumnName": "soft_delete_column",
                      "columnMappings": [
                        {
                          "sourceColumnName": "ACCOUNT_ID",
                          "targetColumnName": "ACCOUNT_ID",
                          "sourceColType": "INTEGER",
                          "targetColType": "INT64",
                          "isDistributionKey": true,
                          "action": "Copy",
                          "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                          "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                          "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                          "metadataMapping": false,
                          "mappingType": "FIELD"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid pipeline ID format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Insufficient permissions to access pipeline data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline with the specified ID does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0002"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Delete a pipeline by ID",
        "description": "Deletes a pipeline by its ID within a project with comprehensive cleanup options. This operation can be performed\nsynchronously or asynchronously depending on the cleanup operations required.\n\n**Process Overview:**\n- **Validation Phase**: Validates project and pipeline existence, association, and user permissions\n- **Pipeline State Check**: Determines if pipeline is currently running\n- **Graceful Shutdown** (if pipeline is running):\n  - Stops the pipeline execution\n  - Disables data capture (if `disableCapture` is true)\n  - Clears pending backlog (if `clearBacklog` is true)\n  - Stops associated log reader processes (if `stopLogReader` is true)\n- **Configuration Cleanup**: Removes pipeline configuration and associated resources\n\n**Execution Modes:**\n- **Synchronous**: For simple pipeline deletions (stopping and deleting without cleanup operations)\n- **Asynchronous**: For complex deletions requiring extensive cleanup operations (e.g., disabling capture, clearing backlog, stopping log readers)\n\n**Pre-deletion Operations:**\n- **Disable Capture**: Stops data replication while preserving existing data\n- **Clear Backlog**: Removes pending data changes that haven't been processed\n- **Stop Log Reader**: Gracefully shuts down log reading processes\n\n**Key Considerations:**\n- Running pipelines are automatically stopped before deletion\n- Monitor deletion progress using the endpoint returned in the `Location` header for 202 responses\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deletePipeline",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline to delete.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "The delete pipeline request containing options for pre-deletion operations.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeletePipelineRequest"
              },
              "example": {
                "disableCapture": false,
                "clearBacklog": false,
                "stopLogReader": false
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Pipeline deletion initiated successfully. Use the Location header to monitor progress.",
            "headers": {
              "Location": {
                "description": "URI to monitor deletion progress",
                "style": "simple",
                "schema": {
                  "type": "string",
                  "example": "/v1/integration/continuous/projects/project-123/pipelines/pipeline-456/deletion-status"
                }
              }
            }
          },
          "204": {
            "description": "Pipeline deleted successfully."
          },
          "400": {
            "description": "Invalid request payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Pipeline not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Unexpected server error during deletion.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0026"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/deletion-status": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get pipeline deletion status",
        "description": "Retrieves the deletion status of a pipeline within a project. This endpoint provides real-time status information\nabout ongoing pipeline deletion operations, including the progress of individual deletion stages.\n\n**Process Overview:**\n- This endpoint checks the current deletion status of the specified pipeline from cache.\n- Returns detailed status information including overall progress and individual stage statuses.\n\n**Key Features:**\n- Enables users to monitor the deletion progress of a pipeline.\n- Provides detailed status of all deletion stages.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getPipelineDeletionStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline for which deletion status has to be retrieved.\n",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipe-456"
          }
        ],
        "responses": {
          "200": {
            "description": "Deletion status retrieved successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PipelineDeletionStatusResponse"
                },
                "example": {
                  "pipelineName": "test-pipeline",
                  "status": "IN_PROGRESS",
                  "stages": [
                    {
                      "name": "STOP_PIPELINE",
                      "status": "COMPLETED"
                    },
                    {
                      "name": "DISABLE_CAPTURE",
                      "status": "IN_PROGRESS"
                    },
                    {
                      "name": "CLEAR_BACKLOG",
                      "status": "PENDING"
                    },
                    {
                      "name": "STOP_LOG_READER",
                      "status": "PENDING"
                    },
                    {
                      "name": "DELETE_PIPELINE",
                      "status": "PENDING"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Pipeline deletion status not found - no deletion operation is currently in progress for this pipeline.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Pipeline deletion status not found",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0008"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error during status retrieval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve pipeline deletion status",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/deletion-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0007"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/pipelines": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Create a new continuous pipeline",
        "description": "Creates a new continuous data integration pipeline with specified configuration parameters.\n\n**Process Overview:**\n1. **Project Verification** - Validates or creates the specified project\n2. **Pipeline Creation** - Creates the pipeline with provided configuration\n3. **Configuration Application** - Applies data flow type and properties\n4. **Validation & Persistence** - Validates and saves the complete configuration\n\n**Supported Pipeline Types:**\n- `COPY` - One-time data copy operation\n- `REPLICATE` - Continuous data replication\n- `SYNCHRONIZE` - Bidirectional data synchronization\n- `AUDIT` - Data audit and compliance tracking\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "buildPipeline",
        "requestBody": {
          "description": "Pipeline creation configuration details including:\n- Project information (create new or use existing)\n- Pipeline metadata (name, description)\n- Pipeline Configuration properties\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateContinuousPipelineRequest"
              },
              "example": {
                "projectName": "data_integration_project",
                "pipelineName": "customer-data-sync",
                "description": "Pipeline for synchronizing customer data between systems",
                "pipelineType": "SYNCHRONIZE",
                "properties": {
                  "additionalProp1": "string",
                  "additionalProp2": "string",
                  "additionalProp3": "string"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Pipeline successfully created and configured",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateContinuousPipelineResponse"
                },
                "example": {
                  "projectId": "data-integration-project-id-123",
                  "pipelineId": "customer-data-synchronization-pipeline-456"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project name format\n- Invalid pipeline name format\n- Invalid or unsupported pipeline type\n- Invalid configuration properties\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict - A resource with the same identifier already exists. This may occur in scenarios such as:\n- Pipeline with the specified name already exists within the project\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Pipeline Already Exists",
                  "status": 409,
                  "detail": "A pipeline with the name 'customer-data-synchronization-pipeline' already exists in project 'data-integration-project-id-123'.",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0005"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request is syntactically correct but semantically invalid:\n- Pipeline configuration conflicts with existing pipeline in the same project\n- Business rule violations in pipeline configuration\n- Resource conflicts or constraints violations\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project creation failure (ProjectUpsertFailedException)\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Pipeline creation failure (PipelineUpsertFailedException)\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0004"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/connection-compatibility": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get connection compatibility matrix for continuous replication",
        "description": "Retrieves the connection compatibility matrix for continuous CDC replication, showing which source\nconnection types can replicate to which target connection types.\n\n**Process Overview:**\n- Returns a list of source connection types with their compatible target types\n- Optionally filter by specific source connection type\n- Results are filtered based on feature flags enabled for the current workspace\n- Compatibility is determined by replication engine capabilities and supported protocols\n\n**Key Features:**\n- Provides complete compatibility matrix for continuous replication\n- Helps in planning replication pipelines by showing valid source-target combinations\n- Supports optional filtering by source connection type\n- Real-time compatibility based on workspace configuration and feature flags\n\n**Use Cases:**\n1. **Pipeline Planning:** Determine valid target connections for a given source before creating pipeline\n2. **UI Dropdowns:** Populate target connection dropdowns based on selected source connection\n3. **Validation:** Verify if a proposed source-target combination is supported\n4. **Documentation:** Generate compatibility reports for supported replication scenarios\n\n**Supported Connection Types:**\n- Source: DB2, DB2I, DB2ZOS, Oracle, Mssql, SAPODP, Postgres\n- Target: ConnectKafka, Mssql, Bigquery, Snowflake, Postgres, Snowflake\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getConnectionCompatibilityMatrix",
        "parameters": [
          {
            "name": "connectionType",
            "in": "query",
            "description": "Optional source connection type to filter compatibility results",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "DB2",
                "DB2I",
                "DB2ZOS",
                "Oracle",
                "Mssql",
                "ConnectKafka",
                "Snowflake",
                "Bigquery",
                "SAPODP",
                "Postgres"
              ]
            },
            "example": "DB2"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved connection compatibility matrix",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionCompatibilityMatrixResponse"
                },
                "example": {
                  "compatibilityMatrix": [
                    {
                      "source": "DB2",
                      "supportedTargets": [
                        "ConnectKafka",
                        "Snowflake",
                        "Bigquery",
                        "Postgres",
                        "Mssql"
                      ]
                    },
                    {
                      "source": "DB2I",
                      "supportedTargets": [
                        "ConnectKafka",
                        "Snowflake",
                        "Bigquery",
                        "Postgres",
                        "Mssql"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid connection type parameter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid request parameter",
                  "instance": "/v1/integration/continuous/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0002"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Source connection type not supported or user lacks permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Source connection type is not supported for compatibility check",
                  "instance": "/v1/integration/continuous/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No compatible targets available for the specified source",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "No compatible target connections found for the specified source",
                  "instance": "/v1/integration/continuous/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0003"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve compatibility matrix",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve connection compatibility matrix",
                  "instance": "/v1/integration/continuous/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Associate source and target connections with an existing continuous pipeline",
        "description": "Associates source and target connections with an existing continuous pipeline.\n\n**Process Overview:**\n1. **Pipeline Verification** - Validates pipeline exists and belongs to the specified project\n2. **Connection Validation** - Validates source and target connections\n3. **Parameter Processing** - Applies default parameters based on connection type and merges with user-provided parameters\n4. **Connection Association** - Links the connections and applies final parameters to the pipeline\n\n**Parameter Handling:**\n- **Default Parameters**: Applied based on target connection type (e.g., KAFKA connections get 15 default Kafka parameters)\n- **User Parameters**: Optional sourceParameters and targetParameters can be provided to override defaults\n- **Parameter Validation**: Only valid parameters for the connection type are accepted\n- **Unknown Parameters**: Invalid parameters are logged with warnings and ignored\n\n**Example for KAFKA Target:**\n- Default parameters include: ACKNOWLEDGMENT, MESSAGE_FORMAT, PARTITION_MESSAGES_BY, LOB_MAX_SIZE, etc.\n- User can override any default parameter by providing it in targetParameters\n- Only parameters valid for KAFKA connection type are accepted\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "associateConnectionsWithPipeline",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline to configure",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Connection association details:\n- **sourceConnectionId** (required): The ID of the source data connection\n- **targetConnectionId** (required): The ID of the target data connection\n- **sourceParameters** (optional): Custom source connection parameters to override defaults\n- **targetParameters** (optional): Custom target connection parameters to override defaults\n\n**Parameter Behavior:**\n- **User Override**: User-provided parameters override defaults\n- **Validation**: Only parameters valid for the connection type are accepted\n- **Unknown Parameters**: Invalid parameters are logged with warnings and ignored\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContinuousPipelineConnectionsRequest"
              },
              "example": {
                "sourceConnectionId": "conn-src-uuid",
                "targetConnectionId": "conn-tgt-uuid",
                "sourceParameters": {
                  "CUSTOM_PARAM": "value"
                },
                "targetParameters": {
                  "MESSAGE_FORMAT": "CSV",
                  "ACKNOWLEDGMENT": "WAIT_SINGLE_BROKER"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Connections successfully associated with the pipeline"
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Missing or invalid source connection ID\n- Missing or invalid target connection ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Requested pipeline was not found:\n- Pipeline not found for the given pipelineId\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Pipeline not found",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request is syntactically correct but semantically invalid:\n- Pipeline is not associated with the specified project\n- Resource conflicts or constraints violations\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Pipeline is not associated with the specified project",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0003"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Pipeline retrieval failure (PipelinesRetrievalFailedException)\n- Connection association failure (ConnectionsAssociationWithPipelineFailedException)\n- Catalog asset retrieval failure (CatalogAssetRetrievalFailedException)\n- Connection service client errors when fetching connection details\n- Data Catalog service client errors when validating connections\n- Service unavailability\n- Connection service errors\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/connections",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0006"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/metabases": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get metabases associated with a connection in the specified project",
        "description": "Retrieves metabase configuration associated with a specific **data connection** inside a project.\n\nA **Metabase** is the *replication metadata repository* used by Precisely Replication / Connect CDC to store:\n- subscription and capture metadata\n- replication state\n- internal bookkeeping required to run CDC pipelines reliably\n\nIn most deployments there is **0 or 1 metabase per connection per project**. This endpoint is modeled as a\nlist for consistency with project-level responses and future extensibility.\n\n**Behavior & semantics**\n- Returns **200** with an array.\n- If no metabase is associated with the given connection, returns **200** with an empty array (`[]`).\n- If the project does not exist or is not accessible, returns **404**.\n\n**Typical usage**\n- UI/agent workflow to show whether a connection already has a metabase configured\n- Validation step before creating / updating pipeline components\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMetabasesAssociatedWithProjectAndConnection",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "connectionId",
            "in": "path",
            "description": "Connection identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "conn-src-uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved metabases (empty list if none are associated)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MetabaseResponse"
                  }
                },
                "examples": {
                  "MetabaseExists": {
                    "summary": "A metabase is configured for the connection",
                    "description": "MetabaseExists",
                    "value": [
                      {
                        "name": "BQDEV2111",
                        "version": "40n",
                        "dataConnectionId": "conn-src-uuid",
                        "vaultConnectionId": "vault-connection-uuid",
                        "parameters": {
                          "IN_SYSBAS": "true"
                        }
                      }
                    ]
                  },
                  "NoMetabase": {
                    "summary": "No metabase configured for the connection",
                    "description": "NoMetabase",
                    "value": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation error (missing/invalid projectId or connectionId)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve metabase details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MBS-0003"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/journals": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get journals associated with a connection in the specified project",
        "description": "Retrieves the list of available **journals** for a specific **data connection** inside a project.\n\nA **Journal** is the source-side log/journal identifier used by CDC:\n- On IBM i, a journal determines which objects can be captured and from where changes are read.\n- Journals are used when configuring LogReaders (a log reader points to a journal).\n\n**Behavior & semantics**\n- Returns **200** with an array.\n- If no journals are available / returned by the source metadata service, returns **200** with an empty array (`[]`).\n- If the project does not exist or is not accessible, returns **404**.\n\n**Typical usage**\n- UI/agent step to populate a journal dropdown before creating a LogReader\n- Validation step to ensure a user-selected journal exists\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getJournalsAssociatedWithProjectAndConnection",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "connectionId",
            "in": "path",
            "description": "Connection identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "conn-src-uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved journals (empty list if none are available)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JournalResponse"
                  }
                },
                "examples": {
                  "Journals": {
                    "summary": "Journals available for the connection",
                    "description": "Journals",
                    "value": [
                      {
                        "name": "JRN001"
                      },
                      {
                        "name": "JRN002"
                      }
                    ]
                  },
                  "NoJournals": {
                    "summary": "No journals returned",
                    "description": "NoJournals",
                    "value": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation error (missing/invalid projectId or connectionId)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/journals",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/journals",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/journals",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/journals",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve journals",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/journals",
                  "properties": {
                    "errorCode": "DI-ADAPTER-JRN-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/logreaders": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get log readers associated with a connection in the specified project",
        "description": "Retrieves **LogReader** configuration(s) associated with a specific **data connection** inside a project.\n\nA **LogReader** (also referred to as a *Change Selector* in some CDC workflows) is responsible for:\n- reading database logs/journals\n- producing changes for downstream replication\n- managing journal/receiver position and CDC offsets\n\n**Behavior & semantics**\n- Returns **200** with a response array.\n- If no log readers are configured for the connection, returns **200** with an empty array (`[]`).\n- If the project does not exist or is not accessible, returns **404**.\n\n**Typical usage**\n- UI/agent workflow showing the change capture components configured for a connection\n- Pre-check before triggering log reader start/stop calls (monitoring endpoints)\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getLogReadersAssociatedWithProjectAndConnection",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "connectionId",
            "in": "path",
            "description": "Connection identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "conn-src-uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved log readers (empty list if none are associated)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LogReaderResponse"
                  }
                },
                "examples": {
                  "LogReaderExists": {
                    "summary": "A log reader is configured for the connection",
                    "description": "LogReaderExists",
                    "value": [
                      {
                        "name": "logreader-name",
                        "journal": "journal-name",
                        "dataConnectionId": "conn-src-uuid",
                        "parameters": {
                          "TRACING_SQL_ALL_OTHER_QUERIES": "N",
                          "DEL_JRN_RCV": "1",
                          "REP_CLEAR_PF_MEMBER": "1",
                          "COMMIT_WAIT_TIME": "2"
                        }
                      }
                    ]
                  },
                  "NoLogReaders": {
                    "summary": "No log readers configured for the connection",
                    "description": "NoLogReaders",
                    "value": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation error (missing/invalid projectId or connectionId)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/logreaders",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/logreaders",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/logreaders",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/logreaders",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve log reader details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/connections/{connectionId}/logreaders",
                  "properties": {
                    "errorCode": "DI-ADAPTER-LGR-0003"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Configure pipeline components",
        "description": "Creates configuration for various components within a specific pipeline in a project.\n\n**Process Overview:**\n1. **Resource Validation** - Validates project and pipeline existence\n2. **Parallel Component Processing** - Processes each component configuration independently\n3. **Component Types Supported**:\n   - **Metabase**: Replication Metadata configuration\n   - **LogReader**: Log processing and journal management\n   - **UserDatabase**: User data store configuration\n   - **Staging**: Data staging and batch processing configuration\n4. **Isolation & Fault Tolerance** - Component failures don't affect others\n5. **Component Existence & Skipping:** - If a component is already configured and up-to-date, its configuration step is skipped.\n6. **Consolidated Response** - Returns unified status after all processing\n\n**Key Features:**\n- All component configurations are optional\n- Parallel processing for optimal performance\n- Independent component execution (failure isolation)\n- Metrics per component for better observability\n- Component specific thread pool resource allocation\n- Comprehensive error reporting per component\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "configurePipelineComponents",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline to configure",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Configuration details for pipeline components. All components are optional:\n- **metabase**: Replication Metadata configuration with username/password(can be defined for source and target Metabase instances)\n- **logreader**: Log processing and journal management configuration\n- **userDatabase**: User data store configuration with username/password for multiple databases\n- **staging**: Data staging and batch processing configuration with complex batch windows. For Snowflake targets that stage through external cloud storage (S3/GCS/Azure), include `storageIntegration` with the Snowflake account-level storage integration object name.\n\nEach component supports independent configuration and will be processed in parallel\nfor optimal performance. Component failures are isolated and don't affect others.\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContinuousPipelineConfigurationRequest"
              },
              "example": {
                "metabase": {
                  "source": {
                    "name": "analytics-source-metabase",
                    "vaultConnectionId": "vault-identifier",
                    "adminUser": "metabase_admin",
                    "adminPassword": "********",
                    "replicationUser": "replicator_user",
                    "replicationPassword": "********",
                    "parameters": {
                      "database_type": "postgresql"
                    }
                  },
                  "target": {
                    "name": "analytics-target-metabase",
                    "adminUser": "metabase_admin",
                    "adminPassword": "********",
                    "replicationUser": "replicator_user",
                    "replicationPassword": "********",
                    "parameters": {
                      "database_type": "postgresql"
                    }
                  }
                },
                "logReader": {
                  "name": "transaction-logReader",
                  "journalName": "transaction-journal",
                  "parameters": {
                    "log_level": "INFO",
                    "batch_size": "1000"
                  }
                },
                "userDatabase": {
                  "source": {
                    "databases": [
                      "source-user-db-primary",
                      "source-user-db-replica"
                    ],
                    "vaultConnectionId": "vault-identifier",
                    "username": "db_admin",
                    "password": "********",
                    "replicationUser": "rep-user"
                  },
                  "target": {
                    "databases": [
                      "target-user-db-primary",
                      "target-user-db-replica"
                    ],
                    "username": "db_admin",
                    "password": "********",
                    "replicationUser": "rep-user"
                  }
                },
                "staging": {
                  "type": "CDWH_STAGING_TYPE_S3",
                  "directory": "/data/staging",
                  "schema": "staging_schema",
                  "storageIntegration": "snowflake_s3_stage_integration",
                  "batchWindow": {
                    "data": {
                      "limit": 100,
                      "units": "THOUSAND"
                    },
                    "duration": {
                      "frequency": 60,
                      "units": "SECONDS"
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Configuration successfully applied to pipeline components",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContinuousPipelineConfigurationResponse"
                },
                "example": {
                  "requestId": "config-req-12345-abcde",
                  "overallStatus": "SUCCESS",
                  "executionTimeInMs": 45123,
                  "metabase": {
                    "source": {
                      "name": "analytics-source-metabase",
                      "version": "40i",
                      "response": "metabase created successfully",
                      "status": "SUCCESS"
                    },
                    "target": {
                      "name": "analytics-target-metabase",
                      "version": "40j",
                      "response": "metabase created successfully",
                      "status": "SUCCESS"
                    }
                  },
                  "logReader": {
                    "name": "transaction-logReader",
                    "journalName": "transaction-journal",
                    "response": "logreader configured successfully",
                    "status": "SUCCESS"
                  },
                  "userDatabase": {
                    "source": {
                      "success": [
                        {
                          "name": "source-user-db-primary",
                          "response": "user database configured successfully",
                          "status": "SUCCESS"
                        }
                      ],
                      "failure": [
                        {
                          "name": "source-user-db-replica",
                          "response": "failed configuring user database",
                          "status": "FAILURE"
                        }
                      ]
                    },
                    "target": {
                      "success": [
                        {
                          "name": "target-user-db-primary",
                          "response": "user database configured successfully",
                          "status": "SUCCESS"
                        }
                      ],
                      "failure": [
                        {
                          "name": "target-user-db-replica",
                          "response": "failed configuring user database",
                          "status": "FAILURE"
                        }
                      ]
                    }
                  },
                  "staging": {
                    "status": "SUCCESS",
                    "response": "staging details configured successfully"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid component configuration parameters\n- Missing required configuration fields\n- Invalid parameters for metabase configuration\n- Invalid batch window or staging parameters\n- Invalid username or password\n- Missing data connection IDs\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found:\n- Project with specified ID does not exist\n- Pipeline with specified ID does not exist in the project\n- Data connection referenced in configuration not found\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Configuration conflicts or business rule violations:\n- Component configuration conflicts with existing pipeline settings\n- Invalid combination of component configurations\n- Resource capacity constraints exceeded\n- Invalid data connection types for specified components\n- Authentication failures with provided credentials\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Component processing failures:\n- Metabase service configuration failures\n- LogReader service configuration failures\n- UserDatabase provisioning errors\n- Staging configuration setup failures\n- Thread pool execution errors\n- Internal processing errors\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0010"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Suggest source assets matching criteria",
        "description": "Suggests source assets (DATABASE, SCHEMA, TABLE, TOPIC, KAFKA_SCHEMA) matching the provided search patterns for a pipeline.\n\n**Process Overview:**\n1. **Input Validation** - Validates input parameters and permissions.\n2. **Asset Discovery** - Matches cataloged assets using provided regex patterns.\n3. **Detailed Response** - Returns full asset path details for the matching source resources.\n\n**Supported Asset Types:**\n- `DATABASE` - RDBMS database assets\n- `SCHEMA` - RDBMS schema assets\n- `TABLE` - RDBMS table assets\n- `TOPIC` - Kafka topic assets\n- `KAFKA_SCHEMA` - Schema Registry subject assets\n\n**Use Cases:**\n- Source asset selection and validation during pipeline setup.\n- Interactive workflows for asset discovery and filtering.\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "suggestSourceAssetsMatchingCriteria",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline for which assets have to be selected.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Type of source asset to match",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "DATABASE",
                "SCHEMA",
                "TABLE",
                "TOPIC",
                "KAFKA_SCHEMA"
              ]
            },
            "example": "TABLE"
          }
        ],
        "requestBody": {
          "description": "Criteria for matching source assets, contains the search criteria(RegEx patterns) along with context for selection",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetMatchCriteria"
              },
              "example": {
                "database": "sales_db",
                "schema": "public",
                "patterns": [
                  "order_.*",
                  "customer_.*"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "List of matching assets along with context and fully qualified hierarchy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuggestedAssetResponse"
                },
                "example": [
                  {
                    "database": "sales_db",
                    "schema": "public",
                    "table": "order_2023",
                    "journal": "order/journal"
                  },
                  {
                    "database": "sales_db",
                    "schema": "public",
                    "table": "order_2024",
                    "journal": "order/journal"
                  },
                  {
                    "database": "sales_db",
                    "schema": "public",
                    "table": "customer_feedback",
                    "journal": "customer/journal"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad request. Invalid criteria or missing parameters.",
            "content": {
              "application/json": {
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden. Insufficient permissions.",
            "content": {
              "application/json": {
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No source assets exist matching criteria.",
            "content": {
              "application/json": {
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MAP-0006"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity. Criteria not supported.",
            "content": {
              "application/json": {
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error - failed retrieving matching source assets",
            "content": {
              "application/json": {
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/suggest/source",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MAP-0007"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Configure table mappings for a pipeline",
        "description": "Configures source-to-target table mappings for a specified pipeline within a continuous integration project.\n\n**Process Overview:**\n1. **Resource Validation** - Validates project and pipeline existence\n2. **Mapping Configuration** - Applies source-to-target table mappings, supporting polymorphic source/target types (RDBMS, Kafka, Schema Registry)\n3. **Customization** - Allows per-target customization (column mappings, metadata fields)\n4. **Fallback Logic** - If columnMappings or includedCDCRowMetadata are not provided, defaults to exact mapping\n5. **Validation & Persistence** - Validates and saves the mapping configuration\n\n**Update Mode (`mode` query parameter):**\n- `ADD` *(default)*: Merges request body mappings with existing pipeline mappings.\n   Incoming mappings win on duplicate source/target signatures; unmentioned existing mappings are preserved.\n- `REPLACE`: Discards all existing table mappings and stores only the mappings in the request body.\n\n**Use Cases:**\n- Define or update table mappings for a pipeline\n- Incrementally add new source/target pairs without disrupting existing mappings (`ADD`)\n- Update individual mapping configurations (e.g., column mappings) without affecting others (`ADD`)\n- Fully reconfigure all table mappings for a pipeline (`REPLACE`)\n- Support advanced mapping scenarios (custom columns, metadata)\n- Integrate with multiple source/target types\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "configureTableMappings",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline to configure mappings for",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "mode",
            "in": "query",
            "description": "Controls how submitted table mappings are applied to the pipeline.\n\n**`ADD` (default)**\nKeeps the mappings that are already configured on the pipeline and applies the mappings from\nthis request on top of them.\n\n**`REPLACE`**\nRemoves the existing mappings and stores only the mappings provided in this request.\n\nUse `ADD` for incremental updates. Use `REPLACE` when this request should become the full\nmapping definition for the pipeline.\n\n**Note:** The value must match one of the enum constant names exactly (case-sensitive).\nValid values are: ADD, REPLACE. Invalid values will result in a 400 Bad Request error.\n",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ADD",
              "enum": [
                "ADD",
                "REPLACE"
              ]
            },
            "example": "ADD"
          }
        ],
        "requestBody": {
          "description": "Mapping configuration payload defining source and target mappings, including optional column mappings and metadata fields",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContinuousTableMappingRequest"
              },
              "examples": {
                "RDBMS to RDBMS": {
                  "summary": "Database table to database table mapping with per-target customization",
                  "description": "RDBMS to RDBMS",
                  "value": {
                    "mappings": [
                      {
                        "source": {
                          "type": "RDBMS",
                          "database": "sourceDb",
                          "schema": "dbo",
                          "table": "customers"
                        },
                        "targets": [
                          {
                            "type": "RDBMS",
                            "connectionId": "conn-db-target-456",
                            "database": "targetDb",
                            "schema": "public",
                            "table": "customers_replica",
                            "softDeleteColumn": "is_deleted",
                            "columnMappings": [
                              {
                                "sourceColumnName": "ACCOUNT_ID",
                                "targetColumnName": "ACCOUNT_ID",
                                "sourceColType": "INTEGER",
                                "targetColType": "INT64",
                                "key": true,
                                "action": "Copy",
                                "expression": false,
                                "fieldMappingType": "FIELD",
                                "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "duplicate": false
                              },
                              {
                                "sourceColumnName": "ACCOUNT_NAME",
                                "targetColumnName": "ACCOUNT_NAME",
                                "sourceColType": "VARCHAR",
                                "targetColType": "STRING",
                                "key": false,
                                "action": "Copy",
                                "expression": false,
                                "fieldMappingType": "FIELD",
                                "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "duplicate": false
                              }
                            ],
                            "includedCDCRowMetadata": []
                          }
                        ]
                      }
                    ]
                  }
                },
                "RDBMS to Kafka": {
                  "summary": "Database table to Kafka topic mapping including metadata & custom columns",
                  "description": "RDBMS to Kafka",
                  "value": {
                    "mappings": [
                      {
                        "source": {
                          "type": "RDBMS",
                          "database": "sourceDb",
                          "schema": "dbo",
                          "table": "orders"
                        },
                        "targets": [
                          {
                            "type": "KAFKA",
                            "connectionId": "conn-kafka-789",
                            "topic": "orders-events",
                            "softDeleteColumn": "deleted_flag",
                            "columnMappings": [
                              {
                                "sourceColumnName": "ACCOUNT_ID",
                                "targetColumnName": "ACCOUNT_ID",
                                "sourceColType": "INTEGER",
                                "targetColType": "INT64",
                                "key": true,
                                "action": "Copy",
                                "expression": false,
                                "fieldMappingType": "FIELD",
                                "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "duplicate": false
                              },
                              {
                                "sourceColumnName": "ACCOUNT_TOTAL",
                                "targetColumnName": "ACCOUNT_TOTAL",
                                "sourceColType": "DECIMAL",
                                "targetColType": "FLOAT64",
                                "key": false,
                                "action": "Copy",
                                "expression": false,
                                "fieldMappingType": "FIELD",
                                "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "duplicate": false
                              }
                            ],
                            "includedCDCRowMetadata": []
                          }
                        ]
                      }
                    ]
                  }
                },
                "RDBMS to Schema Registry": {
                  "summary": "Database table to Kafka topic with Schema Registry subject & advanced mapping",
                  "description": "RDBMS to Schema Registry",
                  "value": {
                    "mappings": [
                      {
                        "source": {
                          "type": "RDBMS",
                          "database": "sourceDb",
                          "schema": "dbo",
                          "table": "products"
                        },
                        "targets": [
                          {
                            "type": "SCHEMA_REGISTRY",
                            "connectionId": "conn-kafka-789",
                            "topic": "products-events",
                            "subject": "products-value",
                            "softDeleteColumn": "is_deleted",
                            "columnMappings": [
                              {
                                "sourceColumnName": "ACCOUNT_ID",
                                "targetColumnName": "ACCOUNT_ID",
                                "sourceColType": "INTEGER",
                                "targetColType": "INT64",
                                "key": true,
                                "action": "Copy",
                                "expression": false,
                                "fieldMappingType": "FIELD",
                                "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "duplicate": false
                              },
                              {
                                "sourceColumnName": "ACCOUNT_NAME",
                                "targetColumnName": "ACCOUNT_NAME",
                                "sourceColType": "VARCHAR",
                                "targetColType": "STRING",
                                "key": false,
                                "action": "Copy",
                                "expression": false,
                                "fieldMappingType": "FIELD",
                                "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                                "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                                "duplicate": false
                              }
                            ],
                            "includedCDCRowMetadata": []
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Table mappings configured successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContinuousTableMappingResponse"
                },
                "example": [
                  {
                    "id": "mapping_identifier",
                    "sourceDatabase": "sourceDb",
                    "sourceSchema": "dbo",
                    "sourceTable": "customers",
                    "targetDatabase": "targetDb",
                    "targetSchema": "public",
                    "targetTable": "customers_replica",
                    "type": "TARGET_EXISTS_WITH_MATCH",
                    "hasCustomColMappings": true,
                    "includedCDCRowMetadata": [],
                    "schemaVersion": "1",
                    "softDeleteColumnName": "is_deleted",
                    "columnMappings": [
                      {
                        "sourceColumnName": "ACCOUNT_ID",
                        "targetColumnName": "ACCOUNT_ID",
                        "sourceColType": "INTEGER",
                        "targetColType": "INT64",
                        "isDistributionKey": true,
                        "action": "Copy",
                        "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                        "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                        "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                        "metadataMapping": false,
                        "mappingType": "FIELD"
                      },
                      {
                        "sourceColumnName": "ACCOUNT_NAME",
                        "targetColumnName": "ACCOUNT_NAME",
                        "sourceColType": "VARCHAR",
                        "targetColType": "STRING",
                        "isDistributionKey": false,
                        "action": "Copy",
                        "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                        "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                        "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                        "metadataMapping": false,
                        "mappingType": "FIELD"
                      }
                    ]
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid mapping configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Processing failures",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MAP-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get table mapping by ID",
        "description": "Retrieves a specific table mapping with resolved column mappings for the given project and pipeline.\n\n**Features**\n- Returns the authoritative mapping payload for a specific `tableMappingId`\n- Includes both user-defined custom mappings and backend-resolved default mappings\n- Supports optional `schemaVersion` for SCHEMA_REGISTRY targets only (keep empty for all other target types)\n\n**Use cases**\n- Inspect one mapping in detail before applying mapping updates\n- Troubleshoot mapping output when pipeline/project retrieval does not include fully expanded defaults\n\n**Parameters:**\n- `projectId` - Project identifier\n- `pipelineId` - Pipeline identifier\n- `tableMappingId` - Table mapping identifier\n- `schemaVersion` (optional) - Use only for SCHEMA_REGISTRY targets; keep empty for non-schema-registry targets\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getTableMappingById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Pipeline identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "tableMappingId",
            "in": "path",
            "description": "Table mapping identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "mapping_x688lglh9kq5"
          },
          {
            "name": "schemaVersion",
            "in": "query",
            "description": "Optional schema version for SCHEMA_REGISTRY targets only; keep empty for non-schema-registry targets",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved table mapping details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContinuousTableMappingResponse"
                },
                "example": {
                  "id": "mapping_x688lglh9kq5",
                  "sourceDatabase": "source-database",
                  "sourceSchema": "source-schema",
                  "sourceTable": "source-table",
                  "targetDatabase": "target-database",
                  "targetSchema": "target-schema",
                  "targetTable": "target-table",
                  "targetTopic": "target-topic",
                  "targetSubject": "target-subject",
                  "type": "TARGET_EXISTS_WITH_MATCH",
                  "hasCustomColMappings": false,
                  "includedCDCRowMetadata": [
                    "TRANSACTION_ID"
                  ],
                  "schemaVersion": "1",
                  "softDeleteColumnName": "soft_delete_column",
                  "columnMappings": [
                    {
                      "sourceColumnName": "ACCOUNT_ID",
                      "targetColumnName": "ACCOUNT_ID",
                      "sourceColType": "INTEGER",
                      "targetColType": "INT64",
                      "isDistributionKey": true,
                      "action": "Copy",
                      "state": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
                      "sourceColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                      "targetColumnNullableState": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE",
                      "metadataMapping": false,
                      "mappingType": "FIELD"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation error (missing/invalid identifiers or query parameters)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project, pipeline, or table mapping does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Table mapping not found",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MAP-0008"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve table mapping",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve table mapping",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/mappings/{tableMappingId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MAP-0009"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Create a target dataset for a pipeline",
        "description": "Creates a target dataset for a specified pipeline by providing a set of table mapping IDs.\nThis endpoint submits an asynchronous dataset-creation request.\n\nProcess overview:\n  1. Resource validation - validates that the pipeline exists and belongs to the\n     provided project. If validation fails, the request will be rejected.\n  2. Request validation - validates that at least one table mapping ID is provided.\n     The IDs must reference existing table mappings in the pipeline.\n  3. Table mapping retrieval - fetches the actual table mapping details from the\n     pipeline based on the provided IDs. The handler determines the appropriate\n     creation strategy based on the target connection type.\n  4. Async submission - Dataset creation is performed asynchronously;\n  5. Monitoring - on successful submission the endpoint returns 202 Accepted with a\n     `Location` header that points to the dataset creation status endpoint. Clients\n     should poll that endpoint to monitor progress and completion.\n\nBehavior & semantics:\n  - Idempotency: repeated requests for the same pipeline and identical mapping IDs may\n    be rejected as a conflict if a create operation is already in progress (409).\n  - Use the returned `Location` or the GET status endpoint to obtain\n    the current dataset creation status.\n\nRequired Permissions: Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createTargetDataset",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Set of table mapping IDs that reference existing table mappings in the pipeline.\nThe handler will fetch the actual table mapping details from the pipeline and\ndetermine the appropriate creation strategy based on the target connection type.\n\nAt least one table mapping ID must be provided.\n",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              },
              "example": [
                "mapping_x688lglh9kq5",
                "mapping_y789mnop1rst"
              ]
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Dataset creation task submitted successfully. Use the `Location` header to monitor task status.\n1. **Asynchronous Processing** - Dataset creation is handled asynchronously; the response indicates task submission\n2. **Task Monitoring** - Use the provided `Location` URI to monitor the status of the dataset creation task\n",
            "headers": {
              "Location": {
                "description": "URI to monitor dataset creation status",
                "style": "simple",
                "schema": {
                  "type": "string"
                },
                "example": "/projects/project-123/pipelines/pipeline-456/datasets/status?type=TABLE"
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid target dataset request format (InvalidDatasetDetailsException)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Dataset creation for the given pipeline is already in progress",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "A conflicting process is already in progress",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DTS-0003"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Invalid pipeline association failure\n- Dataset creation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DTS-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get status of target dataset creation",
        "description": "Fetches the status of an asynchronous target dataset creation task for the specified pipeline.\n\nBehavior & semantics:\n  - The endpoint returns a `DatasetCreationStatusResponse` describing the overall\n    creation status and per-schema details (total, success, in-progress, failed)\n    and any per-table errors.\n\nStatus interpretation:\n  - `status` (overall): one of `SUCCESS`, `PENDING`, `IN_PROGRESS`, `FAILED`.\n    - SUCCESS: all tables for the requested schemas were created successfully.\n    - IN_PROGRESS / PENDING: creation is still ongoing for one or more schemas.\n    - FAILED: creation failed for all requested tables/schemas.\n  - `schemaDetails`: per-target schema breakdown including counts and a list of\n    per-table errors (if any). Use these details to diagnose failures.\n\nUsage & polling guidance:\n  - Poll the endpoint returned in the POST response `Location` header, or call\n    this endpoint directly to monitor progress. Use exponential backoff when\n    polling frequently to avoid overwhelming the backend service.\n  - Once the overall `status` becomes `SUCCESS` or `FAILED`, the creation is\n    considered terminal.\n\nRequired Permissions: `replication-pipeline::view` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "getDatasetCreationStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved dataset creation status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatasetCreationStatusResponse"
                },
                "example": {
                  "status": "IN_PROGRESS",
                  "schemaDetails": [
                    {
                      "schemaName": "TESTSCHEMA",
                      "status": "IN_PROGRESS",
                      "totalCount": 4,
                      "successCount": 1,
                      "inProgressCount": 2,
                      "failedCount": 1,
                      "errors": []
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid query parameters (e.g., missing or invalid 'type' parameter)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::view' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No dataset creation status found for the given pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DTS-0004"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request parameters are syntactically correct but semantically invalid:\n- Type parameter is not one of the allowed values [TABLE]\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/datasets/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DTS-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/activation": {
      "post": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Activate a project",
        "description": "Stages and optionally activates a project, with optional pipeline start.\n\n**Process Overview:**\n- Based on the `ProjectActivationRequest`, this endpoint triggers the appropriate operations in a fixed sequence: validate, stage, activate, then start pipelines.\n- If `validate` is true, pipeline activation readiness is validated before staging or before activation. When `validateOptions.pipelineIds` is provided, those pipelines are validated first as a pipeline-level pre-check; the full project is still validated afterward regardless.\n- If `stage` is true, the project configurations are staged, and the user is redirected to the staging status endpoint.\n- If `activate` is true, the project is activated, and the user is redirected to the alerts endpoint.\n- If `startPipelines` is true, the pipelines associated with the project are started.\n- If `stage`, `activate`, and `startPipelines` are all false but `validate` is true, the same readiness pre-check runs and a full-project validation is triggered directly, without staging.\n\n**Redirect Details:**\n- When `stage` is true, the `Location` header in the response contains the URI to monitor the staging status of the project.\n- When `activate` is true, the `Location` header in the response contains the URI to the project's alerts endpoint.\n- Clients can use the `Location` header to navigate to the appropriate endpoint for further actions.\n\n**Key Features:**\n- Allows users to manage the lifecycle of a project (staging, activation, pipeline starting).\n- Provides redirection to relevant endpoints based on the operation performed.\n- Ensures that the operations are performed asynchronously where applicable.\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "activateProject",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project to activate.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "The activation request containing details about validation, staging, activation and pipeline start.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectActivationRequest"
              },
              "example": {
                "validate": true,
                "validateOptions": {
                  "pipelineIds": []
                },
                "stage": true,
                "stagingOptions": {
                  "type": "INCREMENTAL_COMMIT"
                },
                "activate": true,
                "activationOptions": {
                  "forced": false,
                  "queueTimeoutInMinutes": 4,
                  "stopRequestTimeoutInMinutes": 4,
                  "tableCaptureTimeoutInMinutes": 8
                },
                "startPipelines": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Project activation or staging initiated successfully.",
            "headers": {
              "Location": {
                "description": "URI to monitor the activation or staging status.",
                "style": "simple",
                "schema": {
                  "type": "string"
                },
                "example": "/projects/project-123/staging/status"
              }
            }
          },
          "400": {
            "description": "Invalid request payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - One or more pipelines pre-checks failed activation readiness validation\n(staging, Metabase, user database, table mapping, or dataset). Issues are grouped by\npipeline ID in the `errors` property; staging is not committed.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "One or more pipelines failed activation readiness validation",
                  "instance": "/v1/integration/continuous/projects/{projectId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-ACT-0009",
                    "errors": {
                      "pipeline-1": [
                        {
                          "code": "DI-ADAPTER-DFL-0029",
                          "message": "Staging must be configured for the target connection before table mappings can be configured"
                        }
                      ],
                      "pipeline-2": [
                        {
                          "code": "DI-ADAPTER-DFL-0030",
                          "message": "Metabase must be configured for the required connection before table mappings can be configured"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Unexpected server error during activation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-ACT-0006"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/staging/status": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get project staging status",
        "description": "Retrieves the staging status of a project. If the project is active, the response includes the redirect URL in the Location header\nwhile also returning the current staging status in the response body. This allows clients to handle the redirect manually while\nstill receiving the staging status.\n\n**Process Overview:**\n- This endpoint checks the current staging status of the specified project.\n- If the project is active, the response includes the redirect URL in the Location header.\n- Otherwise, it returns the current staging status.\n\n**Key Features:**\n- Enables users to monitor the staging progress of a project.\n- Provides both the staging status and the redirect URL for active projects.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectStagingStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project for which staging status has to be retrieved.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "responses": {
          "200": {
            "description": "Staging status retrieved successfully.",
            "headers": {
              "Location": {
                "description": "Redirect URL to the project alerts endpoint if the project is active.",
                "style": "simple",
                "schema": {
                  "type": "string"
                },
                "example": "/projects/project-123/alerts"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectStagingStatusResponse"
                },
                "example": {
                  "projectId": "project-123",
                  "validation": {
                    "status": "OPEN",
                    "message": "string",
                    "completePercentage": 0,
                    "result": {
                      "severityLevel": "VALID",
                      "message": "string",
                      "warning": 0,
                      "incomplete": 0,
                      "error": 0,
                      "fatal": 0,
                      "total": 0
                    },
                    "lastUpdated": "2025-10-01T12:00:00Z"
                  },
                  "staging": {
                    "status": "OPEN",
                    "committed": true,
                    "message": "string",
                    "result": {
                      "severityLevel": "VALID",
                      "message": "string",
                      "warning": 0,
                      "incomplete": 0,
                      "error": 0,
                      "fatal": 0,
                      "total": 0
                    },
                    "lastUpdated": "2025-10-01T12:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/staging/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/staging/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/staging/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/projects/{projectId}/staging/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected server error during status retrieval.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/staging/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/status": {
      "get": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Get project status",
        "description": "Retrieves the status of all pipelines within a specified project. If a pipelineId is supplied the scope is narrowed\nto that pipeline. Optionally include detailed table statistics.\n\nProcess Overview:\n- Validate the caller has view permission.\n- Fetch project and pipelines; optionally filter.\n- Optionally enrich with table detail if requested.\n\nKey Features:\n- Lightweight by default (table details off).\n- Supports targeted lookup via pipelineId.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": " Unique identifier of the pipeline within the project, if you want status for a specific pipeline.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "includeTableDetails",
            "in": "query",
            "description": "Include detailed table status information. If not provided, defaults to false.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectPageResponse"
                },
                "example": {
                  "name": "string",
                  "agentId": "string",
                  "virtualId": "string",
                  "projectId": "string",
                  "changeStatus": "UP_TO_DATE",
                  "generatedAt": "string",
                  "serverVersions": [
                    {
                      "server": "string",
                      "committedVersion": 0,
                      "deployedVersion": 0
                    }
                  ],
                  "projectStatus": {
                    "overallStatus": "OK",
                    "runtimeServerStatus": "OK",
                    "replicationStatus": "OK",
                    "logReaderStatus": "OK",
                    "captureStatus": "OK"
                  },
                  "pipelines": [
                    {
                      "name": "string",
                      "pipelineType": "SYNCHRONIZE",
                      "runtimeServerStatus": "",
                      "replicationStatus": "",
                      "captureStatus": "",
                      "logReaderStatus": "",
                      "overallStatus": "",
                      "currentPhase": "UNKNOWN",
                      "startedAt": "string",
                      "backlog": {
                        "rows": 0,
                        "transactions": 0,
                        "reportedAt": "string"
                      },
                      "stats": {
                        "retrieved": {
                          "bytes": 0,
                          "rows": 0,
                          "skippedRows": 0,
                          "transactions": 0,
                          "reportedAt": "string"
                        },
                        "sent": {
                          "bytes": 0,
                          "rows": 0,
                          "skippedRows": 0,
                          "transactions": 0,
                          "reportedAt": "string"
                        },
                        "applied": {
                          "bytes": 0,
                          "rows": 0,
                          "skippedRows": 0,
                          "transactions": 0,
                          "reportedAt": "string"
                        },
                        "averageLatency": {
                          "backlog": 0,
                          "capture": 0,
                          "replication": 0,
                          "total": 0,
                          "updatedAt": "string"
                        },
                        "backlogLatency": 0,
                        "captureLatency": 0,
                        "replicationLatency": 0,
                        "totalLatency": 0,
                        "statisticEstimationWindow": "string"
                      },
                      "tableLevelStats": [
                        {
                          "stats": {
                            "applied": {
                              "bytes": 0,
                              "transactions": 0,
                              "recordCount": 0,
                              "stagedRecordCount": 0,
                              "insertRecordCount": 0,
                              "updateRecordCount": 0,
                              "deleteRecordCount": 0,
                              "skippedRecordBytes": 0,
                              "skippedRecordCount": 0,
                              "skippedInsertRecordCount": 0,
                              "skippedUpdateRecordCount": 0,
                              "skippedDeleteRecordCount": 0
                            },
                            "retrieved": {
                              "bytes": 0,
                              "transactions": 0,
                              "recordCount": 0,
                              "stagedRecordCount": 0,
                              "insertRecordCount": 0,
                              "updateRecordCount": 0,
                              "deleteRecordCount": 0,
                              "skippedRecordBytes": 0,
                              "skippedRecordCount": 0,
                              "skippedInsertRecordCount": 0,
                              "skippedUpdateRecordCount": 0,
                              "skippedDeleteRecordCount": 0
                            },
                            "sent": {
                              "bytes": 0,
                              "transactions": 0,
                              "recordCount": 0,
                              "stagedRecordCount": 0,
                              "insertRecordCount": 0,
                              "updateRecordCount": 0,
                              "deleteRecordCount": 0,
                              "skippedRecordBytes": 0,
                              "skippedRecordCount": 0,
                              "skippedInsertRecordCount": 0,
                              "skippedUpdateRecordCount": 0,
                              "skippedDeleteRecordCount": 0
                            }
                          },
                          "source": {
                            "database": "string",
                            "schema": "string",
                            "table": "string"
                          },
                          "target": {
                            "database": "string",
                            "schema": "string",
                            "table": "string"
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid query parameters\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No status found for the given project or pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve project status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/alerts": {
      "get": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Get project alerts",
        "description": "Fetches alerts for a specified project, with optional filtering by server name and severity level.\n\nProcess Overview:\n- Validate permission.\n- Fetch alert stream for project.\n- Apply optional serverName & level filters.\n- Enforce limit bounds (1..5000).\n\nKey Features:\n- Supports operational triage & dashboards.\n- Level filter aligns with standard logging levels.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectAlerts",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "serverName",
            "in": "query",
            "description": "Filter alerts by runtime server name. If not provided, alerts from all servers will be returned.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "server-1"
          },
          {
            "name": "level",
            "in": "query",
            "description": "Filter alerts by severity level.\nIf not provided, alerts of all levels will be returned.\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "OFF",
                "FATAL",
                "ERROR",
                "WARN",
                "INFO",
                "DEBUG",
                "TRACE",
                "ALL"
              ]
            },
            "example": "INFO"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of alerts to return. Must be a positive integer.\nDefaults to 500 if not provided.\n",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 5000,
              "minimum": 1
            },
            "example": 500
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project alerts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectAlertResponse"
                },
                "example": [
                  {
                    "runtimeServer": "server-1",
                    "pipeline": "my-db2i-to-kafka",
                    "level": "INFO",
                    "message": "Replication Kernel is shutting down",
                    "generatedAt": "2023-10-05T14:48:00Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid query parameters\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/alerts",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/alerts",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/alerts",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No alerts found for the given project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/alerts",
                  "properties": {
                    "errorCode": "DI-ADAPTER-ALT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Validation failed due to one of the following reasons:\n- Invalid query parameters (e.g., invalid 'level' value)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/alerts",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve project alerts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/alerts",
                  "properties": {
                    "errorCode": "DI-ADAPTER-ALT-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/pipelines/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Trigger start/stop actions for pipelines",
        "description": "Submits an asynchronous lifecycle action (START or STOP) for one or more continuous replication pipelines in a project. A 202 Accepted\nresponse indicates the request was validated and dispatched (not that execution is complete). The response body contains a status field\n(SUBMITTED or FAILED) and the Location header points to the alerts endpoint for monitoring.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::operate` permission.\n- Interpret request: (a) pipelines omitted/empty => target all pipelines in latest deployed snapshot; (b) pipelines provided => forward as-is.\n- If targeting all, fetch latest deployed snapshot and ensure at least one pipeline is available; fail otherwise.\n- If action = START, optionally treat resumeRequest=true as warm/resume start; if STOP, ignore resumeRequest.\n- Dispatch start or stop request through the portal client.\n- Build 202 response with body status (SUBMITTED if dispatch succeeded, FAILED if an internal exception occurred) and Location header to alerts.\n\nKey Features:\n- Bulk or targeted pipeline control (omit list for ALL, supply list for specific pipelines).\n- Warm/resume semantics for START via resumeRequest flag.\n- Uniform 202 response; body-level status differentiates dispatch success vs failure.\n- Immediate monitoring path via Location header (/projects/{projectId}/alerts) for a successfully submitted request.\n- Idempotent friendly: client can safely retry on FAILED since execution had not been confirmed.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerPipelines",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project whose pipelines should be acted upon.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Action request: START or STOP plus optional pipelines list (omit/empty = all) and optional resumeRequest flag.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerContinuousPipelinesRequest"
              },
              "examples": {
                "StartSelectedWarmResume": {
                  "summary": "Resume start of selected pipelines",
                  "description": "StartSelectedWarmResume",
                  "value": {
                    "pipelines": [
                      "orders",
                      "inventory"
                    ],
                    "action": "START",
                    "resumeRequest": true
                  }
                },
                "StartAllPipelines": {
                  "summary": "Start all pipelines (pipelines omitted)",
                  "description": "StartAllPipelines",
                  "value": {
                    "action": "START"
                  }
                },
                "StopSpecificPipelines": {
                  "summary": "Stop two pipelines by name",
                  "description": "StopSpecificPipelines",
                  "value": {
                    "pipelines": [
                      "orders",
                      "inventory"
                    ],
                    "action": "STOP"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Body status field indicates SUBMITTED or FAILED; If the request is properly submitted, Location header points to alerts endpoint.",
            "headers": {
              "Location": {
                "description": "URL of the project alerts endpoint for monitoring post-trigger alerts",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "request START submitted",
                  "status": "SUBMITTED"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or pipelines not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PIT-0003"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Trigger start/stop actions for specified log reader",
        "description": "Submits an asynchronous lifecycle action (START, STOP) for log reader associated with pipeline within the specified project. A 202 Accepted\nresponse indicates the request was validated and dispatched (not that execution is complete). The response body contains a status field\n(SUBMITTED or FAILED) and the Location header points to the alerts endpoint for monitoring.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::operate` permission.\n- Validate that at least logReader or pipeline is specified in the request.\n- Dispatch start or stop request through the portal client.\n- Build 202 response with body status (SUBMITTED if dispatch succeeded, FAILED if an internal exception occurred) and Location header to alerts.\n\nKey Features:\n- Targeted log reader control (specify logReader and associating pipeline).\n- Uniform 202 response; body-level status differentiates dispatch success vs failure.\n- Immediate monitoring path via Location header (/projects/{projectId}/alerts) for a successfully submitted request.\n- Idempotent friendly: client can safely retry on FAILED since execution had not been confirmed.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerLogReader",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project whose log readers should be acted upon.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Action request: START, STOP, or LOG plus log reader, pipeline, connection names, and optional start options.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerLogReaderRequest"
              },
              "examples": {
                "StartLogReaderWithWarmStart": {
                  "summary": "Start a log reader with warm start options",
                  "description": "StartLogReaderWithWarmStart",
                  "value": {
                    "logReader": "logreader-1",
                    "pipeline": "orders",
                    "action": "START",
                    "startOptions": {
                      "warmStart": true
                    }
                  }
                },
                "StartLogReaderWithCurrentReceiverLastSequence": {
                  "summary": "Start a log reader with current receiver and last sequence",
                  "description": "StartLogReaderWithCurrentReceiverLastSequence",
                  "value": {
                    "logReader": "logreader-1",
                    "pipeline": "orders",
                    "action": "START",
                    "startOptions": {
                      "warmStart": true,
                      "receiverType": "CURRENT",
                      "sequenceType": "LAST"
                    }
                  }
                },
                "StartLogReaderWithSpecificReceiverAndSequenceOffsets": {
                  "summary": "Start a log reader from specified receiver and sequence offset",
                  "description": "StartLogReaderWithSpecificReceiverAndSequenceOffsets",
                  "value": {
                    "logReader": "logreader-1",
                    "pipeline": "orders",
                    "action": "START",
                    "startOptions": {
                      "warmStart": true,
                      "receiverType": "SPECIFY",
                      "receiverOffset": 123,
                      "sequenceType": "SPECIFY",
                      "sequenceOffset": 456
                    }
                  }
                },
                "StopLogReader": {
                  "summary": "Stop a log reader",
                  "description": "StopLogReader",
                  "value": {
                    "logReader": "logreader-1",
                    "pipeline": "orders",
                    "action": "STOP"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Body status field indicates SUBMITTED or FAILED; If the request is properly submitted, Location header points to alerts endpoint.",
            "headers": {
              "Location": {
                "description": "URL of the project alerts endpoint for monitoring post-trigger alerts",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "request START submitted",
                  "status": "SUBMITTED"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project, log reader, or pipeline not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Validation failed due to one of the following reasons:\n- For Start Action, the start options are not defined\n- If warm start is not desired, the receiver and sequence details are not defined\n- If the receiver type is `SPECIFY`, `receiverOffset` is not defined\n- If the sequence type is `SPECIFY`, `sequenceOffset` is not defined\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/logreaders/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-CST-0004"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/capture/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Trigger start/stop actions for capture",
        "description": "Submits an asynchronous lifecycle action (START or STOP) for capture operations on all or specified table identifiers in a pipeline. A 202 Accepted\nresponse indicates the request was validated and dispatched (not that execution is complete). The response body contains a status field\n(SUBMITTED or FAILED) and the Location header points to the alerts endpoint for monitoring.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::operate` permission.\n- If table identifiers omitted/empty, action applies to all table identifiers in the pipeline.\n- Dispatch start or stop request through the portal client.\n- Build 202 response with body status (SUBMITTED if dispatch succeeded, FAILED if an internal exception occurred) and Location header to alerts.\n\nKey Features:\n- Bulk or targeted capture control (omit table identifiers for ALL, supply list for specific table identifiers).\n- Uniform 202 response; body-level status differentiates dispatch success vs failure.\n- Immediate monitoring path via Location header (/projects/{projectId}/alerts) for a successfully submitted request.\n- Idempotent friendly: client can safely retry on FAILED since execution had not been confirmed.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerCapture",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project whose capture should be acted upon.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Action request: START or STOP plus pipeline name and optional table identifiers list.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerCaptureRequest"
              },
              "examples": {
                "StartCaptureOnTables": {
                  "summary": "Start capture on specific table identifiers",
                  "description": "StartCaptureOnTables",
                  "value": {
                    "pipeline": "orders",
                    "tables": [
                      {
                        "database": "sales_db",
                        "schema": "public",
                        "table": "orders"
                      },
                      {
                        "database": "sales_db",
                        "schema": "public",
                        "table": "customers"
                      }
                    ],
                    "action": "START"
                  }
                },
                "StopCaptureAllTables": {
                  "summary": "Stop capture on all table identifiers (table identifiers omitted)",
                  "description": "StopCaptureAllTables",
                  "value": {
                    "pipeline": "orders",
                    "action": "STOP"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Body status field indicates SUBMITTED or FAILED; If the request is properly submitted, Location header points to alerts endpoint.",
            "headers": {
              "Location": {
                "description": "URL of the project alerts endpoint for monitoring post-trigger alerts",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "request START submitted",
                  "status": "SUBMITTED"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/capture/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/capture/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/capture/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or pipeline not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/capture/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/capture/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-CPT-0006"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/engines/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Trigger start/stop actions for runtime engines",
        "description": "Submits an asynchronous lifecycle action (START or STOP) for one or more continuous replication runtime engines in a project. A 202 Accepted\nresponse indicates the request was validated and dispatched (not that execution is complete). The response body contains a status field\n(SUBMITTED or FAILED) and the Location header points to the alerts endpoint for monitoring.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::operate` permission.\n- If engines omitted/empty, action applies to all engines in the project.\n- Dispatch start or stop request through the portal client.\n- Build 202 response with body status (SUBMITTED if dispatch succeeded, FAILED if an internal exception occurred) and Location header to alerts.\n\nKey Features:\n- Bulk or targeted engine control (omit list for ALL, supply list for specific engines).\n- Uniform 202 response; body-level status differentiates dispatch success vs failure.\n- Immediate monitoring path via Location header (/projects/{projectId}/alerts) for a successfully submitted request.\n- Idempotent friendly: client can safely retry on FAILED since execution had not been confirmed.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerRuntimeEngines",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project whose runtime engines should be acted upon.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Action request: START or STOP plus optional engines list (omit/empty = all).",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerEnginesRequest"
              },
              "examples": {
                "StartEngines": {
                  "summary": "Start specific engines",
                  "description": "StartEngines",
                  "value": {
                    "engines": [
                      "engine-1",
                      "engine-2"
                    ],
                    "action": "START"
                  }
                },
                "StopAllEngines": {
                  "summary": "Stop all engines (engines omitted)",
                  "description": "StopAllEngines",
                  "value": {
                    "action": "STOP"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Body status field indicates SUBMITTED or FAILED; If the request is properly submitted, Location header points to alerts endpoint.",
            "headers": {
              "Location": {
                "description": "URL of the project alerts endpoint for monitoring post-trigger alerts",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "request START submitted",
                  "status": "SUBMITTED"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/engines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/engines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/engines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or engines not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/engines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/engines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-RTT-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/backlog/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Trigger clear operation for backlog rows",
        "description": "Submits an asynchronous clear operation for backlog rows associated with a pipeline in a project. A 202 Accepted\nresponse indicates the request was validated and dispatched (not that execution is complete). The response body contains a status field\n(SUBMITTED or FAILED) and the Location header points to the alerts endpoint for monitoring.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::operate` permission.\n- Validate that action is CLEAR and pipeline is specified.\n- If `forced` is true, forcibly clear all backlog rows (may result in data loss for unreplicated rows).\n- Dispatch clear request through the portal client.\n- Build 202 response with body status (SUBMITTED if dispatch succeeded, FAILED if an internal exception occurred) and Location header to alerts.\n\nKey Features:\n- Targeted backlog clear operation for a specific pipeline.\n- Forced clear option for data loss scenarios.\n- Uniform 202 response; body-level status differentiates dispatch success vs failure.\n- Immediate monitoring path via Location header (/projects/{projectId}/alerts) for a successfully submitted request.\n- Idempotent friendly: client can safely retry on FAILED since execution had not been confirmed.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerBacklogRows",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project whose backlog rows should be cleared.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Action request: CLEAR plus pipeline name and forced flag.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerBacklogRowsRequest"
              },
              "examples": {
                "ClearBacklogForced": {
                  "summary": "Clear backlog rows for a pipeline with forced flag",
                  "description": "ClearBacklogForced",
                  "value": {
                    "pipeline": "orders",
                    "forced": true,
                    "action": "CLEAR"
                  }
                },
                "ClearBacklogNonForced": {
                  "summary": "Clear backlog rows for a pipeline without forced flag",
                  "description": "ClearBacklogNonForced",
                  "value": {
                    "pipeline": "orders",
                    "action": "CLEAR"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Body status field indicates SUBMITTED or FAILED; If the request is properly submitted, Location header points to alerts endpoint.",
            "headers": {
              "Location": {
                "description": "URL of the project alerts endpoint for monitoring post-trigger alerts",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "request CLEAR submitted",
                  "status": "SUBMITTED"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/backlog/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/backlog/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/backlog/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or pipeline not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/backlog/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/backlog/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-BLT-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Trigger diagnostic bundle operations",
        "description": "Submits a request to start or stop diagnostic bundles.\nStart Diagnostic bundle request collects and packages logs from various on-prem components for troubleshooting and diagnostic purposes.\nSupports START to initiate bundle creation and STOP to cancel ongoing bundles.\nA 202 Accepted response indicates the request was validated and dispatched.\n\nProcess Overview:\n- For START: Validate bundle name and optional description, then dispatch start request to initiate bundling.\n- For STOP: Dispatch stop request to cancel ongoing packaging.\n\nKey Features:\n- START action to initiate diagnostic bundle creation with optional description.\n- STOP action to cancel ongoing diagnostic bundle packaging.\n- Uniform 202 response indicating request acceptance.\n- Immediate monitoring path via Location header for tracking bundle status.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerDiagnosticBundles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project for diagnostic bundle operations.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Request to start or stop diagnostic bundle operations.\nFor START, provide `bundleName` and optional `description`. For STOP, provide `bundleName`.\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerDiagnosticBundleRequest"
              },
              "examples": {
                "StartDiagnosticBundle": {
                  "summary": "Start diagnostic bundle creation for a project",
                  "description": "StartDiagnosticBundle",
                  "value": {
                    "bundleName": "My-Diagnostic-Bundle",
                    "description": "Bundle created for troubleshooting purposes",
                    "action": "START"
                  }
                },
                "StopDiagnosticBundle": {
                  "summary": "Stop a diagnostic bundle by name",
                  "description": "StopDiagnosticBundle",
                  "value": {
                    "bundleName": "My-Diagnostic-Bundle",
                    "action": "STOP"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Location header points to status endpoint.",
            "headers": {
              "Location": {
                "description": "URL of the diagnostic bundle status endpoint for monitoring post-trigger status",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-SNP-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DBL-0003"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/status": {
      "get": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Get diagnostic bundle statuses",
        "description": "Retrieves the statuses of diagnostic bundles for the specified project.\nOptionally filter by a specific bundle ID or bundle name using the query parameters. Only one filter can be specified at a time.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::view` permission.\n- If no filters are provided, return statuses for all bundles in the project.\n- Provide comprehensive response with bundle details by categories (e.g., agent logs, runtime engine logs).\n\nKey Features:\n- Provides comprehensive bundle information with sizes in MB.\n- Supports monitoring of ongoing or completed diagnostic processes.\n- Optional filtering by bundle ID or bundle name for targeted queries.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getDiagnosticBundleStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "bundleId",
            "in": "query",
            "description": "Optional bundle ID to filter results",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "bundle-456"
          },
          {
            "name": "bundleName",
            "in": "query",
            "description": "Optional bundle name to filter results",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "My-Diagnostic-Bundle"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved diagnostic bundle statuses",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiagnosticBundleStatusResponse"
                },
                "example": [
                  {
                    "id": "69393e6ce4b0163b32332e00",
                    "bundleName": "My-Diagnostic-Bundle",
                    "status": "COMPLETED",
                    "createdAt": "2025-12-10T09:33:32Z",
                    "sizeInMB": 0.69,
                    "projectId": "6936e484e7e2955173352fea",
                    "projectName": "TestProject",
                    "agentId": "6d9c65d9-fa5f-441c-a70a-87d8616534c7",
                    "agentName": "Agent-1",
                    "description": "Bundle created for troubleshooting purposes",
                    "createdBy": "test@example.com",
                    "tenantId": "tenantId-12345",
                    "location": "/var/precisely/di/jobcontroller/bundles/My-Diagnostic-Bundle.zip",
                    "processName": "Task_1765359212264",
                    "logMetadata": {
                      "categories": [
                        {
                          "name": "Agent logs",
                          "sizeInMB": 5.69,
                          "status": "COMPLETED",
                          "items": [
                            {
                              "label": "Job controller logs",
                              "sizeInMB": 0.02,
                              "status": "COMPLETED"
                            },
                            {
                              "label": "Gateway logs",
                              "sizeInMB": 5.67,
                              "status": "COMPLETED"
                            }
                          ]
                        },
                        {
                          "name": "Runtime engine: Engine-1",
                          "sizeInMB": 5.43,
                          "status": "COMPLETED",
                          "server": {
                            "name": "Engine-1",
                            "host": "host.docker.internal",
                            "port": 51702,
                            "type": "OPEN",
                            "useSSLA": false,
                            "useSSLE": false
                          },
                          "items": [
                            {
                              "label": "Kernel logs",
                              "sizeInMB": 1.61,
                              "status": "COMPLETED"
                            },
                            {
                              "label": "Listener logs",
                              "sizeInMB": 3.68,
                              "status": "COMPLETED"
                            },
                            {
                              "label": "Project configuration files",
                              "sizeInMB": 0.14,
                              "status": "COMPLETED"
                            }
                          ]
                        }
                      ]
                    }
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DBL-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DBL-0006"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/{bundleId}": {
      "delete": {
        "tags": [
          "Monitor and Trigger Continuous Integration Projects"
        ],
        "summary": "Delete a diagnostic bundle",
        "description": "Deletes a diagnostic bundle by its ID for the specified project.\n\nProcess Overview:\n- Validate caller has `replication-pipeline::delete` permission when permission harmonization is enabled; otherwise, require `replication-pipeline::manage`.\n- Locate and delete the specified diagnostic bundle from on-prem components.\n- Delete associated metadata from monitoring service.\n\nKey Features:\n- Permanent deletion of diagnostic bundle and associated data.\n- Returns 204 No Content on successful deletion.\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteDiagnosticBundle",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "bundleId",
            "in": "path",
            "description": "Unique identifier of the diagnostic bundle to delete.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "bundle-456"
          }
        ],
        "responses": {
          "204": {
            "description": "No Content - Diagnostic bundle deleted successfully"
          },
          "400": {
            "description": "Bad Request - Invalid bundle ID format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid bundle ID",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/{bundleId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/{bundleId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/{bundleId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or bundle not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/{bundleId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DBL-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to delete diagnostic bundle",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/monitoring/projects/{projectId}/diagnostic-bundles/{bundleId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DBL-0007"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get paginated list of mainframe projects",
        "description": "Retrieves a paginated list of mainframe data integration projects with optional filtering and sorting.\n\n**Features:**\n- Pagination support with configurable page size and number\n- Optional pipeline details inclusion\n- Comprehensive sorting options\n\n**Supported Sort Properties:**\n- `name` - Project name\n- `projectType` - Project type (MAINFRAME_REPLICATION)\n- `createdAt` - Creation timestamp\n- `modifiedAt` - Last modification timestamp\n- `createdBy` - Creator user\n- `modifiedBy` - Last modifier user\n- `committedAt` - Last commit timestamp\n- `deployedAt` - Deployment timestamp\n- `committedBy` - User who committed\n- `deployedBy` - User who deployed\n\n**Use Cases:**\n- Browse available mainframe projects for dashboard displays\n- Filter mainframe projects by various criteria\n- Search and sort mainframe projects\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframeProjects",
        "parameters": [
          {
            "name": "includePipelines",
            "in": "query",
            "description": "Flag to determine if pipeline details should be included with project details",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "page",
            "in": "query",
            "description": "Zero-based page index (0..N).\n\nValidation Rules:\n- Must be greater than or equal to 0\n- Default: 0 (first page)\n\nExamples:\n- page=0 (first page)\n- page=1 (second page)\n- page=5 (sixth page)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "maximum": 10000,
              "minimum": 0
            },
            "example": 0
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of items to return per page.\n\nValidation Rules:\n- Must be between 1 and 100 (inclusive)\n- Default: 10 items per page\n- Values exceeding 100 will return validation error\n\nExamples:\n- size=10 (10 items per page)\n- size=50 (50 items per page)\n- size=100 (maximum allowed)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "minimum": 1
            },
            "example": 50
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting criteria with flexible format options.\nMultiple sort parameters supported for multi-level sorting.\n\nDefault: name,asc (sort by name in ascending order)\n\nSort Format Options:\n- sort=property (e.g., sort=name - defaults to ascending)\n- sort=property,direction (e.g., sort=name,asc or sort=createdAt,desc)\n- sort=property,asc,ignoreCase (for case-insensitive sorting)\n\nMulti-level Sorting:\n- sort=property1,asc&sort=property2,desc (multiple sort parameters)\n- First sort criteria takes priority, subsequent ones used for tie-breaking\n\nNote: Supported sort properties vary by endpoint. Check the specific endpoint\ndocumentation for the list of valid sort properties for that resource type.\n\nExamples:\n- sort=name,asc (sort by name ascending)\n- sort=createdAt,desc (sort by creation date descending)\n- sort=type,asc&sort=name,asc (multi-level sort)\n- sort=deployedAt,desc,ignoreCase (case-insensitive sort)\n",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "default": "name,asc"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved mainframe project list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectPageResponse"
                },
                "example": {
                  "content": [
                    {
                      "id": "project-123",
                      "name": "Mainframe Data Integration Project",
                      "description": "Mainframe integration project for data synchronization",
                      "projectType": "MAINFRAME_REPLICATION",
                      "createdAt": "2025-08-24T14:15:22Z",
                      "createdBy": "john.doe@example.com",
                      "modifiedAt": "2025-08-25T10:30:15Z",
                      "modifiedBy": "jane.smith@example.com",
                      "committedAt": "2025-08-25T11:45:30Z",
                      "committedBy": "jane.smith@example.com",
                      "deployedAt": "2025-08-25T12:00:00Z",
                      "deployedBy": "admin@precisely.com",
                      "parameters": {
                        "additionalProp1": "string",
                        "additionalProp2": "string"
                      },
                      "pipelines": [
                        {
                          "id": "pipeline-456",
                          "name": "Mainframe Data Synchronization",
                          "description": "Synchronizes mainframe data to Kafka",
                          "pipelineType": "REPLICATE",
                          "projectId": "project-123",
                          "source": {
                            "id": "conn-src-uuid",
                            "name": "Source Connection",
                            "type": "VSAM"
                          },
                          "target": {
                            "id": "conn-tgt-uuid",
                            "name": "Target Connection",
                            "type": "KAFKA"
                          }
                        }
                      ]
                    }
                  ],
                  "pageNumber": 0,
                  "pageSize": 20,
                  "numberOfElements": 15,
                  "totalElements": 157,
                  "totalPages": 8,
                  "first": true,
                  "last": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid pagination parameters (page < 0, size < 1, size > 100)\n- Invalid sort parameters (unsupported sort property or direction)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request parameters are syntactically correct but semantically invalid:\n- Page size exceeds maximum allowed limit (100)\n- Sort property not supported for the resource type\n- Invalid sort direction specified\n- Malformed sort parameter format\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/mainframe/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Connect Portal service client errors\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get mainframe project by ID",
        "description": "Retrieves a specific mainframe data integration project by its unique identifier.\n\n**Features:**\n- Complete project information including metadata and configuration\n- Optional pipeline details inclusion\n- Project existence validation\n- Access control enforcement\n\n**Response Content:**\n- Project metadata (name, description, type, timestamps)\n- User information (creator, last modifier)\n- Optional pipeline details if requested\n\n**Use Cases:**\n- View detailed mainframe project information\n- Check mainframe project configuration and status\n- Access project-specific pipeline details\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframeProjectById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the mainframe project to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "includePipelines",
            "in": "query",
            "description": "Flag to determine if pipeline details should be included with project details",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved mainframe project details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponse"
                },
                "example": {
                  "id": "project-123",
                  "name": "Mainframe Data Integration Project",
                  "description": "Mainframe integration project for data synchronization",
                  "projectType": "MAINFRAME_REPLICATION",
                  "createdAt": "2025-08-24T14:15:22Z",
                  "createdBy": "john.doe@example.com",
                  "modifiedAt": "2025-08-25T10:30:15Z",
                  "modifiedBy": "jane.smith@example.com",
                  "committedAt": "2025-08-25T11:45:30Z",
                  "committedBy": "jane.smith@example.com",
                  "deployedAt": "2025-08-25T12:00:00Z",
                  "deployedBy": "admin@precisely.com",
                  "parameters": {
                    "additionalProp1": "string",
                    "additionalProp2": "string"
                  },
                  "pipelines": [
                    {
                      "id": "pipeline-456",
                      "name": "Mainframe Data Synchronization",
                      "description": "Synchronizes mainframe data to Kafka",
                      "pipelineType": "REPLICATE",
                      "projectId": "project-123",
                      "source": {
                        "id": "conn-src-uuid",
                        "name": "Source Connection",
                        "type": "VSAM"
                      },
                      "target": {
                        "id": "conn-tgt-uuid",
                        "name": "Target Connection",
                        "type": "KAFKA"
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID format\n- Missing required parameters\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project with the specified ID does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Connect Portal service client errors\n- Service unavailability\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get mainframe pipelines by project ID",
        "description": "Retrieves all mainframe data integration pipelines associated with a specific project with pagination and sorting.\n\n**Features:**\n- Pagination support with configurable page size and number\n- Pipeline sorting by multiple properties\n- Optional section-based data loading for pipeline details\n- Project-specific pipeline filtering\n\n**Supported Sort Properties:**\n- `name` - Pipeline name\n- `internalName` - Internal pipeline name\n- `pipelineType` - Pipeline type\n- `replicationType` - Replication type\n- `pipelineState` - Pipeline state\n- `committedAt` - Commit timestamp\n- `deployedAt` - Deploy timestamp\n- `validatedAt` - Validation timestamp\n- `createdBy` - Creator user\n- `modifiedBy` - Last modifier user\n- `deployedBy` - Deployer user\n\n**Optional Data Loading:**\n- `sections` - Include specific pipeline sections in the response (e.g., DATA_CONNECTION_SECTION, SUMMARY_SECTION)\n\n**Use Cases:**\n- Browse mainframe pipelines within a specific project\n- Monitor pipeline status and configuration\n- Access pipeline details for management operations\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframePipelines",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "sections",
            "in": "query",
            "description": "Set of pipeline sections to include in the response.\n\n**Allowed values:**\n- [] (empty): No sections selected\n- Any combination of section enums except ALL_SECTIONS\n- [ALL_SECTIONS] alone\n",
            "required": false,
            "schema": {
              "type": "array",
              "enum": [
                "DATA_CONNECTION_SECTION",
                "SOURCE_DATA_SECTION",
                "REPLICATION_FIELDS_SECTION",
                "TARGET_DATA_SECTION",
                "MAPPINGS_SECTION",
                "SUMMARY_SECTION",
                "ALL_SECTIONS"
              ],
              "items": {
                "type": "string",
                "description": "Sections of the mainframe pipeline for API operations.",
                "enum": [
                  "DATA_CONNECTION_SECTION",
                  "SOURCE_DATA_SECTION",
                  "REPLICATION_FIELDS_SECTION",
                  "TARGET_DATA_SECTION",
                  "MAPPINGS_SECTION",
                  "SUMMARY_SECTION",
                  "ALL_SECTIONS"
                ]
              }
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Zero-based page index (0..N).\n\nValidation Rules:\n- Must be greater than or equal to 0\n- Default: 0 (first page)\n\nExamples:\n- page=0 (first page)\n- page=1 (second page)\n- page=5 (sixth page)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "maximum": 10000,
              "minimum": 0
            },
            "example": 0
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of items to return per page.\n\nValidation Rules:\n- Must be between 1 and 100 (inclusive)\n- Default: 10 items per page\n- Values exceeding 100 will return validation error\n\nExamples:\n- size=10 (10 items per page)\n- size=50 (50 items per page)\n- size=100 (maximum allowed)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "minimum": 1
            },
            "example": 50
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting criteria with flexible format options.\nMultiple sort parameters supported for multi-level sorting.\n\nDefault: name,asc (sort by name in ascending order)\n\nSort Format Options:\n- sort=property (e.g., sort=name - defaults to ascending)\n- sort=property,direction (e.g., sort=name,asc or sort=createdAt,desc)\n- sort=property,asc,ignoreCase (for case-insensitive sorting)\n\nMulti-level Sorting:\n- sort=property1,asc&sort=property2,desc (multiple sort parameters)\n- First sort criteria takes priority, subsequent ones used for tie-breaking\n\nNote: Supported sort properties vary by endpoint. Check the specific endpoint\ndocumentation for the list of valid sort properties for that resource type.\n\nExamples:\n- sort=name,asc (sort by name ascending)\n- sort=createdAt,desc (sort by creation date descending)\n- sort=type,asc&sort=name,asc (multi-level sort)\n- sort=deployedAt,desc,ignoreCase (case-insensitive sort)\n",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "default": "name,asc"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved mainframe pipelines for the project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelinePageResponse"
                },
                "example": {
                  "content": [
                    {
                      "id": "mainframe-pipeline-001",
                      "name": "CustomerMainframePipeline",
                      "internalName": "customer_mainframe_pipeline_internal",
                      "agents": [
                        {
                          "type": "APPLY_ENGINE",
                          "name": "agent-1"
                        }
                      ],
                      "description": "Synchronizes customer data from mainframe to cloud.",
                      "pipelineType": "ENGINE_KAFKA",
                      "replicationType": "ENGINE",
                      "runtimeEngineId": "runtime-engine-123",
                      "entryFileId": "entry-file-abc",
                      "configJsonFileId": "config-json-xyz",
                      "projectId": "project-789",
                      "autoStart": true,
                      "stagePipelineConfiguration": true,
                      "activatePipelineConfiguration": true,
                      "pipelineState": "DEPLOYED_WITH_SUCCESS",
                      "sourceDataConnectionId": "source-conn-001",
                      "targetDataConnectionId": "target-conn-002",
                      "selectedResources": {
                        "source": {
                          "topics": [
                            "topicA",
                            "topicB"
                          ]
                        },
                        "target": {
                          "schemasAndTables": [
                            {
                              "schema": "target-schema",
                              "tables": [
                                "target-table1",
                                "target-table2"
                              ]
                            }
                          ]
                        }
                      },
                      "cdcFieldMappings": {
                        "sourceMessageProducerFormat": "custom",
                        "fieldMappings": [
                          {
                            "sourceField": "sv_sending_table",
                            "targetField": "Dataset name",
                            "valueMappings": {
                              "additionalProp1": "string",
                              "additionalProp2": "string",
                              "additionalProp3": "string"
                            }
                          }
                        ]
                      },
                      "createdBy": "john.doe@example.com",
                      "modifiedBy": "jane.smith@example.com",
                      "deployedBy": "carol.white@example.com",
                      "committedAt": "2025-11-06T09:17:47Z",
                      "deployedAt": "2025-11-06T10:00:00Z",
                      "validatedAt": "2025-11-06T10:30:00Z",
                      "tableMappings": [
                        {
                          "sourceSchema": "source-schema",
                          "sourceTable": "source-table1",
                          "targetSchema": "target-schema",
                          "targetTable": "target-table1",
                          "sourceSchemaCase": "UPPER_CASE",
                          "sourceTableCase": "LOWER_CASE",
                          "sourceColumnCase": "TOGGLE_CASE"
                        },
                        {
                          "sourceSchema": "source-schema",
                          "sourceTable": "source-table2",
                          "targetSchema": "target-schema",
                          "targetTable": "target-table2",
                          "sourceSchemaCase": "UPPER_CASE",
                          "sourceTableCase": "LOWER_CASE",
                          "sourceColumnCase": "TOGGLE_CASE"
                        }
                      ]
                    }
                  ],
                  "pageNumber": 0,
                  "pageSize": 20,
                  "numberOfElements": 15,
                  "totalElements": 157,
                  "totalPages": 8,
                  "first": true,
                  "last": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid pagination parameters, sorting criteria, or section values",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Insufficient permissions to access pipeline data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project with the specified ID does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request parameters are syntactically correct but semantically invalid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve pipelines",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get mainframe pipeline by ID",
        "description": "Retrieves a specific mainframe data integration pipeline by its unique identifier.\n\n**Features:**\n- Complete pipeline information including metadata and configuration\n- Optional section-based data loading for granular details\n- Pipeline existence validation\n- Access control enforcement\n\n**Response Content:**\n- Pipeline metadata (name, description, type, timestamps)\n- User information (creator, last modifier, deployer)\n- Project association details\n- Optional section details if requested\n\n**Optional Data Loading:**\n- `sections` - Include specific pipeline sections in the response (e.g., DATA_CONNECTION_SECTION, SUMMARY_SECTION)\n\n**Use Cases:**\n- View detailed pipeline information\n- Check pipeline configuration and status\n- Access pipeline-specific section details\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframePipeline",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "sections",
            "in": "query",
            "description": "Set of pipeline sections to include in the response.\n\n**Allowed values:**\n- [] (empty): No sections selected\n- Any combination of section enums except ALL_SECTIONS\n- [ALL_SECTIONS] alone\n",
            "required": false,
            "schema": {
              "type": "array",
              "enum": [
                "DATA_CONNECTION_SECTION",
                "SOURCE_DATA_SECTION",
                "REPLICATION_FIELDS_SECTION",
                "TARGET_DATA_SECTION",
                "MAPPINGS_SECTION",
                "SUMMARY_SECTION",
                "ALL_SECTIONS"
              ],
              "items": {
                "type": "string",
                "description": "Sections of the mainframe pipeline for API operations.",
                "enum": [
                  "DATA_CONNECTION_SECTION",
                  "SOURCE_DATA_SECTION",
                  "REPLICATION_FIELDS_SECTION",
                  "TARGET_DATA_SECTION",
                  "MAPPINGS_SECTION",
                  "SUMMARY_SECTION",
                  "ALL_SECTIONS"
                ]
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved mainframe pipeline details",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineResponse"
                },
                "example": {
                  "id": "mainframe-pipeline-001",
                  "name": "CustomerMainframePipeline",
                  "internalName": "customer_mainframe_pipeline_internal",
                  "agents": [
                    {
                      "type": "APPLY_ENGINE",
                      "name": "agent-1"
                    }
                  ],
                  "description": "Synchronizes customer data from mainframe to cloud.",
                  "pipelineType": "ENGINE_KAFKA",
                  "replicationType": "ENGINE",
                  "runtimeEngineId": "runtime-engine-123",
                  "entryFileId": "entry-file-abc",
                  "configJsonFileId": "config-json-xyz",
                  "projectId": "project-789",
                  "autoStart": true,
                  "stagePipelineConfiguration": true,
                  "activatePipelineConfiguration": true,
                  "pipelineState": "DEPLOYED_WITH_SUCCESS",
                  "sourceDataConnectionId": "source-conn-001",
                  "targetDataConnectionId": "target-conn-002",
                  "selectedResources": {
                    "source": {
                      "topics": [
                        "topicA",
                        "topicB"
                      ]
                    },
                    "target": {
                      "schemasAndTables": [
                        {
                          "schema": "target-schema",
                          "tables": [
                            "target-table1",
                            "target-table2"
                          ]
                        }
                      ]
                    }
                  },
                  "cdcFieldMappings": {
                    "sourceMessageProducerFormat": "custom",
                    "fieldMappings": [
                      {
                        "sourceField": "sv_sending_table",
                        "targetField": "Dataset name",
                        "valueMappings": {
                          "additionalProp1": "string",
                          "additionalProp2": "string",
                          "additionalProp3": "string"
                        }
                      }
                    ]
                  },
                  "createdBy": "john.doe@example.com",
                  "modifiedBy": "jane.smith@example.com",
                  "deployedBy": "carol.white@example.com",
                  "committedAt": "2025-11-06T09:17:47Z",
                  "deployedAt": "2025-11-06T10:00:00Z",
                  "validatedAt": "2025-11-06T10:30:00Z",
                  "tableMappings": [
                    {
                      "sourceSchema": "source-schema",
                      "sourceTable": "source-table1",
                      "targetSchema": "target-schema",
                      "targetTable": "target-table1",
                      "sourceSchemaCase": "UPPER_CASE",
                      "sourceTableCase": "LOWER_CASE",
                      "sourceColumnCase": "TOGGLE_CASE"
                    },
                    {
                      "sourceSchema": "source-schema",
                      "sourceTable": "source-table2",
                      "targetSchema": "target-schema",
                      "targetTable": "target-table2",
                      "sourceSchemaCase": "UPPER_CASE",
                      "sourceTableCase": "LOWER_CASE",
                      "sourceColumnCase": "TOGGLE_CASE"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid pipeline ID format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Insufficient permissions to access pipeline data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline with the specified ID does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0002"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Delete a mainframe pipeline by ID",
        "description": "Deletes a mainframe pipeline by its ID within a project. Supports optional deletion of pipeline configuration only.\n\n**Process Overview:**\n- Validates that the project and pipeline exist and the user has permission to delete the pipeline.\n- If `configOnly` is true, deletes only the pipeline configuration from the Data Integrity Suite.\n- If `configOnly` is false (default), performs a full deletion including runtime components.\n\n**Configuration Only Deletion Behavior:**\nDelete pipeline configuration only. This action is not recommended.\nUse this option only when the runtime processes for this pipeline no longer exist. This action cannot be undone.\nExporting the pipeline before continuing is highly recommended.\n\nAfter the pipeline configuration is deleted from the Data Integrity Suite:\nManual cleanup of runtime processes will be needed.\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteMainframePipeline",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline to delete",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "configOnly",
            "in": "query",
            "description": "If true, deletes only the pipeline configuration",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Pipeline deleted successfully."
          },
          "400": {
            "description": "Invalid request payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Pipeline not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Unexpected server error during deletion.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0013"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/connection-compatibility": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get connection compatibility matrix for mainframe replication",
        "description": "Retrieves the connection compatibility matrix for mainframe replication, showing which source\nconnection types can replicate to which target connection types in mainframe scenarios.\n\n**Process Overview:**\n- Returns a list of source connection types with their compatible target types for mainframe replication\n- Optionally filter by specific source connection type\n- Results are filtered based on feature flags enabled for the current workspace\n- Supports sync and reverse sync (distributed to mainframe) scenarios\n\n**Key Features:**\n- Provides complete compatibility matrix for mainframe replication scenarios\n- Helps in planning mainframe data integration pipelines\n- Supports optional filtering by source connection type\n- Real-time compatibility based on workspace configuration and feature flags\n\n**Use Cases:**\n1. **Pipeline Planning:** Determine valid target connections for mainframe sources before creating pipeline\n2. **UI Dropdowns:** Populate target connection dropdowns based on selected mainframe source\n3. **Validation:** Verify if a proposed mainframe source-target combination is supported\n4. **Reverse Sync Planning:** Identify valid sources for replicating back to mainframe systems\n\n**Supported Connection Types:**\n- Mainframe Sources (Sync): VSAM, IMS, DB2ZOS\n- Mainframe Targets: ConnectKafka\n- Distributed Mainframe Sources (Reverse Sync): ConnectKafka\n- Distributed Mainframe Targets (Reverse Sync): DB2ZOS, DB2I\n- Local Content-Only Mode: NONE -> NONE\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getConnectionCompatibilityMatrix_1",
        "parameters": [
          {
            "name": "connectionType",
            "in": "query",
            "description": "Optional source connection type to filter compatibility results",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "VSAM",
                "IMS",
                "ConnectKafka",
                "DB2ZOS",
                "DB2I",
                "NONE"
              ]
            },
            "example": "ConnectKafka"
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved connection compatibility matrix",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionCompatibilityMatrixResponse"
                },
                "example": {
                  "compatibilityMatrix": [
                    {
                      "source": "VSAM",
                      "supportedTargets": [
                        "ConnectKafka"
                      ]
                    },
                    {
                      "source": "IMS",
                      "supportedTargets": [
                        "ConnectKafka"
                      ]
                    },
                    {
                      "source": "ConnectKafka",
                      "supportedTargets": [
                        "DB2ZOS",
                        "DB2I"
                      ]
                    },
                    {
                      "source": "DB2ZOS",
                      "supportedTargets": [
                        "ConnectKafka"
                      ]
                    },
                    {
                      "source": "NONE",
                      "supportedTargets": [
                        "NONE"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid connection type parameter",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid request parameter",
                  "instance": "/v1/integration/mainframe/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0002"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Source connection type not supported or user lacks permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Source connection type is not supported for compatibility check",
                  "instance": "/v1/integration/mainframe/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No compatible targets available for the specified source",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "No compatible target connections found for the specified source",
                  "instance": "/v1/integration/mainframe/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0003"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve compatibility matrix",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve connection compatibility matrix",
                  "instance": "/v1/integration/mainframe/connection-compatibility",
                  "properties": {
                    "errorCode": "DI-ADAPTER-COM-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/pipelines": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Create a new mainframe pipeline",
        "description": "Creates a new mainframe data integration pipeline in a mainframe project. If the pipeline is successfully created, the response includes the pipeline and project identifiers in the response body.\n\n**Process Overview:**\n- This endpoint validates the request and determines whether to create a sync or reverse sync pipeline based on the provided configuration.\n- For syncConfig: Validates connection types, runtime engine, and replication mode, then creates a sync pipeline.\n- For reverseSyncConfig: Validates connection types, then creates a reverse sync pipeline and associates connections.\n- Uses the supplied projectId when provided; otherwise resolves the project from projectName by validating/finding/creating the mainframe project.\n- For reverse sync operations, associates the connections with the created pipeline.\n- Returns project and pipeline IDs, and replication type in the response body.\n\n**Key Features:**\n- Enables users to create and configure mainframe data integration pipelines.\n- Supports both sync and reverse sync pipeline creation.\n- Returns identifiers and replication type for further operations.\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "buildMainframePipeline",
        "requestBody": {
          "description": "Pipeline creation request:\n- projectId: mainframe project ID (string, preferred)\n- projectName: mainframe project name (string, legacy fallback when projectId is omitted)\n- pipelineName: pipeline name (string, required)\n- description: pipeline description (string, required)\n- syncConfig: runtime engine name (object, optional)\n- reverseSyncConfig: source/target connection IDs (object, optional)\n- replicationSettings: source/target connection types, autoStart, replicationMode (object, required)\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateMainframePipelineRequest"
              },
              "examples": {
                "VSAM/IMS/DB2ZOS to Kafka (Sync)": {
                  "summary": "Mainframe source to Kafka target with syncConfig",
                  "description": "VSAM/IMS/DB2ZOS to Kafka (Sync)",
                  "value": {
                    "projectId": "project-123",
                    "projectName": "Mainframe-Project",
                    "pipelineName": "Mainframe-Sync-Pipeline",
                    "description": "Sync pipeline from VSAM to Kafka",
                    "syncConfig": {
                      "runTimeEngineName": "Engine1"
                    },
                    "replicationSettings": {
                      "sourceConnectionType": "VSAM",
                      "targetConnectionType": "KAFKA",
                      "autoStart": true,
                      "replicationMode": "HIGH_VOLUME"
                    }
                  }
                },
                "Kafka to DB2I/DB2ZOS (Reverse Sync)": {
                  "summary": "Kafka source to mainframe target with reverseSyncConfig",
                  "description": "Kafka to DB2I/DB2ZOS (Reverse Sync)",
                  "value": {
                    "projectId": "project-123",
                    "projectName": "Mainframe-Project",
                    "pipelineName": "Mainframe-ReverseSync-Pipeline",
                    "description": "Reverse sync pipeline from Kafka to Db2I",
                    "reverseSyncConfig": {
                      "sourceConnectionId": "conn-kafka-789",
                      "targetConnectionId": "conn-db2i-123"
                    },
                    "replicationSettings": {
                      "sourceConnectionType": "KAFKA",
                      "targetConnectionType": "DB2I",
                      "autoStart": false,
                      "replicationMode": "ADVANCED"
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Pipeline successfully created and configured",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateMainframePipelineResponse"
                },
                "example": {
                  "projectId": "data-integration-project-id-123",
                  "pipelineId": "customer-data-synchronization-pipeline-456",
                  "replicationType": "MAINFRAME_REPLICATION_TYPE_ENGINE"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project name format\n- Invalid pipeline name format\n- Source and target connections are incompatible for the specified pipeline type\n- Connection validation failures (connection not found, inactive, or misconfigured)\n- Unsupported data flow type for the given connection types\n- Business rule violations in pipeline configuration\n- Resource conflicts or constraints violations\n- Replication mode not supported for selected connection types\n- Runtime engine not found or invalid\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict - A resource with the same identifier already exists. This may occur in scenarios such as:\n- Pipeline with the specified name already exists within the project\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Pipeline Already Exists",
                  "status": 409,
                  "detail": "A pipeline with the name 'customer-data-synchronization-pipeline' already exists in project 'data-integration-project-id-123'.",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0005"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Request is syntactically correct but semantically invalid:\n- Pipeline configuration conflicts with existing pipeline in the same project\n- Source and target connections are incompatible for the specified pipeline type\n- invalid replication mode for selected connection types\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Project creation failure (ProjectUpsertFailedException)\n- Project retrieval failure (ProjectsRetrievalFailedException)\n- Pipeline creation failure (PipelineUpsertFailedException)\n- Connection association failure (ConnectionsAssociationWithPipelineFailedException)\n- Catalog asset retrieval failure (CatalogAssetRetrievalFailedException)\n- Connection service client errors when fetching connection details\n- Data Catalog service client errors when validating connections\n- Service unavailability\n- Connection service errors\n- Internal processing failures\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/pipelines",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0004"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/configuration": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Configure mainframe pipeline components",
        "description": "Configures source assets selection, target assets selection, and field mappings (transformation) for a mainframe pipeline.\n\n**Process Overview:**\n1. **Resource Validation** - Validates project and pipeline existence\n2. **Parallel Component Processing** - Processes each component configuration independently\n3. **Component Types Supported**:\n   - **Sources**: Source asset selection (e.g., topics)\n   - **Targets**: Target schema and table definitions\n   - **Transformation**: Field mapping and transformation criteria\n4. **Isolation & Fault Tolerance** - Component failures don't affect others\n5. **Consolidated Response** - Returns unified status after all processing\n\n**Key Features:**\n- All component configurations are optional\n- Parallel processing for optimal performance\n- Independent component execution (failure isolation)\n- Metrics per component for better observability\n- Component specific thread pool resource allocation\n- Comprehensive error reporting per component\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "configureMainframePipelineComponents",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Configuration details for mainframe pipeline components. All components are optional and processed independently in parallel.\n\n- **sources**: List of source topic identifiers.\n- **targets**: List of target schema and table definitions.\n- **transformation**: Field mapping criteria for transformation between source and target assets.\n\nEach component is processed with failure isolation and metrics tracking.\n\nIf any component fails, the response will indicate partial or failed status, but successful components will still be reported.\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframePipelineConfigurationRequest"
              },
              "example": {
                "sources": [
                  "sourceTopic1",
                  "sourceTopic2"
                ],
                "targets": [
                  {
                    "schema": "targetSchema1",
                    "tables": [
                      "targetTable1"
                    ]
                  },
                  {
                    "schema": "targetSchema2",
                    "tables": [
                      "targetTable2"
                    ]
                  }
                ],
                "transformation": {
                  "sourceMessageProducerFormat": "custom",
                  "fieldMappings": [
                    {
                      "sourceField": "sv_sending_table",
                      "targetField": "Dataset name"
                    }
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Pipeline components configured successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineConfigurationResponse"
                },
                "example": {
                  "requestId": "config-req-12345-abcde",
                  "overallStatus": "SUCCESS",
                  "executionTimeInMs": 45123,
                  "sources": {
                    "selectedSources": [
                      "sourceTopic1",
                      "sourceTopic2"
                    ],
                    "status": "SUCCESS"
                  },
                  "targets": {
                    "selectedTargets": [
                      {
                        "schema": "targetSchema1",
                        "tables": [
                          "targetTable1"
                        ]
                      },
                      {
                        "schema": "targetSchema2",
                        "tables": [
                          "targetTable2"
                        ]
                      }
                    ],
                    "status": "SUCCESS"
                  },
                  "transformation": {
                    "fieldMappings": [
                      {
                        "sourceField": "sv_sending_table",
                        "targetField": "Dataset name"
                      }
                    ],
                    "status": "SUCCESS"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid configuration request due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid component configuration parameters\n- Missing required configuration fields\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid configuration request",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0010"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project or pipeline not found",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Configuration conflicts or business rule violations:\n- Component configuration conflicts with existing pipeline settings\n- Invalid combination of component configurations\n- Resource capacity constraints exceeded\n- Invalid data connection types for specified components\n- Authentication failures with provided credentials\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Unprocessable Entity - Request is syntactically correct but semantically invalid",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Component processing failures:\n- Source Selection configuration failures\n- Transformation(field mapping) configuration failures\n- Target Selection configuration setup failures\n- Thread pool execution errors\n- Internal processing errors\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/continuous/projects/{projectId}/pipelines/{pipelineId}/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0010"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/mappings": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Configure table mappings for a mainframe pipeline",
        "description": "Configures source-to-target table mappings for a specified pipeline within a mainframe integration project.\n\n**Process Overview:**\n1. **Resource Validation** - Validates project and pipeline existence\n2. **Mapping Configuration** - Applies source-to-target table mappings, supporting RDBMS source to RDBMS target type mappings)\n3. **Customization** - Allows per-source customization (schema casing, table casing and column casing)\n5. **Validation & Persistence** - Validates and saves the mapping configuration\n\n**Use Cases:**\n- Define or update table mappings for a pipeline\n- Support advanced mapping scenarios (schema casing, table casing and column casing)\n- Integrate with RDBMS source to RDBMS target type mapping for a reverse-sync mainframe pipeline\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "configureMainframeTableMappings",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "The unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "The unique identifier of the pipeline to configure mappings for",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Mapping configuration payload defining source and target mappings, including per-source customization (schema casing, table casing and column casing)",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframeTableMappingRequest"
              },
              "example": {
                "mappings": [
                  {
                    "source": {
                      "schema": "sourceSchema",
                      "table": "sourceTable1",
                      "schemaCase": "MATCH_ORIGINAL_CASE",
                      "tableCase": "UPPER_CASE",
                      "columnCase": "LOWER_CASE"
                    },
                    "target": {
                      "schema": "targetSchema",
                      "table": "targetTable1"
                    }
                  },
                  {
                    "source": {
                      "schema": "sourceSchema",
                      "table": "sourceTable2",
                      "schemaCase": "MATCH_ORIGINAL_CASE",
                      "tableCase": "UPPER_CASE",
                      "columnCase": "LOWER_CASE"
                    },
                    "target": {
                      "schema": "targetSchema",
                      "table": "targetTable2"
                    }
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Table mappings configured successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeTableMappingResponse"
                },
                "example": [
                  {
                    "sourceSchema": "sourceSchema",
                    "sourceTable": "sourceTable1",
                    "targetSchema": "targetSchema",
                    "targetTable": "targetTable1",
                    "sourceSchemaCase": "MATCH_ORIGINAL_CASE",
                    "sourceTableCase": "UPPER_CASE",
                    "sourceColumnCase": "LOWER_CASE"
                  },
                  {
                    "sourceSchema": "sourceSchema",
                    "sourceTable": "sourceTable2",
                    "targetSchema": "targetSchema",
                    "targetTable": "targetTable2",
                    "sourceSchemaCase": "MATCH_ORIGINAL_CASE",
                    "sourceTableCase": "UPPER_CASE",
                    "sourceColumnCase": "LOWER_CASE"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid mapping configuration",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Processing failures",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/mappings",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MAP-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/entry-file": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Set the entry file (main script) for a Mainframe pipeline",
        "description": "Designates which script the pipeline should run as its main entry point.\n\n**Features:**\n- Lets users clearly choose the script that should run first during pipeline execution.\n- Prevents accidental updates across projects by validating project and pipeline association.\n\n**Use Cases:**\n- Set a `.sqd` or `.rpl` file as the main script from VS Code after create, pull, or refactor.\n- Correct the entry script path after files are moved or renamed.\n\n**Entry File Name Format:**\n- `entryFileName` must be the fully qualified file name within the pipeline workspace (include relative folders when applicable).\n- Example values: `main.sqd`, `scripts/main/main.sqd`, `flows/reverse/entry.rpl`.\n\n**Authorization:** Requires either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "setMainframePipelineEntryFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "requestBody": {
          "description": "Entry file update request. entryFileName must be the fully qualified file name within the pipeline workspace.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetMainframeEntryFileRequest"
              },
              "example": {
                "entryFileName": "scripts/main/main.sqd"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Entry file name updated successfully"
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "entryFileName must be a non-empty fully qualified file name",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/entry-file",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/entry-file",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Forbidden - insufficient privileges to manage pipeline",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/entry-file",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Pipeline not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Pipeline not found",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/entry-file",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Entry file update failed (DI-ADAPTER-MFD-0018)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to update mainframe pipeline entry file name",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/entry-file",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0018"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/application": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Generate mainframe application scripts",
        "description": "Generates the mainframe pipeline scripts for a given pipeline.\n\n**Process Overview:**\n1. **Request Validation** - Validates pipeline ID and parameters\n2. **Script Generation** - Generates the mainframe application scripts\n3. **Response** - Returns success status and message\n\n**Parameters:**\n- **forceRegeneration**: When true, regenerates scripts even if they already exist. When false (default), skips regeneration if scripts are already present.\n- **useSchemaVariables**: When true (default), uses variables for schema references in generated scripts. When false, uses hardcoded schema names.\n- **sourceObjectCase**: Applies case transformation to source object names (schemas, tables, columns) in the generated scripts. Options include NONE, MATCH_ORIGINAL_CASE, SENTENCE_CASE, LOWER_CASE, UPPER_CASE, TOGGLE_CASE, CAPITALIZE_EACH_WORD.\n- **targetObjectCase**: Applies case transformation to target object names (schemas, tables, columns) in the generated scripts. Same options as sourceObjectCase.\n\n**Key Features:**\n- Supports case transformation for object names\n- Optional force regeneration\n- Variable usage for schema\n\n**Use Cases:**\n- Generate mainframe scripts for a pipeline\n- Re-generate scripts with updated configurations\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "generateMainframeApplication",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "forceRegeneration",
            "in": "query",
            "description": "Force regeneration even if scripts already exist",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "useSchemaVariables",
            "in": "query",
            "description": "Use variables for schema references",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "sourceObjectCase",
            "in": "query",
            "description": "Case transformation for source object names",
            "required": false,
            "schema": {
              "type": "string",
              "default": "NONE",
              "enum": [
                "NONE",
                "MATCH_ORIGINAL_CASE",
                "SENTENCE_CASE",
                "LOWER_CASE",
                "UPPER_CASE",
                "TOGGLE_CASE",
                "CAPITALIZE_EACH_WORD"
              ]
            },
            "example": "NONE"
          },
          {
            "name": "targetObjectCase",
            "in": "query",
            "description": "Case transformation for target object names",
            "required": false,
            "schema": {
              "type": "string",
              "default": "NONE",
              "enum": [
                "NONE",
                "MATCH_ORIGINAL_CASE",
                "SENTENCE_CASE",
                "LOWER_CASE",
                "UPPER_CASE",
                "TOGGLE_CASE",
                "CAPITALIZE_EACH_WORD"
              ]
            },
            "example": "NONE"
          }
        ],
        "responses": {
          "201": {
            "description": "Application scripts generated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerateApplicationResponse"
                },
                "example": {
                  "success": true,
                  "statusMessage": "Application generated successfully."
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid pipeline ID or parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/dataflows/{pipelineId}/application",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/dataflows/{pipelineId}/application",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/dataflows/{pipelineId}/application",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/dataflows/{pipelineId}/application",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict - Application scripts already exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.9",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Mainframe pipeline script already exists for the given pipeline",
                  "instance": "/v1/integration/mainframe/dataflows/{pipelineId}/application",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to generate application",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/dataflows/{pipelineId}/application",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0004"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/activation": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Activate a mainframe pipeline",
        "description": "Synchronously activates a mainframe data integration pipeline by performing\nvalidation, staging, activation, and starting operations based on the provided request flags.\n\n**Process Overview:**\n- Validates the project and pipeline existence.\n- If `validate` is true, performs validation of the pipeline configuration.\n- If `stage` is true, commits the pipeline configuration to the staging area (requires validation).\n- If `activate` is true, deploys the pipeline to the runtime environment.\n- If `start` is true, starts the pipeline execution.\n- Returns phase-wise results for validate, stage, deploy, and start operations.\n\n**Execution Details:**\n- All operations are executed sequentially within a single request.\n- If any operation fails, subsequent operations are not attempted.\n\n**Key Features:**\n- Synchronous execution of activation steps with immediate feedback.\n- Supports selective operations based on request flags for flexible pipeline management.\n\n**Use Cases:**\n- Deploy and start a newly configured pipeline in one operation.\n- Stage pipeline changes for review before activation.\n- Restart a stopped pipeline with validation.\n- Perform incremental pipeline lifecycle management.\n\n**Required Permissions:** Either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "activateMainframePipeline",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Activation request with flags for stage, validate, activate, and start",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframePipelineActivationRequest"
              },
              "example": {
                "validate": true,
                "stage": true,
                "activate": true,
                "start": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Pipeline activation result",
            "headers": {
              "Location": {
                "description": "URL to access pipeline logs when the pipeline is successfully started. Only present when the 'start' operation succeeds.",
                "style": "simple",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineActivationResponse"
                },
                "examples": {
                  "Successful activation": {
                    "summary": "Pipeline activated successfully",
                    "description": "Successful activation",
                    "value": {
                      "validate": {
                        "success": true
                      },
                      "stage": {
                        "success": true
                      },
                      "deploy": {
                        "success": true
                      },
                      "start": {
                        "success": true
                      }
                    }
                  },
                  "Failed activation": {
                    "summary": "Pipeline activation failed with errors",
                    "description": "Failed activation",
                    "value": {
                      "validation": {
                        "success": true
                      },
                      "stage": {
                        "success": true
                      },
                      "deploy": {
                        "success": true
                      },
                      "start": {
                        "success": false,
                        "errors": [
                          "Failed to start pipeline due to resource constraints."
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid request or pipeline not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::create' or 'replication-pipeline::update' when permission harmonization is enabled, or legacy 'replication-pipeline::manage' otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Pipeline activation failed due to one of the following:\n- Validation failure: Pipeline validation failed during staging\n- Staging failure: Pipeline configuration commit to staging area failed\n- Deployment failure: Pipeline deployment failed\n- Starting failure: Pipeline execution start operation failed\n- General activation failure: Unexpected error during activation process\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/activation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0009"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get mainframe files and directories for a pipeline",
        "description": "Retrieves the list of mainframe files and directories associated with the specified pipeline within a project.\n\n**Features:**\n- Complete file and directory metadata retrieval\n- Hidden/system files excluded by default (`includeHidden=false`)\n- File application type classification\n- User tracking information (created by, modified by)\n- Pipeline and data flow associations\n- Directory structure and composition\n\n**Use Cases:**\n- Browse available files and directories for a pipeline\n- Access file and directory metadata for management operations\n- List pipeline content structure\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframeFilesByPipelineId",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "includeHidden",
            "in": "query",
            "description": "Include hidden/system files in response",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved files",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeFileResponse"
                },
                "example": [
                  {
                    "id": "file-123",
                    "fileName": "example_script.sh",
                    "uploadedDate": "2024-01-01T12:00:00Z",
                    "modifiedDate": "2024-01-02T12:00:00Z",
                    "lastModifiedBy": "user2@example.com",
                    "fileApplicationType": "ENGINE_SCRIPT"
                  },
                  {
                    "id": "file-456",
                    "fileName": "config.properties",
                    "uploadedDate": "2024-01-03T10:15:00Z",
                    "modifiedDate": "2024-01-04T14:30:00Z",
                    "lastModifiedBy": "admin@example.com",
                    "fileApplicationType": "CONFIGURATION"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline not found or files/directories not found for the given pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File retrieval failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0003"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Create a new mainframe file or directory",
        "description": "Creates a new mainframe file or directory in the specified pipeline with the provided content and application type.\n\n**Process Overview:**\n1. **Request Validation** - Validates directory path, file/folder name, content, and application type\n2. **File or Directory Creation** - Creates the file with specified content, or creates a directory if `directory=true`\n\n**Directory Creation:**\n- Request directory creation by setting `directory=true` in the request body. When creating a directory, `fileContent` must be null.\n- Provide the directory structure in the `path` field (e.g. '/path/to') and the folder name in the `name` field.\n- Use \"/\" for root directory path.\n\n**File Creation:**\n- Provide the directory path in the `path` field and the filename (with extension) in the `name` field.\n- Upload the file content via the multipart `fileContent` field.\n\n**File Application Types:**\n- `ENGINE_SCRIPT` - Script files for execution engine\n- `CONFIGURATION` - Configuration files\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createMainframeFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "File creation request payload containing:\n- `path`: Directory path where the file or folder will be created (use \"/\" for root)\n- `name`: File name (with extension) or folder name to create\n- `fileContent`: Multipart file content (required for files, must be null for directories)\n- `fileApplicationType`: Type of application the file is used for\n- `directory`: Set to true to create a directory instead of a file\nThe service layer will encode the file content as needed.\n",
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CreateMainframeFile"
              },
              "example": {
                "path": "/scripts",
                "name": "example_script.sh",
                "fileContent": "<binary file content>",
                "fileApplicationType": "ENGINE_SCRIPT",
                "directory": false
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "File or directory created successfully.\nLocation header contains the URI of the newly created file for future reference.\n",
            "headers": {
              "Location": {
                "description": "URI of the newly created file or directory",
                "style": "simple",
                "schema": {
                  "type": "string"
                },
                "example": "/v1/integration/mainframe/projects/project-123/pipelines/pipeline-456/files/file-789"
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid directory path or file/folder name format\n- Empty or missing file content (when not creating a directory)\n- Invalid file application type\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File creation operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get mainframe file or directory by ID",
        "description": "Retrieves a mainframe file or directory by its unique file ID.\n\n**Response Modes:**\n- When `contentOnly=true` or not provided (default): Returns raw file content as octet-stream for direct download/viewing (files only)\n- When `contentOnly=false`: Returns complete file/directory metadata including path, name, content, timestamps, and application type as JSON\n\n**Use Cases:**\n- Download raw file content (contentOnly=true, default, files only)\n- View file or directory details and content (contentOnly=false)\n- Access individual file or directory metadata\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframeFileById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of the file",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "file-789"
          },
          {
            "name": "contentOnly",
            "in": "query",
            "description": "If true, returns only file content as octet-stream; if false, returns full file metadata as JSON",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved file",
            "headers": {
              "Cache-Control": {
                "description": "No-cache headers to prevent caching of the ZIP file",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              },
              "Content-Disposition": {
                "description": "Indicates that the content is an attachment with filename",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeFileResponse"
                },
                "example": {
                  "id": "123e4567-e89b-12d3-a456-426614174000",
                  "fileName": "DATAFILE01",
                  "fileContent": "SGVsbG8sIFdvcmxkIQ==",
                  "uploadedDate": "2024-01-01T12:00:00Z",
                  "modifiedDate": "2024-01-02T15:30:00Z",
                  "lastModifiedBy": "jane.smith@example.com",
                  "fileApplicationType": "ENGINE_SCRIPT"
                }
              },
              "application/octet-stream": {}
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid file ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - File not found with the given ID",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File retrieval failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0003"
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Update mainframe file content by ID",
        "description": "Updates the content of an existing mainframe file by its unique file ID with new file content.\n\n**Process Overview:**\n1. **Request Validation** - Validates file ID and multipart file content\n2. **File Content Update** - Updates the file with new multipart content\n\n**Key Features:**\n- Replace entire file content in a single operation\n- Preserves file metadata and timestamps\n\n**Use Cases:**\n- Update script content from file\n- Modify configuration files with new versions\n- Replace file content without recreating\n\n**Required Permissions:** `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "updateMainframeFileContent",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of the file to update",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "file-789"
          }
        ],
        "requestBody": {
          "description": "Updated file content as multipart binary",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "File content updated successfully"
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid file ID\n- Missing or empty file content\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::update' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - File not found with the given ID or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File update operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0008"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Delete mainframe file or directory by ID",
        "description": "Deletes a mainframe file or directory by its unique file ID from the specified pipeline.\n\n**Use Cases:**\n- Remove obsolete files or directories\n- Clean up pipeline resources\n- Delete directory structures\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteMainframeFileById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of the file to delete",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "file-789"
          }
        ],
        "responses": {
          "204": {
            "description": "File deleted successfully"
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid file ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - File not found with the given ID or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File deletion operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/{fileId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0007"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/rename": {
      "put": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Rename mainframe files or directories",
        "description": "Rename one or more mainframe files or directories in the specified pipeline. Supports conflict resolution strategies.\n\n**Process Overview:**\n1. **Request Validation** - Validates file/directory identifiers\n2. **Conflict Detection** - Checks for naming conflicts with existing files or directories\n3. **Resolution Strategy** - Applies specified conflict resolution (REPLACE_ALL, IGNORE_ALL, PARTIAL)\n4. **Rename Execution** - Performs the rename operation(s)\n5. **Response Generation** - Returns results with success/failure details per file or directory\n\n**Conflict Resolution Strategies:**\n- `REPLACE_ALL` - Replace all existing files or directories with conflicting names\n- `IGNORE_ALL` - Skip all files or directories with conflicting names\n- `PARTIAL` - Replace only provided in `replaceFiles` list, other conflicts are ignored\n\n**Key Features:**\n- Batch rename support for multiple files and directories\n- Comprehensive error reporting with failure reasons\n\n**Required Permissions:** `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "renameMainframeFiles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "conflictResolution",
            "in": "query",
            "description": "Conflict resolution strategy to use when name conflicts occur:\n- REPLACE_ALL: Replace all existing files with conflicting names\n- IGNORE_ALL: Skip all files with conflicting names\n- PARTIAL: Replace only files specified in the replaceFiles list; other conflicts are ignored\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "REPLACE_ALL",
                "IGNORE_ALL",
                "PARTIAL"
              ]
            },
            "example": "REPLACE_ALL"
          }
        ],
        "requestBody": {
          "description": "Request body containing the list of files to rename and optional list of files to replace.\n- files: List of rename operations with source and target paths (required)\n- replaceFiles: Optional list of file paths that should be replaced if they already exist, only used for PARTIAL conflict resolution\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframeFilesRequest"
              },
              "example": {
                "files": [
                  {
                    "currentFilePath": "/old/path/oldName1.txt",
                    "newFilePath": "/new/path/newName1.txt",
                    "isDirectory": false
                  },
                  {
                    "currentFilePath": "/old/path/oldName2.txt",
                    "newFilePath": "/new/path/newName2.txt",
                    "isDirectory": false
                  }
                ],
                "replaceFiles": [
                  "/new/path/newName1.txt"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Files renamed or cloned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeFileOperationResponse"
                },
                "example": {
                  "filesRenamed": [
                    "oldName1.txt -> newName1.txt",
                    "oldName2.txt -> newName2.txt"
                  ],
                  "filesConflicted": [
                    "conflictedFile1.txt",
                    "conflictedFile2.txt"
                  ],
                  "errors": [
                    "Error renaming file3.txt: reason"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid file name format\n- Missing required rename request fields\n- Empty rename request list\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/rename",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/rename",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::update' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/rename",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/rename",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File rename operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/rename",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/upload": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Upload multiple mainframe files",
        "description": "Uploads multiple mainframe files to a specified directory path within the pipeline using batch upload API.\n\n**Process Overview:**\n1. **Request Validation** - Validates path and file list\n2. **Resolution Strategy** - Applies specified conflict resolution (REPLACE_ALL, IGNORE_ALL, PARTIAL)\n3. **Batch Upload** - Uploads all files in a single operation\n4. **Result Aggregation** - Returns success/failure results for all files\n\n**Conflict Resolution Strategies:**\n- `REPLACE_ALL` - Replace all existing files with conflicting names\n- `IGNORE_ALL` - Skip all files with conflicting names, keep originals\n- `PARTIAL` - Replace only files specified in `replaceFiles` list, others are ignored\n\n**Archive Expansion:**\n- When uploading a single ZIP file with `expandArchive=true`, the archive will be extracted\n- Individual files will be created from the archive contents\n- For multiple files, expandArchive is ignored\n\n**Key Features:**\n- Batch upload support for multiple files\n- ZIP archive expansion for single file uploads\n- Automatic path handling (uses path as prefix for all files)\n- Lists created, conflicted, updated, and ignored files\n\n**Path Handling:**\n- Files are uploaded to the specified directory path\n- Directory path (e.g., '/path/to') is used as prefix for all uploaded files\n\n**Use Cases:**\n- Bulk import of configuration files\n- Upload multiple scripts at once\n- Initial pipeline setup with multiple files\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "uploadMainframeFiles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "conflictResolution",
            "in": "query",
            "description": "Conflict resolution strategy to use when name conflicts occur:\n- REPLACE_ALL: Replace all existing files with conflicting names\n- IGNORE_ALL: Skip all files with conflicting names\n- PARTIAL: Replace only files specified in the replaceFiles list; other conflicts are ignored\n",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "REPLACE_ALL",
                "IGNORE_ALL",
                "PARTIAL"
              ]
            },
            "example": "PARTIAL"
          }
        ],
        "requestBody": {
          "description": "Upload request containing the path and files to upload",
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/UploadMainframeFiles"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Upload completed (check response for individual file results)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeFileOperationResponse"
                },
                "example": {
                  "filesCreated": [
                    "file1.txt",
                    "config.jcl"
                  ],
                  "filesConflicted": [
                    "existingFile.txt"
                  ],
                  "filesUpdated": [
                    "updatedScript.sh"
                  ],
                  "filesIgnored": [
                    "ignoredFile.log"
                  ],
                  "errors": [
                    "Error uploading file2.txt: reason"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid path format\n- Empty file list\n- More than 200 files\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/upload",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/upload",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/upload",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/upload",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- File upload operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/upload",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/download": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Download mainframe files and directories as ZIP",
        "description": "Downloads all mainframe files and directories for the specified pipeline as a ZIP archive.\n\n**Process Overview:**\n1. **Content Collection** - Gathers all files and directories associated with the pipeline\n2. **Archive Creation** - Packages files and directories into a ZIP archive preserving structure\n3. **Stream Preparation** - Prepares the archive for download\n4. **Response Delivery** - Returns the ZIP file with appropriate headers\n\n**Key Features:**\n- Single operation bulk file and directory download\n- Efficient streaming for large file sets\n- Directory structure preservation in archive\n\n**Use Cases:**\n- Backup mainframe files and directories\n- Transfer content between environments\n- Archive pipeline configurations with structure\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "downloadMainframeFilesZip",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          }
        ],
        "responses": {
          "200": {
            "description": "ZIP archive of mainframe files",
            "headers": {
              "Cache-Control": {
                "description": "No-cache headers to prevent caching of the ZIP file",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              },
              "Content-Disposition": {
                "description": "Indicates that the content is an attachment with filename",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/octet-stream": {}
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/download",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/download",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/download",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Files or directories not found for the pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/download",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- ZIP archive creation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/download",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0006"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get mainframe pipeline parameters",
        "description": "Retrieves the list of pipeline parameters associated with the specified pipeline within a project.\n\n**Features:**\n- Complete parameter metadata retrieval\n- Parameter type classification (STRING, ENCRYPTED_STRING)\n- Parameter descriptions and values\n\n**Use Cases:**\n- Browse available parameters for a pipeline\n- Access parameter metadata for management operations\n- List pipeline configuration parameters\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getParameters",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          }
        ],
        "responses": {
          "200": {
            "description": "Parameters retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineParameterResponse"
                },
                "example": [
                  {
                    "id": "param-123",
                    "name": "DB_USER",
                    "value": "admin",
                    "type": "PARAMETER_DATA_TYPE_STRING",
                    "description": "Database username for connection",
                    "lastModifiedBy": "user1@example.com",
                    "lastUpdatedAt": "2024-01-02T12:00:00Z"
                  },
                  {
                    "id": "param-456",
                    "name": "DB_PASSWORD",
                    "type": "PARAMETER_DATA_TYPE_ENCRYPTED_STRING",
                    "description": "Database password for connection",
                    "lastModifiedBy": "user2@example.com",
                    "lastUpdatedAt": "2024-01-02T12:00:00Z"
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Pipeline does not exist within the project\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Parameter retrieval failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0002"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Create a new pipeline parameter",
        "description": "Creates a new pipeline parameter in the specified pipeline with the provided name, value, type, and description.\n\n**Process Overview:**\n1. **Request Validation** - Validates parameter name format, value, type, and description\n2. **Duplicate Check** - Ensures parameter name doesn't already exist in the pipeline\n3. **Parameter Creation** - Creates the parameter with specified details and generates unique ID\n\n**Parameter Types:**\n- `PARAMETER_DATA_TYPE_STRING` - Plain text parameter for non-sensitive values\n- `PARAMETER_DATA_TYPE_ENCRYPTED_STRING` - Encrypted parameter for sensitive values like passwords\n\n**Parameter Naming Rules:**\n- Variable name cannot have a space or special characters except underscore (_)\n- Must be unique within the pipeline\n\n**Use Cases:**\n- Add configuration parameters to pipelines\n- Create encrypted credentials for data connections\n- Set up pipeline-specific variables\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "addParameter",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Parameter creation request containing:\n- `name`: Parameter name (must contain only letters, numbers, and underscores)\n- `value`: Parameter value (required)\n- `type`: Parameter data type (PARAMETER_DATA_TYPE_STRING or PARAMETER_DATA_TYPE_ENCRYPTED_STRING)\n- `description`: Optional human-readable description of the parameter\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframePipelineParameterRequest"
              },
              "example": {
                "name": "database_password",
                "value": "********",
                "type": "PARAMETER_DATA_TYPE_ENCRYPTED_STRING",
                "description": "Database connection password for production environment"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Parameter created successfully.\nLocation header contains the URI of the newly created parameter for future reference.\n",
            "headers": {
              "Location": {
                "description": "URI of the newly created parameter",
                "style": "simple",
                "schema": {
                  "type": "string"
                },
                "example": "/v1/integration/mainframe/projects/project-123/pipelines/pipeline-456/parameters/param-789"
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid parameter payload (missing required fields)\n- Invalid parameter type (must be PARAMETER_DATA_TYPE_STRING or PARAMETER_DATA_TYPE_ENCRYPTED_STRING)\n- Parameter name contains spaces or special characters (except underscore)\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Pipeline does not exist within the project\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict - Parameter creation failed due to one of the following reasons:\n- Parameter with the same name already exists in the pipeline\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.9",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Parameter creation failed - parameter already exists",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0006"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Parameter creation operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0003"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Delete all pipeline parameters",
        "description": "Deletes all parameters associated with the specified pipeline.\n\n**Key Features:**\n- Bulk operation for complete parameter cleanup\n- Permanent deletion of all parameter data\n- Cascading cleanup of all parameter references\n\n**Use Cases:**\n- Remove all parameters for pipeline reconfiguration\n- Clean up pipeline before major changes\n- Reset pipeline parameter configuration\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteAllParameters",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          }
        ],
        "responses": {
          "204": {
            "description": "All parameters deleted successfully"
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Pipeline does not exist within the project\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Bulk parameter deletion operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get pipeline parameter by id",
        "description": "Retrieves a pipeline parameter by its unique identifier.\n\n**Features:**\n- Complete parameter metadata retrieval\n- Parameter value and type information\n- Parameter description and configuration details\n\n**Use Cases:**\n- Access individual parameter details\n- View parameter configuration for editing\n- Retrieve parameter values for pipeline execution\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getParameterById",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "parameterId",
            "in": "path",
            "description": "Unique identifier of the parameter",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "param-789"
          }
        ],
        "responses": {
          "200": {
            "description": "Parameter retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineParameterResponse"
                },
                "example": {
                  "id": "param-123",
                  "name": "DB_USER",
                  "value": "admin",
                  "type": "PARAMETER_DATA_TYPE_STRING",
                  "description": "Database username for connection",
                  "lastModifiedBy": "user1@example.com",
                  "lastUpdatedAt": "2024-01-02T12:00:00Z"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid parameter ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Pipeline does not exist within the project\n- Parameter does not exist within the pipeline\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Parameter retrieval failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0002"
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Update pipeline parameter",
        "description": "Updates an existing pipeline parameter by its unique identifier with new values, type, or description.\n\n**Process Overview:**\n1. **Request Validation** - Validates parameter payload and identifier\n2. **Parameter Retrieval** - Fetches existing parameter to check current state\n3. **Security Validation** - Ensures encrypted parameters cannot be changed to plain text\n4. **Parameter Update** - Updates the parameter with new details\n\n**Parameter Types:**\n- `PARAMETER_DATA_TYPE_STRING` - Plain text parameter for non-sensitive values\n- `PARAMETER_DATA_TYPE_ENCRYPTED_STRING` - Encrypted parameter for sensitive values like passwords\n\n**Security Constraints:**\n- Encrypted parameters cannot be changed to plain text (STRING type)\n- This prevents accidental exposure of sensitive data\n\n**Parameter Naming Rules:**\n- Variable name cannot have a space or special characters except underscore (_)\n\n**Use Cases:**\n- Modify parameter values or descriptions\n- Change parameter types (with security constraints)\n- Update pipeline configuration parameters\n\n**Required Permissions:** `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "updateParameter",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "parameterId",
            "in": "path",
            "description": "Unique identifier of the parameter to update",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "param-789"
          }
        ],
        "requestBody": {
          "description": "Parameter update request containing:\n- `name`: Parameter name (must contain only letters, numbers, and underscores)\n- `value`: Updated parameter value (required)\n- `type`: Updated parameter data type (PARAMETER_DATA_TYPE_STRING or PARAMETER_DATA_TYPE_ENCRYPTED_STRING)\n- `description`: Updated human-readable description of the parameter\nNote: Encrypted parameters cannot be changed to plain text type for security reasons.\n",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframePipelineParameterRequest"
              },
              "example": {
                "name": "database_password",
                "value": "newSecurePassword456",
                "type": "PARAMETER_DATA_TYPE_ENCRYPTED_STRING",
                "description": "Updated database connection password"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Parameter updated successfully"
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid parameter payload (missing required fields)\n- Invalid parameter type (must be PARAMETER_DATA_TYPE_STRING or PARAMETER_DATA_TYPE_ENCRYPTED_STRING)\n- Parameter name contains spaces or special characters (except underscore)\n- Encrypted parameter cannot be changed to plain text\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::update' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Pipeline does not exist within the project\n- Parameter does not exist within the pipeline\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Parameter update operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0004"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Delete pipeline parameter by id",
        "description": "Deletes a pipeline parameter by its id.\n\n**Use Cases:**\n- Remove obsolete parameters\n- Clean up unused configuration parameters\n- Delete parameters no longer needed by the pipeline\n\n**Required Permissions:** `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteParameter",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "parameterId",
            "in": "path",
            "description": "Unique identifier of the parameter to delete",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "param-789"
          }
        ],
        "responses": {
          "204": {
            "description": "Parameter deleted successfully"
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid pipeline ID\n- Invalid parameter ID\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::delete' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Pipeline does not exist within the project\n- Parameter does not exist within the pipeline\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Parameter deletion operation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/parameters/{parameterId}",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFP-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/monitoring/projects/{projectId}/status": {
      "get": {
        "tags": [
          "Monitor and Trigger Mainframe Integration Projects"
        ],
        "summary": "Get mainframe project status",
        "description": "Retrieves the status of mainframe pipelines within a specified project.\nIf a pipelineId is supplied the scope is narrowed to that pipeline. Optionally include latency details.\n\nProcess Overview:\n- Fetch project and associated pipelines status.\n- Filter by pipelineId if provided.\n- Optionally enrich with latency detail if requested.\n\nKey Features:\n- Lightweight by default (latency details off).\n- Supports targeted lookup via pipelineId.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframeProjectStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the pipeline within the project, if you want status for a specific pipeline.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "pipeline-456"
          },
          {
            "name": "includeLatency",
            "in": "query",
            "description": "Include latency details. If not provided, defaults to false.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved mainframe project status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeProjectStatusResponse"
                },
                "example": {
                  "tenantId": "hdncngclqxsdfzcwf",
                  "projectId": "69036d04872fd75c7ad2596e",
                  "reportedAt": "2025-01-01T00:00:00Z",
                  "pipelines": [
                    {
                      "pipelineId": "69036d1e872fd75c7ad2596f",
                      "name": "KafkaToDB2i",
                      "runtimeServers": [
                        "MainframeEngine"
                      ],
                      "status": "RUNNING",
                      "startedAt": "2025-01-01T00:00:00Z",
                      "stats": {
                        "captured": {
                          "rows": 1000,
                          "bytes": 50000,
                          "transactions": 500,
                          "reportedAt": "2025-01-01T00:00:00Z"
                        },
                        "applied": {
                          "rows": 1000,
                          "bytes": 50000,
                          "transactions": 500,
                          "reportedAt": "2025-01-01T00:00:00Z"
                        }
                      },
                      "latency": {
                        "current": {
                          "capture": 10,
                          "backlog": 5,
                          "apply": 15,
                          "reportedAt": "2025-01-01T00:00:00Z"
                        },
                        "average": {
                          "capture": 12,
                          "backlog": 6,
                          "apply": 18,
                          "estimationWindow": 1,
                          "reportedAt": "2025-01-01T00:00:00Z"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid query parameters\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - No status found for the given project or pipeline",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve mainframe project status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/logs": {
      "get": {
        "tags": [
          "Monitor and Trigger Mainframe Integration Projects"
        ],
        "summary": "Fetch mainframe pipeline logs",
        "description": "Retrieves execution logs for a specified mainframe pipeline within a project.\nSupports pagination, filtering, and optional daemon log inclusion for comprehensive pipeline monitoring.\n\nProcess Overview:\n- Fetch pipeline deployment engine logs.\n- Optionally fetch daemon (sqdaemon) logs if requested.\n- Support text and regex-based search filtering.\n- Return paginated log data based on specified page size and page numbers.\n\nKey Features:\n- Comprehensive log retrieval with pagination support.\n- Text and regex search filtering capabilities.\n- Configurable page size in kilobytes.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframePipelineLogs",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline for which logs are being retrieved",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "pageSizeInKB",
            "in": "query",
            "description": "Page size in kilobytes for log retrieval. Controls the amount of log data returned per page.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64",
              "default": 100
            },
            "example": 100
          },
          {
            "name": "includeDaemon",
            "in": "query",
            "description": "Include daemon (sqdaemon) logs in the response. If false, only pipeline-specific logs are returned.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "daemonLogPage",
            "in": "query",
            "description": "Page number for daemon logs (applicable only if includeDaemon is true).",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            },
            "example": 1
          },
          {
            "name": "pipelineLogPage",
            "in": "query",
            "description": "Page number for pipeline logs.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 1
            },
            "example": 1
          },
          {
            "name": "searchText",
            "in": "query",
            "description": "Text to search within the logs. If provided, only matching log lines are returned.",
            "required": false,
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "isRegexSearch",
            "in": "query",
            "description": "Whether the searchText should be treated as a regular expression. If false, performs plain text search.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved mainframe pipeline logs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineLogResponse"
                },
                "example": {
                  "pipelineLogs": {
                    "logs": [
                      "[INFO] Pipeline deployment initiated...",
                      "[INFO] Processing data..."
                    ],
                    "pageNumber": 1,
                    "totalPages": 5
                  },
                  "daemonLogs": {
                    "logs": [
                      "[DEBUG] Daemon processing data...",
                      "[DEBUG] Synchronizing..."
                    ],
                    "pageNumber": 1,
                    "totalPages": 3
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid query parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/logs",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/logs",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/logs",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline not found in the specified project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/logs",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to retrieve pipeline logs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/logs",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0015"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/reports": {
      "get": {
        "tags": [
          "Monitor and Trigger Mainframe Integration Projects"
        ],
        "summary": "Fetch Reports Associated with a Mainframe Pipeline",
        "description": "Retrieves reports for a specified mainframe pipeline within a project, filtered by agent type.\n\nProcess Overview:\n- Fetch reports associated with the specified pipeline.\n- Optionally filter reports by the provided agent type.\n\nKey Features:\n- Supports optional filtering by agent type for targeted report retrieval.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframePipelineReports",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project containing the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline for which reports are being retrieved",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "agentType",
            "in": "query",
            "description": "Type of agent for which reports are to be retrieved",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Mainframe agent types.",
              "enum": [
                "APPLY_ENGINE",
                "STREAM_PUBLISHER",
                "REPLICATOR"
              ],
              "example": "APPLY_ENGINE"
            },
            "example": "APPLY_ENGINE"
          }
        ],
        "responses": {
          "200": {
            "description": "Reports retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineReportResponse"
                },
                "example": [
                  {
                    "agentType": "APPLY_ENGINE",
                    "report": [
                      "Report line 1",
                      "Report line 2"
                    ]
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid input parameters",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://api.precisely.com/problems/bad-request",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid request parameters",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/report",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://api.precisely.com/problems/unauthorized",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/report",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://api.precisely.com/problems/forbidden",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/report",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline or project not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://api.precisely.com/problems/not-found",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Pipeline not found",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/report",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - An unexpected error occurred",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://api.precisely.com/problems/internal-server-error",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/{pipelineId}/report",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0017"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/trigger": {
      "post": {
        "tags": [
          "Monitor and Trigger Mainframe Integration Projects"
        ],
        "summary": "Trigger start/stop actions for mainframe pipelines",
        "description": "Submits an asynchronous lifecycle action (START or STOP) for one or more mainframe pipelines in a project.\nA 202 Accepted response indicates the request was validated and dispatched (not that execution is complete).\nThe response body contains a status field (SUBMITTED or FAILED). Use the /logs and /status API to monitor the pipeline execution logs.\n\nProcess Overview:\n- Validate that all specified pipeline IDs belong to the given project.\n- Dispatch the start/stop action asynchronously.\n- Build 202 response with body status (SUBMITTED if dispatch succeeded, FAILED if an internal exception occurred).\n\nKey Features:\n- Targeted pipeline control (supply specific pipeline IDs).\n- Uniform 202 response; body-level status differentiates dispatch success vs failure.\n- Monitor pipeline execution using the /logs and /status API.\n\n**Required Permissions:** `replication-pipeline::operate`\n",
        "operationId": "triggerMainframePipelines",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project whose pipelines should be acted upon.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "description": "Action request: START or STOP plus pipelines list.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TriggerMainframePipelinesRequest"
              },
              "examples": {
                "StartMainframePipelines": {
                  "summary": "Start specific mainframe pipelines",
                  "description": "StartMainframePipelines",
                  "value": {
                    "pipelines": [
                      "pipelineId1",
                      "pipelineId2"
                    ],
                    "action": "START"
                  }
                },
                "StopMainframePipelines": {
                  "summary": "Stop specific mainframe pipelines",
                  "description": "StopMainframePipelines",
                  "value": {
                    "pipelines": [
                      "pipelineId1",
                      "pipelineId2"
                    ],
                    "action": "STOP"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted - Trigger request submitted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "request START submitted",
                  "status": "Submitted"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::operate' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "406": {
            "description": "Not Acceptable. The trigger request was validated but failed to dispatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TriggerOperationResponse"
                },
                "example": {
                  "message": "Failed to dispatch trigger request",
                  "status": "Failed"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to submit trigger request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/monitoring/projects/{projectId}/pipelines/trigger",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0012"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/push-reservation": {
      "post": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Create push reservation",
        "description": "Atomically checks push readiness and acquires a distributed lock for the project.\n\n**Features:**\n- Atomic revision conflict detection and lock acquisition\n- Distributed Redis-based locking with configurable TTL\n- Heartbeat-based lock extension per batch\n- Automatic lock release on success or failure\n\n**Use Cases:**\n- VS Code extension initiating a DSL project push\n- CLI tooling pushing project changes to Suite\n\n**Process:**\n1. Validates the base revision number against the server's latest revision.\n2. Attempts to acquire a Redis-based distributed lock (TTL: 300s).\n3. Returns the proposed revision number (latest + 1) and reservation expiry.\n\n**Conflict scenarios:**\n- `REVISION_CONFLICT` (409): The client's base revision is stale — a newer revision exists.\n- `PUSH_IN_PROGRESS` (409): Another user currently holds the push lock.\n\n**Lock behavior:**\n- Lock TTL: 300 seconds (extended via heartbeat per batch).\n- Auto-released on push success or failure.\n- Only one concurrent push per project.\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createPushReservation",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PushReservationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Push reservation acquired successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PushReservationResponse"
                },
                "example": {
                  "reservationId": "res-a1b2c3d4-5678-90ef-ghij-klmnopqrstuv",
                  "projectId": "project-123",
                  "proposedRevisionNumber": 4,
                  "expiresAt": "2026-05-17T10:05:00Z"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request — missing or invalid baseRevisionNumber",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — revision conflict or push already in progress",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PushConflictResponse"
                },
                "examples": {
                  "Revision Conflict": {
                    "description": "Revision Conflict",
                    "value": {
                      "code": "REVISION_CONFLICT",
                      "message": "Base revision is stale — a newer revision exists on the server",
                      "latestRevisionNumber": 5,
                      "latestRevisionId": "rev-latest-xyz"
                    }
                  },
                  "Push In Progress": {
                    "description": "Push In Progress",
                    "value": {
                      "code": "PUSH_IN_PROGRESS",
                      "message": "Another push operation is currently in progress for this project",
                      "owner": "jane.doe@example.com",
                      "retryAfterSeconds": 30,
                      "progress": {
                        "completedBatches": 2,
                        "totalBatches": 5
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error during push reservation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to acquire push reservation due to internal error",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/push-status": {
      "get": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Get push status",
        "description": "Retrieves the current push readiness status for a project without acquiring a lock.\n\n**Features:**\n- Non-locking status check\n- Revision conflict detection\n- Active lock holder information\n- Lock expiry countdown\n\n**Use Cases:**\n- Fast-fail check before starting expensive conflict detection\n- Dashboard status display for project push availability\n- CI/CD gate check before automated push\n\n**Scenarios:**\n- Pre-flight call immediately before `push-reservation`\n- Polling while another user holds the push lock\n- Detecting stale local revision before upload begins\n\n**Status values:**\n- `ready` — No lock held, revision number matches expectations.\n- `push_in_progress` — Another user holds the lock.\n- `revision_conflict` — Proposed revision number doesn't match latest + 1.\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectPushStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "proposedRevisionNumber",
            "in": "query",
            "description": "The revision number the client proposes to push",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Push status retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PushStatusResponse"
                },
                "examples": {
                  "Ready": {
                    "description": "Ready",
                    "value": {
                      "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "proposedRevisionNumber": 4,
                      "latestRevisionId": "rev-xyz789",
                      "latestRevisionNumber": 3,
                      "canPush": true,
                      "reason": "ready"
                    }
                  },
                  "Push In Progress": {
                    "description": "Push In Progress",
                    "value": {
                      "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "proposedRevisionNumber": 4,
                      "latestRevisionNumber": 3,
                      "canPush": false,
                      "reason": "push_in_progress",
                      "reservation": {
                        "reservationId": "res-uuid-12345",
                        "state": "in_progress",
                        "owner": "jane.doe@example.com",
                        "expiresAt": "2026-05-18T12:05:00Z",
                        "retryAfterSeconds": 30
                      }
                    }
                  },
                  "Revision Conflict": {
                    "description": "Revision Conflict",
                    "value": {
                      "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "proposedRevisionNumber": 4,
                      "latestRevisionNumber": 5,
                      "canPush": false,
                      "reason": "revision_conflict"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — invalid proposed revision number",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Constraint violation error",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001",
                    "errors": [
                      {
                        "propertyPath": "getProjectPushStatus.proposedRevisionNumber",
                        "message": "must be greater than or equal to 1"
                      }
                    ]
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error during push status check",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to check push status",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/push": {
      "post": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Push files (batch upload)",
        "description": "Uploads a batch of DSL project files as part of a push operation.\n\n**Features:**\n- Multi-file batch upload (up to 499 per batch)\n- Automatic content hashing (SHA-256)\n- Best-effort compensation on failure\n- Lock heartbeat extension per batch\n- Relationship creation for final batch\n\n**Use Cases:**\n- Large project push split into multiple batches\n- Single-batch push for small projects\n- Resumable uploads via batching strategy\n\n**Request model:**\n- Reservation controls are provided via headers:\n        `X-Reservation-Id`, `X-Proposed-Revision-Number`\n- Batch controls and metadata are provided as multipart form fields:\n        `isFinal`, `description`, `unchangedFileIds`, `transitionDraftAssetIds`, `fileMetadata`\n- Changed files are uploaded through the multipart `files` part\n\n**Batch constraints:**\n- Maximum 499 assets per batch\n- Maximum 24 MB total payload per batch\n- Batches are submitted sequentially under one reservation\n- `fileMetadata` is sent as a multipart form field in the request body\n  (JSON map of `flattenedPath -> {version,mimeType,encoding}`) for uploaded files only\n- `unchangedFileIds` and `transitionDraftAssetIds` are accepted only when `isFinal=true`\n\n**Final batch behavior:**\n- Set `isFinal=true` on the last batch\n- Triggers revision asset creation (DISDSLRevision)\n- Creates Defines (ReplicationProject → DISDSLRevision) relationship\n- Creates Includes (DISDSLRevision → DISDSLFile) relationships for all files\n- Heartbeat extends lock TTL per batch\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "pushFiles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "X-Reservation-Id",
            "in": "header",
            "description": "The reservation ID from the push-reservation response",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "X-Proposed-Revision-Number",
            "in": "header",
            "description": "The proposed revision number from the push-reservation response",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32",
              "minimum": 1
            }
          },
          {
            "name": "isFinal",
            "in": "query",
            "description": "Whether this is the final batch in the push sequence",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "description",
            "in": "query",
            "description": "Optional commit message (used on final batch)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "unchangedFileIds",
            "in": "query",
            "description": "Catalog asset IDs of unchanged files (final batch only; rejected when isFinal=false)",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "transitionDraftAssetIds",
            "in": "query",
            "description": "Catalog asset IDs of existing draft files to transition to approved (final batch only; rejected when isFinal=false)",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "fileMetadata",
            "in": "query",
            "description": "Optional JSON map of flattenedPath -> {version,phase,mimeType,encoding} for changed files",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "files": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "binary"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Final batch processed — push completed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PushSuccessResponse"
                },
                "example": {
                  "status": "success",
                  "revisionId": "rev-new-001",
                  "revisionNumber": 4,
                  "filesPersistedCount": 12,
                  "fileResults": [
                    {
                      "flattenedPath": "pipelines/customer-sync.dis.yaml",
                      "catalogAssetId": "asset-xyz-789",
                      "action": "created",
                      "phase": "draft",
                      "version": 1
                    }
                  ],
                  "retentionEvictions": [],
                  "warnings": [],
                  "timestamp": "2026-05-17T10:00:00Z"
                }
              }
            }
          },
          "202": {
            "description": "Intermediate batch accepted — continue with next batch",
            "content": {
              "application/json": {
                "example": {
                  "status": "accepted",
                  "message": "Batch 1 of 3 processed successfully"
                }
              }
            }
          },
          "400": {
            "description": "Invalid batch — exceeds size/count limits or uses final-only inputs on non-final batch",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "Batch Size Or Count Limit": {
                    "description": "Batch Size Or Count Limit",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid batch: exceeds 499 assets or 24 MB limit",
                      "instance": "/v1/integration/advanced-dsl/projects/project-123/push",
                      "properties": {
                        "errorCode": "DI-ADAPTER-DSL-0015"
                      }
                    }
                  },
                  "Final Batch Only Inputs Used In Intermediate Batch": {
                    "description": "Final Batch Only Inputs Used In Intermediate Batch",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Invalid batch: unchangedFileIds and transitionDraftAssetIds are allowed only when isFinal=true",
                      "instance": "/v1/integration/advanced-dsl/projects/project-123/push",
                      "properties": {
                        "errorCode": "DI-ADAPTER-DSL-0018"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable entity — constraint validation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "Constraint violation error",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001",
                    "errors": [
                      {
                        "propertyPath": "pushFiles.proposedRevisionNumber",
                        "message": "must be greater than or equal to 1"
                      }
                    ]
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal error — push orchestration failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to execute push orchestration",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/pull-status": {
      "get": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Get pull status for a project revision",
        "description": "Retrieves pull readiness information for a project revision.\nReturns file count and total size for download estimation.\nIf `revisionNumber` is not provided, the latest revision is used.\n\n**Features:**\n- Optional revision selection via `revisionNumber`\n- File count and total size estimation\n- Latest-or-specific revision resolution\n- Download feasibility check\n\n**Use Cases:**\n- Pre-pull size estimation for the latest revision\n- Pre-pull size estimation for progress bars\n- Bandwidth check before large downloads\n- Preflight checks before full `/pull` download\n\n**Scenarios:**\n- No `revisionNumber` provided → latest revision is evaluated\n- `revisionNumber` provided → the requested revision is evaluated\n- Ready state with known file count and total size\n- Lightweight pre-check before full `/pull` operation\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectPullStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number to check pull readiness for (latest when omitted)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 3
          }
        ],
        "responses": {
          "200": {
            "description": "Pull status retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PullStatusResponse"
                },
                "examples": {
                  "Ready": {
                    "description": "Ready",
                    "value": {
                      "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "revisionId": "rev-abc123",
                      "revisionNumber": 3,
                      "fileCount": 12,
                      "totalSizeBytes": 524288,
                      "status": "ready"
                    }
                  },
                  "Unavailable": {
                    "description": "Unavailable",
                    "value": {
                      "projectId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                      "revisionId": "rev-missing-999",
                      "revisionNumber": 0,
                      "fileCount": 0,
                      "totalSizeBytes": 0,
                      "status": "unavailable"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull-status?revisionNumber=3",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull-status?revisionNumber=3",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or revision not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Revision not found for the given project",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull-status?revisionNumber=999",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0010"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error during pull status check",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to check pull status",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull-status?revisionNumber=3",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0009"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/pull": {
      "get": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Pull project files",
        "description": "Retrieves DSL project files with optional content for a pull operation.\n\n**Features:**\n- Pull latest or specific revision\n- Optional content inclusion for offline editing\n- Selective field projection via relatedAssetFields\n- Content is base64-encoded when includeContent=true\n\n**Use Cases:**\n- Initial project pull (includeContent=true)\n- Pre-push metadata check (includeContent=false)\n- Historical revision retrieval\n\n**Scenarios:**\n- Full pull of latest revision for local workspace hydration\n- Selective pull via `assetIds` for targeted downloads\n- Metadata-only pull to compare before push\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "listProjectFiles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Specific revision number to pull (default: latest)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "includeContent",
            "in": "query",
            "description": "Whether to include base64-encoded file content (default: true)",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "relatedAssetFields",
            "in": "query",
            "description": "Optional list of related asset fields to include",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "assetIds",
            "in": "query",
            "description": "When provided, fetch only these specific file assets by catalog asset ID (Phase 2 selective download)",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project files",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PullFilesResponse"
                },
                "example": {
                  "revisionId": "rev-abc123",
                  "revisionNumber": 3,
                  "files": [
                    {
                      "catalogAssetId": "asset-file-001",
                      "flattenedPath": "pipelines/customer-sync.dis.yaml",
                      "name": "customer-sync.dis.yaml",
                      "version": 2,
                      "phase": "approved",
                      "content": "IyBEU0wgUGlwZWxpbmUgQ29uZmlndXJhdGlvbg==",
                      "contentHash": "e3b0c44298fc1c149afbf4c8996fb924...",
                      "sizeBytes": 2048,
                      "mimeType": "application/x-yaml",
                      "createdAt": "2026-05-10T08:30:00Z",
                      "updatedAt": "2026-05-15T14:20:00Z",
                      "createdBy": "john.doe@example.com",
                      "updatedBy": "jane.smith@example.com"
                    }
                  ],
                  "includeContent": true,
                  "totalCount": 1
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or revision not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL project not found",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0011"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error during file retrieval",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve project files from catalog",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/revisions": {
      "get": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "List project revisions",
        "description": "Retrieves a paginated list of project revisions sorted in descending order by revision number.\n\n**Features:**\n- Page-based pagination with configurable size\n- Sortable by revisionNumber, createdAt, createdBy, description\n- Includes revision metadata (creator, timestamp, description, file count)\n\n**Use Cases:**\n- Version history display in VS Code extension\n- Rollback point selection\n- Audit trail inspection\n\n**Scenarios:**\n- Pagination through long revision history\n- Sorted timeline view by revision number or creation metadata\n- Investigation of who changed what and when\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "listProjectRevisions",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Zero-based page index (0..N).\n\nValidation Rules:\n- Must be greater than or equal to 0\n- Default: 0 (first page)\n\nExamples:\n- page=0 (first page)\n- page=1 (second page)\n- page=5 (sixth page)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "maximum": 10000,
              "minimum": 0
            },
            "example": 0
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of items to return per page.\n\nValidation Rules:\n- Must be between 1 and 100 (inclusive)\n- Default: 10 items per page\n- Values exceeding 100 will return validation error\n\nExamples:\n- size=10 (10 items per page)\n- size=50 (50 items per page)\n- size=100 (maximum allowed)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "minimum": 1
            },
            "example": 50
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting criteria with flexible format options.\nMultiple sort parameters supported for multi-level sorting.\n\nDefault: name,asc (sort by name in ascending order)\n\nSort Format Options:\n- sort=property (e.g., sort=name - defaults to ascending)\n- sort=property,direction (e.g., sort=name,asc or sort=createdAt,desc)\n- sort=property,asc,ignoreCase (for case-insensitive sorting)\n\nMulti-level Sorting:\n- sort=property1,asc&sort=property2,desc (multiple sort parameters)\n- First sort criteria takes priority, subsequent ones used for tie-breaking\n\nNote: Supported sort properties vary by endpoint. Check the specific endpoint\ndocumentation for the list of valid sort properties for that resource type.\n\nExamples:\n- sort=name,asc (sort by name ascending)\n- sort=createdAt,desc (sort by creation date descending)\n- sort=type,asc&sort=name,asc (multi-level sort)\n- sort=deployedAt,desc,ignoreCase (case-insensitive sort)\n",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "default": "name,asc"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved revision list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RevisionPageResponse"
                },
                "example": {
                  "content": [
                    {
                      "revisionId": "rev-003",
                      "revisionNumber": 3,
                      "baseRevisionNumber": 2,
                      "fileCount": 12,
                      "createdAt": "2026-05-17T10:00:00Z",
                      "createdBy": "john.doe@example.com",
                      "description": "Updated customer-sync pipeline"
                    },
                    {
                      "revisionId": "rev-002",
                      "revisionNumber": 2,
                      "baseRevisionNumber": 1,
                      "fileCount": 10,
                      "createdAt": "2026-05-15T09:30:00Z",
                      "createdBy": "jane.smith@example.com",
                      "description": "Added new enrichment pipeline"
                    }
                  ],
                  "pageNumber": 0,
                  "pageSize": 25,
                  "numberOfElements": 2,
                  "totalElements": 3,
                  "totalPages": 1,
                  "first": true,
                  "last": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — invalid pagination or sorting input",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL project not found",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0011"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error during revision listing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve project revisions from catalog",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0005"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/revisions/{revisionId}": {
      "delete": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Delete a DSL revision",
        "description": "Deletes a revision and orphaned file assets from the project catalog.\n\n**Features**\n- Before deletion, fetches all files linked to the revision.\n- Physically deletes file assets that belong **only** to this revision.\n- Skips physical deletion for files shared with other revisions.\n- Deletion of the latest revision is blocked unless `force=true`.\n\n**Use Cases**\n- Pruning an outdated revision and its exclusive files to reclaim catalog space.\n- Force-deleting the current head revision during rollback or project reset.\n\n**Scenarios**\n- File included by only this revision → physically deleted; listed in `filesPhysicallyDeleted`.\n- File shared across multiple revisions → not deleted; listed in `filesRelationshipDeleted`.\n- Attempting to delete the latest revision without `force=true` → 409 conflict.\n\n**Required Permissions**: `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteRevision",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "revisionId",
            "in": "path",
            "description": "The revision ID to delete",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "rev-abc123"
          },
          {
            "name": "force",
            "in": "query",
            "description": "Force deletion even if this is the latest revision",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Revision deleted successfully, with lists of physically and relationship-deleted files",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteDslRevisionResponse"
                },
                "example": {
                  "revisionId": "rev-abc123",
                  "name": "DSL-Rev-3",
                  "revisionNumber": 3,
                  "filesPhysicallyDeleted": [
                    "file-abc123",
                    "file-def456"
                  ],
                  "filesRelationshipDeleted": [
                    "file-ghi789"
                  ],
                  "remainingRevisionsCount": 2,
                  "timestamp": "2026-05-17T10:00:00Z"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permissions — requires `replication-pipeline::delete` or legacy `replication-pipeline::manage`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or revision not found (error codes: DI-ADAPTER-DSL-0011 DSL_PROJECT_NOT_FOUND, DI-ADAPTER-DSL-0010 DSL_REVISION_NOT_FOUND)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL revision asset not found in catalog",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0010"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Cannot delete the latest revision without force=true (error code: DI-ADAPTER-DSL-0023 DSL_LATEST_REVISION_DELETE_CONFLICT)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Cannot delete the latest revision without force=true",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0023"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error — catalog revision or file deletion failed (error codes: DI-ADAPTER-DSL-0022 DSL_REVISION_DELETE_FAILED)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to delete revision due to catalog error",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0022"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/revisions/{revisionId}/files/{fileId}": {
      "delete": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Delete a DSL file from a revision",
        "description": "Removes a DSL file from the given revision. The deletion strategy is\n**revision-count-aware**:\n\n**Features**\n- Physically deletes the file asset from the catalog if it belongs to only one revision.\n- Removes only the revision-to-file relationship (soft unlink) if the file is shared\n  across multiple revisions.\n\n**Use Cases**\n- Removing a file that was added only in this revision (physical delete).\n- Unlinking a shared file from a specific revision without losing it from others.\n\n**Scenarios**\n- File included by exactly 1 revision → physical delete via catalog asset removal.\n- File included by 2 or more revisions → relationship delete only; asset preserved.\n\n**Required Permissions**: `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteProjectFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "revisionId",
            "in": "path",
            "description": "The revision ID that currently includes this file",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "rev-abc123"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "The file asset ID to delete or unlink",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "file-abc123"
          },
          {
            "name": "target",
            "in": "query",
            "description": "Deletion target label applied to the asset if not physically deleted",
            "required": false,
            "schema": {
              "type": "string",
              "default": "pending_deletion"
            },
            "example": "pending_deletion"
          }
        ],
        "responses": {
          "200": {
            "description": "File deleted or unlinked successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteDslFileResponse"
                },
                "example": {
                  "fileId": "file-abc123",
                  "name": "customer-sync.dis.yaml",
                  "flattenedPath": "pipelines/customer-sync.dis.yaml",
                  "physicallyDeleted": true,
                  "version": 3,
                  "timestamp": "2026-05-17T10:00:00Z"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid parameters, including file-revision mismatch (error codes: DI-ADAPTER-VAL-0000, DI-ADAPTER-DSL-0024 DSL_FILE_NOT_ASSOCIATED_WITH_REVISION)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permissions — requires `replication-pipeline::delete` or legacy `replication-pipeline::manage`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or file not found (error codes: DI-ADAPTER-DSL-0011 DSL_PROJECT_NOT_FOUND, DI-ADAPTER-DSL-0019 DSL_FILE_NOT_FOUND)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL file asset not found in catalog",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0019"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error — catalog delete or relationship removal failed (error codes: DI-ADAPTER-DSL-0021 DSL_FILE_DELETE_FAILED)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to delete file due to catalog error",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0021"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/files": {
      "post": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Create a DSL file",
        "description": "Creates a new DSL file asset in the project using multipart/form-data upload.\n\n**Features**\n- Creates a brand-new file asset in the catalog.\n- Initializes file version to `1` for all newly created files.\n- Persists content, hash, size, MIME type, encoding, and phase metadata.\n- Links the file to the selected revision via `Includes` relationship.\n- When `revisionNumber` is omitted, links against the latest project revision.\n\n**Use Cases**\n- Adding a newly authored DSL file to a project.\n- Creating a file before first inclusion in a revision.\n- Programmatic project bootstrap with initial file assets.\n\n**Scenarios**\n- New file create + explicit revisionNumber → file is created and linked to that revision.\n- New file create + no revisionNumber → file is created and linked to latest revision.\n- File created but already linked to target revision → no duplicate relationship is created.\n\n**Required Permissions**: `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createProjectFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "mimeType",
            "in": "query",
            "description": "MIME type of the file content",
            "required": false,
            "schema": {
              "type": "string",
              "default": "application/yaml"
            },
            "example": "application/yaml"
          },
          {
            "name": "encoding",
            "in": "query",
            "description": "Encoding applied to the content",
            "required": false,
            "schema": {
              "type": "string",
              "default": "utf-8"
            },
            "example": "utf-8"
          },
          {
            "name": "phase",
            "in": "query",
            "description": "Target lifecycle phase to apply after save",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "approved"
          },
          {
            "name": "flattenedPath",
            "in": "query",
            "description": "Flattened path of the file within the project (e.g., pipelines/customer-sync.dis.yaml). Defaults to file name if omitted.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "pipelines/customer-sync.dis.yaml"
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number to associate the file with. If omitted, latest project revision is used.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 3
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "File content as a multipart binary part (key: 'file')"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "File created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveDslFileResponse"
                },
                "example": {
                  "fileId": "file-new-abc123",
                  "name": "customer-sync.dis.yaml",
                  "flattenedPath": "customer-sync.dis.yaml",
                  "phase": "draft",
                  "version": 1,
                  "timestamp": "2026-05-17T10:00:00Z"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request — missing file part, unreadable content, or constraint violation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permissions — requires `replication-pipeline::create` or legacy `replication-pipeline::manage`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or selected revision not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL project not found",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0011"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error — catalog asset create, relationship create, or retrieval failed (error codes: DI-ADAPTER-DSL-0020 DSL_FILE_SAVE_FAILED)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to save DSL file content",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0020"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "List projects across all or selected project types",
        "description": "Retrieves a paginated list of projects across all project types or a selected subset.\n\n**Features:**\n- Optional repeatable `projectType` filter (REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION).\n- When `projectType` is omitted, projects of all types are returned.\n- Repeating `projectType` returns the union of the selected types; duplicate values are ignored.\n- Optional control of dataflow loading. Continuous projects populate `pipelines`;\n  Mainframe projects populate `mainframePipelines`;\n  Advanced Replication projects populate `advancedPipelines` with DSL pipeline summaries.\n- Advanced Replication list responses include project-level `validationSummary`\n  when validation state exists.\n- Pagination and multi-property sorting.\n\n**Use Cases:**\n- Agent/automation lists available projects regardless of type.\n- Dashboard displays a unified project inventory.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getProjectsUnified",
        "parameters": [
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional repeatable project type filter: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION. Repeat the parameter to select multiple types; omit it to retrieve all types.",
            "required": false,
            "style": "form",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "Supported project types for unified project operations",
                "enum": [
                  "REPLICATION",
                  "MAINFRAME_REPLICATION",
                  "ADVANCED_REPLICATION"
                ]
              }
            }
          },
          {
            "name": "loadDataflows",
            "in": "query",
            "description": "Include dataflows in each project response",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "page",
            "in": "query",
            "description": "Zero-based page index (0..N).\n\nValidation Rules:\n- Must be greater than or equal to 0\n- Default: 0 (first page)\n\nExamples:\n- page=0 (first page)\n- page=1 (second page)\n- page=5 (sixth page)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "maximum": 10000,
              "minimum": 0
            },
            "example": 0
          },
          {
            "name": "size",
            "in": "query",
            "description": "The number of items to return per page.\n\nValidation Rules:\n- Must be between 1 and 100 (inclusive)\n- Default: 10 items per page\n- Values exceeding 100 will return validation error\n\nExamples:\n- size=10 (10 items per page)\n- size=50 (50 items per page)\n- size=100 (maximum allowed)\n",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100,
              "minimum": 1
            },
            "example": 50
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Sorting criteria with flexible format options.\nMultiple sort parameters supported for multi-level sorting.\n\nDefault: name,asc (sort by name in ascending order)\n\nSort Format Options:\n- sort=property (e.g., sort=name - defaults to ascending)\n- sort=property,direction (e.g., sort=name,asc or sort=createdAt,desc)\n- sort=property,asc,ignoreCase (for case-insensitive sorting)\n\nMulti-level Sorting:\n- sort=property1,asc&sort=property2,desc (multiple sort parameters)\n- First sort criteria takes priority, subsequent ones used for tie-breaking\n\nNote: Supported sort properties vary by endpoint. Check the specific endpoint\ndocumentation for the list of valid sort properties for that resource type.\n\nExamples:\n- sort=name,asc (sort by name ascending)\n- sort=createdAt,desc (sort by creation date descending)\n- sort=type,asc&sort=name,asc (multi-level sort)\n- sort=deployedAt,desc,ignoreCase (case-insensitive sort)\n",
            "required": false,
            "explode": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "default": "name,asc"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectPageResponse"
                },
                "examples": {
                  "Mixed project types list": {
                    "description": "Mixed project types list",
                    "value": {
                      "content": [
                        {
                          "id": "cont-project-123",
                          "name": "continuous-customer-replication",
                          "projectType": "REPLICATION",
                          "pipelines": [
                            {
                              "id": "cdc-pipeline-1",
                              "name": "customer_cdc_pipeline"
                            }
                          ]
                        },
                        {
                          "id": "mf-project-456",
                          "name": "mainframe-payroll",
                          "projectType": "MAINFRAME_REPLICATION",
                          "mainframePipelines": [
                            {
                              "id": "mf-pipeline-1",
                              "name": "payroll_sync",
                              "pipelineType": "METADATA_REPLICATION"
                            }
                          ]
                        },
                        {
                          "id": "adv-project-789",
                          "name": "DemoValidationProject",
                          "projectType": "ADVANCED_REPLICATION",
                          "validationSummary": {
                            "status": "COMPLETED",
                            "message": "DSL validation completed: DSL_ONLY=PASSED; FULL=FAILED",
                            "lastValidatedAt": "2026-08-13T12:43:40.875Z",
                            "scopeStatuses": [
                              {
                                "scope": "DSL_ONLY",
                                "status": "PASSED",
                                "message": "DSL_ONLY validation passed"
                              },
                              {
                                "scope": "FULL",
                                "status": "FAILED",
                                "message": "FULL validation failed"
                              }
                            ]
                          },
                          "advancedPipelines": [
                            {
                              "id": "6a7dbb7d1f004ddf38f6d2cf",
                              "name": "Db2iToBQ8395-Db2iToBQ8395",
                              "type": "SYNCHRONIZE",
                              "sourceFile": "/db2itobq8395-db2itobq8395.dis.yaml",
                              "line": 24,
                              "column": 5,
                              "validationStatus": "FAILED",
                              "validationMessage": "tableDefRef 'CFCSTPDef' column 'CUSTNM' property 'precision' mismatched for Data Catalog table 'BQSTGSY28.CFCSTP' (expected='302', actual='30').",
                              "lastValidatedAt": "2026-08-13T12:43:39.771Z"
                            },
                            {
                              "id": "6a7dbb7d1f004ddf38f6d2d0",
                              "name": "new-pipeline-test",
                              "type": "SYNCHRONIZE",
                              "sourceFile": "/db2itobq8395-db2itobq8395.dis.yaml",
                              "line": 71,
                              "column": 5,
                              "validationStatus": "PASSED",
                              "lastValidatedAt": "2026-08-13T12:43:39.771Z"
                            }
                          ]
                        }
                      ],
                      "pageNumber": 0,
                      "pageSize": 10,
                      "totalElements": 3,
                      "totalPages": 1,
                      "first": true,
                      "last": true,
                      "partialResponse": false
                    }
                  },
                  "Continuous project list": {
                    "description": "Continuous project list",
                    "value": {
                      "content": [
                        {
                          "id": "cont-project-123",
                          "name": "continuous-customer-replication",
                          "projectType": "REPLICATION",
                          "pipelines": [
                            {
                              "id": "cdc-pipeline-1",
                              "name": "customer_cdc_pipeline"
                            }
                          ]
                        }
                      ],
                      "pageNumber": 0,
                      "pageSize": 10,
                      "totalElements": 1,
                      "totalPages": 1,
                      "first": true,
                      "last": true,
                      "partialResponse": false
                    }
                  },
                  "Mainframe project list": {
                    "description": "Mainframe project list",
                    "value": {
                      "content": [
                        {
                          "id": "mf-project-456",
                          "name": "mainframe-payroll",
                          "projectType": "MAINFRAME_REPLICATION",
                          "mainframePipelines": [
                            {
                              "id": "mf-pipeline-1",
                              "name": "payroll_sync",
                              "pipelineType": "METADATA_REPLICATION"
                            }
                          ]
                        }
                      ],
                      "pageNumber": 0,
                      "pageSize": 10,
                      "totalElements": 1,
                      "totalPages": 1,
                      "first": true,
                      "last": true,
                      "partialResponse": false
                    }
                  },
                  "Advanced Replication project list": {
                    "description": "Advanced Replication project list",
                    "value": {
                      "content": [
                        {
                          "id": "adv-project-789",
                          "name": "advanced-order-replication",
                          "projectType": "ADVANCED_REPLICATION",
                          "validationSummary": {
                            "status": "COMPLETED",
                            "message": "DSL validation completed: DSL_ONLY=PASSED",
                            "lastValidatedAt": "2026-08-12T06:22:07Z",
                            "scopeStatuses": [
                              {
                                "scope": "DSL_ONLY",
                                "status": "PASSED",
                                "message": "DSL_ONLY validation passed"
                              }
                            ]
                          },
                          "advancedPipelines": [
                            {
                              "id": "dsl-1",
                              "name": "orders-pipeline",
                              "type": "REPLICATE",
                              "sourceFile": "pipelines/orders.dis.yaml",
                              "line": 21,
                              "column": 5,
                              "validationStatus": "PASSED"
                            }
                          ]
                        }
                      ],
                      "pageNumber": 0,
                      "pageSize": 10,
                      "totalElements": 1,
                      "totalPages": 1,
                      "first": true,
                      "last": true,
                      "partialResponse": false
                    }
                  }
                }
              }
            }
          },
          "206": {
            "description": "Partial project list — one or more backing stores were unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectPageResponse"
                },
                "example": {
                  "content": [],
                  "pageNumber": 0,
                  "pageSize": 10,
                  "totalElements": 0,
                  "totalPages": 0,
                  "first": true,
                  "last": true,
                  "partialResponse": true,
                  "messages": [
                    {
                      "source": "MAINFRAME",
                      "projectTypes": [
                        "MAINFRAME_REPLICATION"
                      ],
                      "message": "Mainframe project store unavailable"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — invalid project type, pagination, or sort parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001",
                    "errors": {
                      "sort": "Invalid sort property 'foo'"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — project retrieval failed (DI-ADAPTER-PRJ-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Projects retrieval failed",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0001"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Create a new project of any type",
        "description": "Creates a Continuous Replication, Mainframe Replication, or Advanced Replication\n(DSL) project through a single type-agnostic endpoint by delegating to\nthe integration platform.\n\n**Features:**\n- Accepts all three project types via the `projectType` field.\n- Returns the newly created project ID in the `Location` header and response body.\n- Enforces name uniqueness within the workspace.\n\n**Use Cases:**\n- Agent/automation creates a project as the first step of an onboarding workflow.\n- Provision projects of different types programmatically without switching endpoints.\n\n**Authorization:** Requires `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createProjectUnified",
        "requestBody": {
          "description": "Project creation payload",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedProjectCreateRequest"
              },
              "example": {
                "name": "customer_replication",
                "description": "Replicates customer data from Oracle to Snowflake",
                "projectType": "REPLICATION"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Project created",
            "headers": {
              "Location": {
                "description": "URI of the newly created project",
                "style": "simple",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateProjectResponse"
                },
                "example": {
                  "id": "6a757b2d9d7697fe03ff32e7"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — invalid or missing fields",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001",
                    "errors": {
                      "projectType": "Project type cannot be null"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::create or legacy replication-pipeline::manage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — project with the same name already exists (DI-ADAPTER-PRJ-0006)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project already exists",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0006"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — project creation failed (DI-ADAPTER-PRJ-0003)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Project creation failed",
                  "instance": "/v1/integration/projects",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0003"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Retrieve a project of any type by ID",
        "description": "Retrieves detailed information for a specific project, regardless of its type.\n\n**Features:**\n- Works for Continuous Replication, Mainframe, and Advanced Replication projects.\n- Optional `projectType` hint improves routing when the type is known.\n- Independent control of dataflow, data-connection, and pipeline loading.\n- Continuous projects expose `pipelines`; Mainframe projects expose\n  `mainframePipelines`; Advanced Replication projects expose\n  `advancedPipelines` as a read-only summary of persisted DSL pipeline rows,\n  including source-file location and high-level validation metadata.\n- Advanced Replication responses also expose project-level `validationSummary`\n  alongside `advancedPipelines`.\n\n**Use Cases:**\n- Agent/automation fetches project details before performing an operation.\n- Inspect a project's current configuration and high-level validation state.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getProjectByIdUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project to retrieve",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "loadDataflows",
            "in": "query",
            "description": "Include dataflow summaries in the project response.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "loadDataConnections",
            "in": "query",
            "description": "Include data connections in the project response",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectResponse"
                },
                "examples": {
                  "Continuous project": {
                    "description": "Continuous project",
                    "value": {
                      "id": "cont-project-123",
                      "name": "continuous-customer-replication",
                      "projectType": "REPLICATION",
                      "pipelines": [
                        {
                          "id": "cdc-pipeline-1",
                          "name": "customer_cdc_pipeline"
                        }
                      ],
                      "metabases": [],
                      "logreaders": []
                    }
                  },
                  "Mainframe project": {
                    "description": "Mainframe project",
                    "value": {
                      "id": "mf-project-456",
                      "name": "mainframe-payroll",
                      "projectType": "MAINFRAME_REPLICATION",
                      "mainframePipelines": [
                        {
                          "id": "mf-pipeline-1",
                          "name": "payroll_sync",
                          "pipelineType": "METADATA_REPLICATION"
                        }
                      ]
                    }
                  },
                  "Advanced Replication project": {
                    "description": "Advanced Replication project",
                    "value": {
                      "id": "adv-project-789",
                      "name": "advanced-order-replication",
                      "projectType": "ADVANCED_REPLICATION",
                      "validationSummary": {
                        "status": "COMPLETED",
                        "message": "DSL validation completed: DSL_ONLY=PASSED",
                        "lastValidatedAt": "2026-08-12T06:22:07Z",
                        "scopeStatuses": [
                          {
                            "scope": "DSL_ONLY",
                            "status": "PASSED",
                            "message": "DSL_ONLY validation passed"
                          }
                        ]
                      },
                      "advancedPipelines": [
                        {
                          "id": "dsl-1",
                          "name": "orders-pipeline",
                          "description": "Replicate order events",
                          "type": "REPLICATE",
                          "runOnHost": "engine-east-1",
                          "sourceFile": "pipelines/orders.dis.yaml",
                          "line": 21,
                          "column": 5,
                          "validationStatus": "PASSED",
                          "validationMessage": "Pipeline validation passed",
                          "lastValidatedAt": "2026-08-12T06:22:07Z"
                        }
                      ]
                    }
                  },
                  "Advanced Replication project (validation issues)": {
                    "description": "Advanced Replication project (validation issues)",
                    "value": {
                      "id": "6a757b2d9d7697fe03ff32e7",
                      "name": "DemoValidationProject",
                      "projectType": "ADVANCED_REPLICATION",
                      "validationSummary": {
                        "status": "COMPLETED",
                        "message": "DSL validation completed: DSL_ONLY=PASSED; FULL=FAILED",
                        "lastValidatedAt": "2026-08-13T12:43:40.875Z",
                        "scopeStatuses": [
                          {
                            "scope": "DSL_ONLY",
                            "status": "PASSED",
                            "message": "DSL_ONLY validation passed"
                          },
                          {
                            "scope": "FULL",
                            "status": "FAILED",
                            "message": "FULL validation failed"
                          }
                        ]
                      },
                      "advancedPipelines": [
                        {
                          "id": "6a7dbb7d1f004ddf38f6d2cf",
                          "name": "Db2iToBQ8395-Db2iToBQ8395",
                          "type": "SYNCHRONIZE",
                          "sourceFile": "/db2itobq8395-db2itobq8395.dis.yaml",
                          "line": 24,
                          "column": 5,
                          "validationStatus": "FAILED",
                          "validationMessage": "tableDefRef 'CFCSTPDef' column 'CUSTNM' property 'precision' mismatched for Data Catalog table 'BQSTGSY28.CFCSTP' (expected='302', actual='30').",
                          "lastValidatedAt": "2026-08-13T12:43:39.771Z"
                        },
                        {
                          "id": "6a7dbb7d1f004ddf38f6d2d0",
                          "name": "new-pipeline-test",
                          "type": "SYNCHRONIZE",
                          "sourceFile": "/db2itobq8395-db2itobq8395.dis.yaml",
                          "line": 71,
                          "column": 5,
                          "validationStatus": "PASSED",
                          "lastValidatedAt": "2026-08-13T12:43:39.771Z"
                        }
                      ]
                    }
                  },
                  "Advanced Replication project (no validation issues)": {
                    "description": "Advanced Replication project (no validation issues)",
                    "value": {
                      "id": "6a757b2d9d7697fe03ff32e7",
                      "name": "DemoValidationProject",
                      "projectType": "ADVANCED_REPLICATION",
                      "validationSummary": {
                        "status": "COMPLETED",
                        "message": "DSL validation completed: DSL_ONLY=PASSED; FULL=PASSED",
                        "lastValidatedAt": "2026-08-13T13:01:51.296Z",
                        "scopeStatuses": [
                          {
                            "scope": "DSL_ONLY",
                            "status": "PASSED",
                            "message": "DSL_ONLY validation passed"
                          },
                          {
                            "scope": "FULL",
                            "status": "PASSED",
                            "message": "FULL validation passed"
                          }
                        ]
                      },
                      "advancedPipelines": [
                        {
                          "id": "6a7dbb7d1f004ddf38f6d2cf",
                          "name": "Db2iToBQ8395-Db2iToBQ8395",
                          "type": "SYNCHRONIZE",
                          "sourceFile": "/db2itobq8395-db2itobq8395.dis.yaml",
                          "line": 24,
                          "column": 5,
                          "validationStatus": "PASSED",
                          "lastValidatedAt": "2026-08-13T13:01:49.856Z"
                        },
                        {
                          "id": "6a7dbedd1f004ddf38f6d2d1",
                          "name": "new-pipeline-test1",
                          "type": "COPY",
                          "sourceFile": "/db2itobq8395-db2itobq8395.dis.yaml",
                          "line": 71,
                          "column": 5,
                          "validationStatus": "PASSED",
                          "lastValidatedAt": "2026-08-13T13:01:49.856Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/adv-project-789",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/adv-project-789",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found (DI-ADAPTER-PRJ-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project not found",
                  "instance": "/v1/integration/projects/project-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — project retrieval failed (DI-ADAPTER-PRJ-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Project retrieval failed",
                  "instance": "/v1/integration/projects/adv-project-789",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0002"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Delete a project of any type",
        "description": "Deletes a Continuous Replication, Mainframe, or Advanced Replication (DSL) project\nthrough a single type-agnostic endpoint.\n\n**Features:**\n- Handles all three project types uniformly.\n- Optional `projectType` hint short-circuits the store probe.\n- Optional `forceDelete` bypasses pre-condition guards.\n- Returns a structured 409 listing every unmet pre-condition.\n- This removes the whole project and every file in it immediately, regardless of each\nfile's phase. This differs from deleting a single Advanced Replication file (see the\nper-file delete endpoint), where an already-committed (approved) file is instead marked\npending_deletion until the next commit, to preserve lineage for shipped content.\n\n**Use Cases:**\n- Agent/automation deletes a project regardless of its type.\n- Pre-flight a delete and surface blocking conditions to the user.\n\n**Authorization:** Requires `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteProjectUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project to delete",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "forceDelete",
            "in": "query",
            "description": "When true, bypasses pre-condition guards",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Project deleted"
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found (DI-ADAPTER-PRJ-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project not found",
                  "instance": "/v1/integration/projects/project-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Deletion blocked (DI-ADAPTER-PRJ-0008)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project deletion is blocked",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0008",
                    "projectId": "project-123",
                    "projectType": "REPLICATION",
                    "blockingConditions": [
                      {
                        "code": "PIPELINE_RUNNING",
                        "resource": "customer-pipeline",
                        "message": "Pipeline is currently running"
                      },
                      {
                        "code": "CAPTURE_ENABLED",
                        "resource": "customer-capture",
                        "message": "Capture is active"
                      }
                    ]
                  }
                }
              }
            }
          },
          "500": {
            "description": "Deletion failed (DI-ADAPTER-PRJ-0007)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Project deletion failed",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0007"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      },
      "patch": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Partially update project metadata of any type",
        "description": "Applies a JSON Merge Patch (RFC 7396) to project metadata through the store\nselected by the optional `projectType` hint, or the project's persisted type\nwhen omitted.\n\n**Features:**\n- Supports Continuous Replication, Mainframe Replication, and Advanced Replication (DSL) projects.\n- Omitted fields are preserved; an explicit `null` removes the corresponding stored value.\n- Nested objects (`emailSettings`, `deploySettings`) are merged member-by-member, not replaced wholesale.\n\n**Use Cases:**\n- Update a project's description without resending the full project payload.\n- Toggle email alerting or adjust deploy timeout defaults independently.\n\n**Authorization:** Requires `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "patchProjectUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project to patch",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "requestBody": {
          "description": "Sparse project metadata update. Omitted fields are preserved and explicit null removes a field.",
          "content": {
            "application/merge-patch+json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "Updated description",
                "useEmailAlert": true,
                "emailSettings": {
                  "smtpServerAddress": "smtp.example.com",
                  "emailFrom": "alerts@example.com",
                  "emailTo": "team@example.com",
                  "minimumSeverityAlertLevel": "WARNING"
                },
                "deploySettings": {
                  "queueTimeoutInMinutes": 4,
                  "stopRequestTimeoutInMinutes": 4,
                  "tableCaptureTimeoutInMinutes": 8,
                  "forceDeploy": false
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Project metadata updated"
          },
          "400": {
            "description": "Invalid patch request or project type (DI-ADAPTER-PRJ-0014)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid patch request or project type",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0014"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::update or legacy replication-pipeline::manage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found (DI-ADAPTER-PRJ-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project not found",
                  "instance": "/v1/integration/projects/project-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0005"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Project changed concurrently (DI-ADAPTER-PRJ-0015)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project changed concurrently",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0015"
                  }
                }
              }
            }
          },
          "415": {
            "description": "Unsupported media type — Content-Type must be application/merge-patch+json"
          },
          "502": {
            "description": "Data Catalog patch failed (DI-ADAPTER-PRJ-0016)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.3",
                  "title": "Bad Gateway",
                  "status": 502,
                  "detail": "Data Catalog patch failed",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0016"
                  }
                }
              }
            }
          },
          "503": {
            "description": "Data Catalog is unavailable (DI-ADAPTER-PRJ-0017)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.4",
                  "title": "Service Unavailable",
                  "status": 503,
                  "detail": "Data Catalog is unavailable",
                  "instance": "/v1/integration/projects/project-123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0017"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/files": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "List project file metadata",
        "description": "Retrieves file metadata through the unified project API for either Advanced Replication (DSL)\nor Mainframe Replication projects.\n\n**Features:**\n- Returns metadata only (identity, path, version, phase, MIME type, size, and content hash).\n  File content is intentionally excluded; call the get-file endpoint when content is needed.\n- For Mainframe Replication, `pipelineId` scopes the listing to one pipeline. For Advanced\n  Replication, `pipelineId` is ignored and file listing is driven by `view` and\n  `revisionNumber`.\n- `view=CURRENT` returns the current working set (including in-progress file states such as\n  draft updates). `view=COMMITTED` returns a committed snapshot; if `revisionNumber` is omitted,\n  the latest committed revision is returned.\n- `pathPrefix` limits the response to files under a specific folder or path prefix.\n- `projectType` is an optional routing hint and is normally inferred from the project.\n\n**Use Cases:**\n- Populate a file-tree UI for a project.\n- Enumerate committed files at a specific revision.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "listProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline to list files for (Mainframe Replication only). Ignored for Advanced Replication, which scopes by revisionNumber/view instead.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "view",
            "in": "query",
            "description": "File-tree view to list: CURRENT | COMMITTED",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Project file-tree view scope: CURRENT (working set) or COMMITTED (a specific revision)",
              "enum": [
                "CURRENT",
                "COMMITTED"
              ]
            },
            "example": "CURRENT"
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number to list when view is COMMITTED",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pathPrefix",
            "in": "query",
            "description": "Optional path prefix filter restricting the listed files",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project file metadata retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileListingResponse"
                },
                "example": {
                  "projectId": "project-123",
                  "projectType": "ADVANCED_REPLICATION",
                  "view": "CURRENT",
                  "revisionNumber": 4,
                  "latestRevisionNumber": 4,
                  "files": [
                    {
                      "fileId": "file-001",
                      "fileName": "main.dis.yaml",
                      "flattenedPath": "main.dis.yaml",
                      "version": 3,
                      "phase": "approved",
                      "mimeType": "application/yaml",
                      "sizeBytes": 2048,
                      "entryFile": true
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — file listing failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Create one project file",
        "description": "Creates one project file through the unified project API, for either an Advanced Replication (DSL) project or a Mainframe Replication pipeline.\n\n**Features:**\n- `content` is always a Base64-encoded string, regardless of `mimeType` (for example `application/yaml`, `application/x-yaml`, or `text/plain`) — this keeps binary-safe transport consistent for every file type and avoids JSON-escaping issues with raw file text.\n- The response includes file metadata plus an `ETag` response header carrying a fingerprint hash of the created content; the same hash is also returned as `contentHash` in the body so callers that only inspect the JSON body (without reading headers) can still detect changes.\n- Fails with a conflict when a file already exists at the requested path — use the update\nendpoint instead, or move/rename the existing file first.\n- For Mainframe Replication, pass the pipeline identifier via `pipelineId`; Advanced Replication ignores `pipelineId` and instead uses the project's working set plus optional `revisionNumber`.\n\n**Use Cases:**\n- VS Code extension creates a new DSL file within a project.\n- User seeds initial project files during onboarding or scaffolds a new pipeline definition.\n\n**Authorization:** Requires `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createProjectFileUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type (required for routing): REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number targeted by the create",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Project file creation payload. content is always Base64-encoded, independent of mimeType.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileUpsertRequest"
              },
              "examples": {
                "DSL YAML source file": {
                  "description": "DSL YAML source file",
                  "value": {
                    "flattenedPath": "sources/customers.dis.yaml",
                    "content": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4=",
                    "mimeType": "application/yaml",
                    "encoding": "utf-8"
                  }
                },
                "application/yaml MIME type variant": {
                  "description": "application/yaml MIME type variant",
                  "value": {
                    "flattenedPath": "sources/customers.dis.yaml",
                    "content": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4=",
                    "mimeType": "application/yaml",
                    "encoding": "utf-8"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "File created successfully",
            "headers": {
              "ETag": {
                "description": "Fingerprint hash of the created file content, matching the response body's contentHash field",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileSummaryResponse"
                },
                "example": {
                  "fileId": "file-002",
                  "fileName": "customers.dis.yaml",
                  "flattenedPath": "sources/customers.dis.yaml",
                  "version": 1,
                  "phase": "draft",
                  "mimeType": "application/yaml",
                  "sizeBytes": 512,
                  "contentHash": "d41d8cd98f00b204e9800998ecf8427e",
                  "entryFile": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::create when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — a file already exists at the requested path (DI-ADAPTER-PRF-0003), or the project has a commit in progress (DI-ADAPTER-PRF-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "File already exists": {
                    "description": "File already exists",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                      "title": "Conflict",
                      "status": 409,
                      "detail": "A file already exists at this location. Choose a different path.",
                      "instance": "/v1/integration/projects/project-123/files",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0003"
                      }
                    }
                  },
                  "Commit in progress": {
                    "description": "Commit in progress",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                      "title": "Conflict",
                      "status": 409,
                      "detail": "Project file operation cannot be completed while the project is busy",
                      "instance": "/v1/integration/projects/project-123/files",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0005"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — file creation failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/files/{fileId}": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Get one project file",
        "description": "Retrieves one project file's metadata, and optionally its content, for either an Advanced Replication (DSL) project or a Mainframe Replication pipeline.\n\n**Features:**\n- Set `includeContent=true` to also return the file's Base64-encoded content; omit it (or set it to `false`) to fetch only metadata when you don't need the file body, saving payload size for large files.\n- Pass the caller's last-known `ETag` value in the `If-None-Match` request header to check for changes without re-downloading unchanged content — if nothing changed since that value, the client library returns a not-modified result with no body.\n- The response `ETag` header is a fingerprint hash of the current content.\n\n**Use Cases:**\n- VS Code extension opens a file for editing.\n- User polls for content changes using ETags to avoid unnecessary downloads.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getProjectFileUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of the file to retrieve",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeContent",
            "in": "query",
            "description": "When true, includes the file content in the response",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "If-None-Match",
            "in": "header",
            "description": "Optional If-None-Match header value for conditional retrieval",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Project file retrieved",
            "headers": {
              "ETag": {
                "description": "Strong validator for the current file content",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileDetailResponse"
                },
                "example": {
                  "fileId": "file-002",
                  "fileName": "customers.dis.yaml",
                  "flattenedPath": "sources/customers.dis.yaml",
                  "version": 1,
                  "phase": "draft",
                  "mimeType": "application/yaml",
                  "sizeBytes": 512,
                  "contentHash": "d41d8cd98f00b204e9800998ecf8427e",
                  "entryFile": false,
                  "content": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4="
                }
              }
            }
          },
          "304": {
            "description": "Project file has not changed since the supplied If-None-Match value"
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project or file does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — file retrieval failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Update one project file",
        "description": "Updates one project file through the unified project API.\nThe request `content` is a Base64-encoded string. The response returns updated metadata\nand a new ETag; it does not return decoded content.\n\n**Features:**\n- Supports optimistic concurrency via the `If-Match` request header.\n- Fails with a precondition-failed response when the file was changed since it was opened.\n- Skips the write and returns `unchanged: true` when the submitted content, `mimeType`, and `encoding` already match the stored file (for example, a retried autosave); the file's version is not incremented in that case.\n\n**Use Cases:**\n- VS Code extension saves edits to an open file.\n- User applies a content patch to an existing file.\n\n**Authorization:** Requires `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "updateProjectFileUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of the file to update",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type (required for routing): REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number targeted by the update",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional If-Match header value for optimistic concurrency control",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Project file content update payload",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileUpdateRequest"
              },
              "example": {
                "content": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4gIHNjaGVtYTogUFVCTElDXG4=",
                "mimeType": "application/yaml",
                "encoding": "utf-8",
                "expectedVersion": 1
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "File updated successfully",
            "headers": {
              "ETag": {
                "description": "Strong validator for the updated file content",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileSummaryResponse"
                },
                "example": {
                  "fileId": "file-002",
                  "fileName": "customers.dis.yaml",
                  "flattenedPath": "sources/customers.dis.yaml",
                  "version": 2,
                  "phase": "draft",
                  "mimeType": "application/yaml",
                  "sizeBytes": 640,
                  "entryFile": false,
                  "unchanged": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::update when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project or file does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — the project has a commit in progress, so file operations are temporarily blocked until it finishes (DI-ADAPTER-PRF-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project file operation cannot be completed while the project is busy",
                  "instance": "/v1/integration/projects/project-123/files/file-002",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0005"
                  }
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — file changed since it was last opened (DI-ADAPTER-PRF-0004)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.13",
                  "title": "Precondition Failed",
                  "status": 412,
                  "detail": "This project file was changed by someone else after it was opened",
                  "instance": "/v1/integration/projects/project-123/files/file-002",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — file update failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Delete one project file",
        "description": "Deletes one project file through the unified project API.\n\n**Features:**\n- For Advanced Replication, deletion behavior depends on the file's current phase: a\n**draft** file (never committed) is removed immediately and permanently. An **approved**\nfile (already part of a committed revision) is not removed immediately — instead it is\nmarked **pending_deletion**, a tombstone that keeps the file visible in historical/committed\nrevisions until the next commit finalizes the removal, preserving lineage for already-shipped\ncontent. Deleting a file that is already **pending_deletion** is a no-op (idempotent).\n- For Mainframe Replication, the file is removed immediately; there is no draft/approved\nphase distinction.\n- Removes the file from the project's current working set.\n\n**Use Cases:**\n- VS Code extension deletes a file from the project explorer.\n- User cleans up unused files from a project.\n\n**Authorization:** Requires `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "deleteProjectFileUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "Unique identifier of the file to delete",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type (required for routing): REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number targeted by the delete",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "description": "Optional If-Match header value for optimistic concurrency control",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Project file deleted"
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — the project has a commit in progress, so file operations are temporarily blocked until it finishes (DI-ADAPTER-PRF-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project file operation cannot be completed while the project is busy",
                  "instance": "/v1/integration/projects/project-123/files/file-002",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0005"
                  }
                }
              }
            }
          },
          "412": {
            "description": "Precondition Failed — supplied If-Match does not match the current file (DI-ADAPTER-PRF-0004)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.13",
                  "title": "Precondition Failed",
                  "status": 412,
                  "detail": "This project file was changed by someone else after it was opened",
                  "instance": "/v1/integration/projects/project-123/files/file-002",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0004"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::delete when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project or file does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — file deletion failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/files/batch-save": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Bulk save project files",
        "description": "Bulk saves project files and preserves generated 200 or 207 bulk-operation statuses.\nEach file's `content` is a Base64-encoded string. Successful results return metadata;\ncontent is Base64-encoded wherever a content field is included.\n\n**Features:**\n- Accepts up to 250 files per batch request (connect-portal's configured maximum).\n- Returns per-file results so partial failures do not abort the entire batch.\n- Skips the write and returns `unchanged: true` on an item when its submitted content, `mimeType`, and `encoding` already match the stored file (for example, a retried autosave) — this avoids creating unnecessary draft versions.\n- Update items (identified by `fileId`) may supply an optional `expectedContentHash` precondition; if it does not match the file's current stored content hash, only that item fails — other items in the batch are unaffected. Ignored for new-file items.\n\n**Use Cases:**\n- VS Code extension pushes multiple locally edited files in one request.\n- User seeds a project with a directory of generated files.\n\n**Authorization:** Requires `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "batchSaveProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type (required for routing): REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number targeted by the batch save",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Bulk project-file save request (maximum 250 files)",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileBulkSaveRequest"
              },
              "examples": {
                "New files": {
                  "description": "New files",
                  "value": {
                    "files": [
                      {
                        "flattenedPath": "sources/customers.dis.yaml",
                        "content": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4=",
                        "mimeType": "application/yaml"
                      }
                    ]
                  }
                },
                "Existing file update with content-hash precondition": {
                  "description": "Existing file update with content-hash precondition",
                  "value": {
                    "files": [
                      {
                        "fileId": "file-002",
                        "content": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4=",
                        "mimeType": "application/yaml",
                        "expectedContentHash": "d41d8cd98f00b204e9800998ecf8427e"
                      }
                    ]
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "All files saved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileBatchResultResponse"
                },
                "example": {
                  "results": [
                    {
                      "fileId": "file-002",
                      "successful": true,
                      "unchanged": false,
                      "metadata": {
                        "fileId": "file-002",
                        "flattenedPath": "sources/customers.dis.yaml",
                        "version": 2
                      }
                    }
                  ]
                }
              }
            }
          },
          "207": {
            "description": "One or more file saves failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileBatchResultResponse"
                },
                "example": {
                  "results": [
                    {
                      "fileId": "file-002",
                      "successful": true,
                      "metadata": {
                        "fileId": "file-002",
                        "version": 2
                      }
                    },
                    {
                      "fileId": "file-003",
                      "successful": false,
                      "error": "This file changed while you were editing it. Reload it and try again."
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — batch size exceeds the maximum allowed (DI-ADAPTER-PRF-0006), or the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "Batch too large": {
                    "description": "Batch too large",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "This batch contains too many files. Use 250 files or fewer.",
                      "instance": "/v1/integration/projects/project-123/files/batch-save",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0006"
                      }
                    }
                  },
                  "Unsupported project type": {
                    "description": "Unsupported project type",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Files are not supported for the requested project type",
                      "instance": "/v1/integration/projects/project-123/files",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0009"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::create when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — the project has a commit in progress, so file operations are temporarily blocked until it finishes (DI-ADAPTER-PRF-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project file operation cannot be completed while the project is busy",
                  "instance": "/v1/integration/projects/project-123/files/batch-save",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — batch save failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/files/batch-delete": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Bulk delete project files",
        "description": "Bulk deletes project files and preserves generated 200 or 207 bulk-operation statuses.\n\n**Features:**\n- Accepts up to 250 file identifiers per batch request (connect-portal's configured maximum).\n- Returns per-file results so partial failures do not abort the entire batch.\n\n**Use Cases:**\n- VS Code extension deletes multiple files selected in the explorer.\n- User prunes generated files no longer referenced by the project.\n\n**Authorization:** Requires `replication-pipeline::delete` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "batchDeleteProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type (required for routing): REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number targeted by the batch delete",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "requestBody": {
          "description": "Bulk project-file delete request (maximum 250 files)",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileBulkDeleteRequest"
              },
              "example": {
                "fileIds": [
                  "file-002",
                  "file-003"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "All files deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileBatchResultResponse"
                },
                "example": {
                  "results": [
                    {
                      "fileId": "file-002",
                      "successful": true
                    }
                  ]
                }
              }
            }
          },
          "207": {
            "description": "Some files could not be deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileBatchResultResponse"
                },
                "example": {
                  "results": [
                    {
                      "fileId": "file-002",
                      "successful": true
                    },
                    {
                      "fileId": "file-999",
                      "successful": false,
                      "error": "We couldn't find the requested file."
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — batch size exceeds the maximum allowed (DI-ADAPTER-PRF-0006), or the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "Batch too large": {
                    "description": "Batch too large",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "This batch contains too many files. Use 250 files or fewer.",
                      "instance": "/v1/integration/projects/project-123/files/batch-delete",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0006"
                      }
                    }
                  },
                  "Unsupported project type": {
                    "description": "Unsupported project type",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Files are not supported for the requested project type",
                      "instance": "/v1/integration/projects/project-123/files",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0009"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::delete when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — the project has a commit in progress, so file operations are temporarily blocked until it finishes (DI-ADAPTER-PRF-0005)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "Project file operation cannot be completed while the project is busy",
                  "instance": "/v1/integration/projects/project-123/files/batch-delete",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0005"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — batch delete failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/files/move": {
      "put": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Rename or clone project files",
        "description": "Renames or clones one or more project files in a single request, for either an Advanced Replication (DSL) project or a Mainframe Replication pipeline.\n\n**Features:**\n- `action=RENAME` moves each matched file to its new path and removes it from the old path; `action=CLONE` copies each matched file to the new path and leaves the original in place.\n- Each entry's `currentFilePath`/`newFilePath` can target a single file, or — when `pathPrefix=true` on that entry — every file under a path prefix (for example renaming an entire `sources/` folder to `sources-legacy/` in one call).\n- `conflictResolution` (Mainframe Replication only) controls what happens when a computed target path already exists: `REPLACE_ALL` overwrites every conflicting target, `IGNORE_ALL` skips every conflicting entry and reports it, `PARTIAL` applies the non-conflicting entries and reports the rest. Advanced Replication always reports conflicts individually instead.\n\n**Use Cases:**\n- VS Code extension renames a file via the project explorer.\n- User duplicates a template file to bootstrap a new source definition.\n\n**Authorization:** Requires `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "moveProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number targeted by the move",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "action",
            "in": "query",
            "description": "The move action: RENAME | CLONE",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Action to perform when moving project files: RENAME moves a file to a new path, CLONE copies it while leaving the original in place",
              "enum": [
                "RENAME",
                "CLONE"
              ]
            },
            "example": "RENAME"
          },
          {
            "name": "conflictResolution",
            "in": "query",
            "description": "Optional conflict-resolution strategy applied when the target path exists (Mainframe Replication only)",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Strategy used when a rename or clone target path already exists (Mainframe Replication only): REPLACE_ALL overwrites every conflicting target, IGNORE_ALL skips every conflicting entry and reports it, PARTIAL applies the entries that do not conflict and reports the rest",
              "enum": [
                "REPLACE_ALL",
                "IGNORE_ALL",
                "PARTIAL"
              ]
            }
          }
        ],
        "requestBody": {
          "description": "Files to rename or clone",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileMoveRequest"
              },
              "example": {
                "files": [
                  {
                    "currentFilePath": "sources/customers.dis.yaml",
                    "newFilePath": "sources/customers_v2.dis.yaml"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "File operation completed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileMoveResultResponse"
                },
                "example": {
                  "filesRenamedOrCloned": [
                    "sources/customers_v2.dis.yaml"
                  ],
                  "filesIgnored": [],
                  "filesDeleted": [],
                  "conflictedFiles": [],
                  "validationErrors": []
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::update when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project or a source file does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — target path already exists (DI-ADAPTER-PRF-0003)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "A file already exists at this location. Choose a different path.",
                  "instance": "/v1/integration/projects/project-123/files/move",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0003"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — file move failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/files/search": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Search project file paths and content",
        "description": "Searches project file paths and content through the unified project API.\n\n**Features:**\n- Supports plain-text, case/word-sensitive, and regular-expression search.\n- Restricts scanning with `filesToInclude` glob/exact/regex selectors.\n\n**Use Cases:**\n- VS Code extension implements project-wide \"Find in Files\".\n- User locates every reference to a connection name before renaming it.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "searchProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Project file search criteria",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileSearchCriteriaRequest"
              },
              "examples": {
                "Plain-text search": {
                  "description": "Plain-text search",
                  "value": {
                    "searchTerm": "oracle_source",
                    "matchCase": false,
                    "regex": false,
                    "view": "CURRENT"
                  }
                },
                "Case-sensitive whole-word search": {
                  "description": "Case-sensitive whole-word search",
                  "value": {
                    "searchTerm": "CUSTNM",
                    "matchCase": true,
                    "matchWord": true,
                    "regex": false,
                    "view": "CURRENT"
                  }
                },
                "Regular-expression search scoped to YAML files": {
                  "description": "Regular-expression search scoped to YAML files",
                  "value": {
                    "searchTerm": "connection:\\s*oracle_.*",
                    "regex": true,
                    "filesToInclude": [
                      {
                        "kind": "GLOB",
                        "pattern": "sources/**/*.dis.yaml"
                      }
                    ],
                    "view": "CURRENT"
                  }
                },
                "Search a committed revision": {
                  "description": "Search a committed revision",
                  "value": {
                    "searchTerm": "oracle_source",
                    "regex": false,
                    "view": "COMMITTED",
                    "revisionNumber": 7
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Project file search completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileSearchResultResponse"
                },
                "example": {
                  "files": [
                    {
                      "fileId": "file-002",
                      "fileName": "customers.dis.yaml",
                      "flattenedPath": "sources/customers.dis.yaml",
                      "matches": [
                        {
                          "line": 2,
                          "startColumn": 15,
                          "endColumn": 28,
                          "searchContentResult": "oracle_source"
                        }
                      ]
                    }
                  ],
                  "filesScanned": 12,
                  "matchCount": 1,
                  "filesSkipped": 0,
                  "truncated": false
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — the search expression is invalid (DI-ADAPTER-PRF-0007), or the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "Invalid search expression": {
                    "description": "Invalid search expression",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "This search expression isn't valid. Check it and try again.",
                      "instance": "/v1/integration/projects/project-123/files/search",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0007"
                      }
                    }
                  },
                  "Unsupported project type": {
                    "description": "Unsupported project type",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                      "title": "Bad Request",
                      "status": 400,
                      "detail": "Files are not supported for the requested project type",
                      "instance": "/v1/integration/projects/project-123/files",
                      "properties": {
                        "errorCode": "DI-ADAPTER-PRF-0009"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — search failed (DI-ADAPTER-PRF-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/files/archive": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Download all project files as a ZIP archive",
        "description": "Downloads every file currently associated with the project — not a single file — bundled\ninto one ZIP archive. This is a bulk read/export operation; it never changes the lifecycle\nphase of a file. Passes through the generated archive response without application-side\nbyte-array buffering.\n\n**Features:**\n- Streams the ZIP directly, one entry at a time.\n- Optionally scoped by `view`, `revisionNumber`, and `pathPrefix`.\n- A size pre-flight runs before any bytes are written, so an over-budget request fails\n  cleanly with `413` instead of half-writing a ZIP. A content-read failure that occurs\n  **after** streaming has started aborts the connection instead of returning a new HTTP\n  problem response — the `500` example below only applies to failures detected before\n  streaming begins.\n\n**Use Cases:**\n- VS Code extension downloads a project snapshot for offline inspection.\n- User exports a committed revision's files for audit retention.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "archiveProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique identifier of the Mainframe Replication pipeline (Mainframe Replication only). Ignored for Advanced Replication.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "view",
            "in": "query",
            "description": "Optional file-tree view to export: CURRENT | COMMITTED",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Project file-tree view scope: CURRENT (working set) or COMMITTED (a specific revision)",
              "enum": [
                "CURRENT",
                "COMMITTED"
              ]
            },
            "example": "CURRENT"
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number whose files are exported",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "pathPrefix",
            "in": "query",
            "description": "Optional path prefix filter restricting the exported files",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ZIP archive of every file associated with the project",
            "headers": {
              "Content-Disposition": {
                "description": "Attachment filename for the resolved project ZIP archive",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — the resolved project type does not support files (DI-ADAPTER-PRF-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Files are not supported for the requested project type",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist (DI-ADAPTER-PRF-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "We couldn't find the requested file.",
                  "instance": "/v1/integration/projects/project-404/files/file-404",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0001"
                  }
                }
              }
            }
          },
          "413": {
            "description": "Payload Too Large — export size exceeds the maximum allowed, detected pre-flight before any bytes are streamed (DI-ADAPTER-PRF-0008)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.14",
                  "title": "Payload Too Large",
                  "status": 413,
                  "detail": "This ZIP export is too large. Narrow the files and try again.",
                  "instance": "/v1/integration/projects/project-123/files/archive",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0008"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — export failed before streaming started (DI-ADAPTER-PRF-0002). A content-read failure discovered after streaming has already begun aborts the connection instead of producing this response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't complete the file operation. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/connections/resolve": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Resolve every in-scope DSL connection to its real Catalog connection id",
        "description": "Compiles an Advanced Replication project's DSL and resolves every in-scope connection to its\nreal Catalog connection id.\n\n**Features:**\n- Returns every resolved connection with its DSL connection id, Catalog reference, resolved\n  Catalog connection id, connection type, and every usage site (pipeline, and the role played\n  there — source, target, lookup, schema registry, staging, or unreferenced).\n- Scoped to one pipeline when `pipelineId` is supplied, or every pipeline in the project otherwise.\n\n**Use Cases:**\n- Discover which connections a project (or one of its pipelines) is associated with before\n  submitting a composite pipeline component configuration request.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "resolveConnectionsUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Optional pipeline identifier; when omitted, every pipeline in the project is resolved",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Connections resolved",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ResolvedConnectionsResponse"
                },
                "example": {
                  "pipelineId": "pipeline-456",
                  "connections": [
                    {
                      "dslConnectionId": "src_conn",
                      "catalogRef": "catalog-ref-abc",
                      "connectionId": "conn-456",
                      "connectionType": "POSTGRES",
                      "usages": [
                        {
                          "pipelineName": "pipeline-456",
                          "pipelineId": "pipeline-456",
                          "role": "SOURCE"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/project-123/connections/resolve",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/project-123/connections/resolve",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or pipeline not found (DI-ADAPTER-DSL-0029)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL project or pipeline not found for connection resolution",
                  "instance": "/v1/integration/projects/project-123/connections/resolve",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0029"
                  }
                }
              }
            }
          },
          "500": {
            "description": "DSL failed to compile, or a connection reference failed to resolve (DI-ADAPTER-DSL-0030)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to resolve DSL pipeline connections",
                  "instance": "/v1/integration/projects/project-123/connections/resolve",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0030"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/connections/{connectionId}/metabases": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Retrieve the Metabase for one pipeline connection",
        "description": "Retrieves the Metabase bound to one project connection.\n\n**Features:**\n- Returns Metabase details (name, vault connection, operational parameters).\n- Password fields are always masked or omitted.\n\n**Use Cases:**\n- Inspect an existing Metabase before configuring a pipeline.\n- Verify Metabase state after a composite configuration call.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getMetabaseUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connectionId",
            "in": "path",
            "description": "Unique connection identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type; MAINFRAME_REPLICATION is rejected",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ADVANCED_REPLICATION",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved Metabase",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/MetabaseResponse"
                },
                "example": {
                  "name": "metabase-conn-456",
                  "version": "1",
                  "dataConnectionId": "conn-456",
                  "vaultConnectionId": "vault-conn-789",
                  "parameters": {
                    "REPLICATION_USER_ID": "replicator_user"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — MAINFRAME_REPLICATION is not supported (DI-ADAPTER-PRJ-0013)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "The requested project type is not supported for this operation",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/metabases?projectType=MAINFRAME_REPLICATION",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0013"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Metabase not found (DI-ADAPTER-MBS-0004)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "No metabase found",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MBS-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error (DI-ADAPTER-MBS-0005)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve metabase",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/metabases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MBS-0005"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/connections/{connectionId}/log-readers": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Retrieve LogReader(s) for one pipeline connection",
        "description": "Returns the single named LogReader when `logReaderName` is supplied, or every LogReader on\nthis connection when omitted.\n\n**Features:**\n- Returns LogReader details (name, journal name, identifier, operational parameters).\n\n**Use Cases:**\n- Inspect a specific LogReader by name.\n- List every LogReader configured on a connection.\n\n**logReaderName parameter (optional):**\n- Provide to retrieve exactly one LogReader by name.\n- Omit to retrieve every LogReader on the connection.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getLogReaderUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connectionId",
            "in": "path",
            "description": "Unique connection identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "logReaderName",
            "in": "query",
            "description": "Optional LogReader name; single result when given, all LogReaders on the connection when omitted",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type; MAINFRAME_REPLICATION is rejected",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ADVANCED_REPLICATION",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved LogReader(s)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PageResponse"
                },
                "example": {
                  "content": [
                    {
                      "name": "logreader-conn-456",
                      "journal": "UDBCS1",
                      "dataConnectionId": "conn-456",
                      "logReaderId": 1,
                      "parameters": {}
                    }
                  ],
                  "pageNumber": 0,
                  "pageSize": 500,
                  "numberOfElements": 1,
                  "totalElements": 1,
                  "totalPages": 1,
                  "first": true,
                  "last": true
                }
              }
            }
          },
          "400": {
            "description": "Bad request — MAINFRAME_REPLICATION is not supported (DI-ADAPTER-PRJ-0013)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "The requested project type is not supported for this operation",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/log-readers?projectType=MAINFRAME_REPLICATION",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0013"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/log-readers",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/log-readers",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "LogReader not found (DI-ADAPTER-LGR-0002)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "No log reader found",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/log-readers",
                  "properties": {
                    "errorCode": "DI-ADAPTER-LGR-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error (DI-ADAPTER-LGR-0003)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve log reader",
                  "instance": "/v1/integration/projects/project-123/connections/conn-456/log-readers",
                  "properties": {
                    "errorCode": "DI-ADAPTER-LGR-0003"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/pipelines/{pipelineId}/databases": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Retrieve prepared/skipped user-database state for one connection within one pipeline",
        "description": "`connectionId` is required; state is scoped to this connection within this pipeline, never\nmerged across every connection on the pipeline.\n\n**Features:**\n- Returns database names successfully prepared and database names skipped/failed.\n- Never returns preparation credentials.\n\n**Use Cases:**\n- Determine whether a connection's user databases are already prepared before prompting again.\n- Surface skipped databases for explicit remediation/retry.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getPreparedUserDatabaseStateUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique pipeline identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "connectionId",
            "in": "query",
            "description": "Unique connection identifier this state is scoped to",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type; MAINFRAME_REPLICATION is rejected",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ADVANCED_REPLICATION",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved prepared user-database state",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/PreparedUserDatabaseConnectionStateResponse"
                },
                "example": {
                  "connectionId": "conn-456",
                  "preparedUserDbs": [
                    "customer_db",
                    "orders_db"
                  ],
                  "skippedPrepareUserDbs": [
                    "archive_db"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request — MAINFRAME_REPLICATION is not supported (DI-ADAPTER-PRJ-0013)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "The requested project type is not supported for this operation",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/databases?projectType=MAINFRAME_REPLICATION",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0013"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/databases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/databases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "No prepared user-database state found (DI-ADAPTER-UDB-0002)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "No prepared user database state found for the given pipeline",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/databases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-UDB-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error (DI-ADAPTER-UDB-0003)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve prepared user database state",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/databases",
                  "properties": {
                    "errorCode": "DI-ADAPTER-UDB-0003"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/pipelines/{pipelineId}/configuration": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Configure Metabase, LogReader, and UserDatabase components for one pipeline",
        "description": "Orchestrates Metabase, LogReader, and prepared-user-database configuration for one pipeline\nin a single call using the same connectionId-keyed request shape for both `REPLICATION` and\n`ADVANCED_REPLICATION` projects.\n\n**Features:**\n- Accepts three independent, optional arrays (`metabases`, `logReaders`, `userDatabases`); an\n  omitted array leaves that component family untouched.\n- Every entry is upserted (get-then-create-or-update) independently by its own `connectionId`\n  and processed in parallel.\n- Every submitted `connectionId` is pre-flight validated against the pipeline's actual\n  connection membership; a non-member entry is marked FAILED before its processor is dispatched.\n- For `REPLICATION`, each entry's `connectionId` is matched against the pipeline's actual\n  source/target connection and routed through the exact same orchestration path as the\n  dedicated Continuous composite endpoint — identical behavior, same request shape at this\n  API boundary. Continuous supports at most one LogReader entry (bound to the source\n  connection); additional entries are reported as FAILED (`DI-ADAPTER-LGR-0006`).\n- For `ADVANCED_REPLICATION`, entries route through the DSL-specific processors with\n  connection-type-aware parameter defaulting.\n- A component failure is isolated and never blocks the others — the endpoint always returns\n  201 with a per-entry result (`CREATED`/`UPDATED`/`FAILED` plus `errorCode` when failed).\n\n**Use Cases:**\n- Configure every component a pipeline needs in one call after Full Validation.\n- Re-run configuration idempotently; existing components are updated, not duplicated.\n\n**Authorization:** Requires `replication-pipeline::create` or `replication-pipeline::manage`.\n",
        "operationId": "configurePipelineComponentsUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique pipeline identifier",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type; REPLICATION and ADVANCED_REPLICATION are supported, MAINFRAME_REPLICATION is rejected",
            "required": false,
            "schema": {
              "type": "string",
              "default": "ADVANCED_REPLICATION",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "requestBody": {
          "description": "Composite Metabase/LogReader/UserDatabase configuration payload",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PipelineComponentsConfigurationRequest"
              },
              "example": {
                "metabases": [
                  {
                    "connectionId": "conn-456",
                    "name": "adv-metabase",
                    "vaultConnectionId": "vault-conn-123",
                    "replicationUser": "replicator_user",
                    "replicationPassword": "***",
                    "adminUserId": "admin",
                    "adminUserPassword": "***",
                    "parameters": {
                      "ENABLE_CDC": "true"
                    },
                    "isTarget": false
                  }
                ],
                "logReaders": [
                  {
                    "connectionId": "conn-456",
                    "name": "reader-1",
                    "journalName": "journal-1",
                    "parameters": {
                      "MAX_RECORD_LENGTH": "4096"
                    }
                  }
                ],
                "userDatabases": [
                  {
                    "connectionId": "conn-789",
                    "vaultConnectionId": "vault-conn-123",
                    "userDataBaseNames": [
                      "db1",
                      "db2"
                    ],
                    "adminUser": "admin",
                    "adminUserPassword": "***",
                    "replicationUser": "replicator_user",
                    "isTarget": true
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Per-entry configuration results (always returned, even when individual entries fail)",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedPipelineConfigurationResponse"
                },
                "example": {
                  "requestId": "config-req-project-123-pipeline-456-a1b2c3d4",
                  "overallStatus": "SUCCESS",
                  "executionTimeInMs": 842,
                  "metabaseResults": [
                    {
                      "connectionId": "conn-456",
                      "status": "CREATED",
                      "metabase": {
                        "name": "metabase-conn-456",
                        "version": "1",
                        "dataConnectionId": "conn-456",
                        "vaultConnectionId": "vault-conn-789",
                        "parameters": {}
                      },
                      "message": "Metabase created successfully"
                    }
                  ],
                  "logReaderResults": [
                    {
                      "connectionId": "conn-456",
                      "status": "CREATED",
                      "logReader": {
                        "name": "logreader-conn-456",
                        "journal": "UDBCS1",
                        "dataConnectionId": "conn-456",
                        "logReaderId": 1,
                        "parameters": {}
                      },
                      "message": "LogReader created successfully"
                    }
                  ],
                  "userDatabaseResults": [
                    {
                      "connectionId": "conn-789",
                      "status": "CREATED",
                      "result": {
                        "successMap": {
                          "customer_db": "Prepared successfully"
                        },
                        "failureMap": {}
                      },
                      "message": "User databases prepared successfully"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request — MAINFRAME_REPLICATION is not supported",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "The requested project type is not supported for this operation",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/configuration?projectType=MAINFRAME_REPLICATION",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0013"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/project-123/pipelines/pipeline-456/configuration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/validate": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Validate a project of any type",
        "description": "Validates a project of any type through a single type-agnostic endpoint.\n\n**Features:**\n- `DSL_ONLY` scope performs a synchronous syntax check and returns HTTP 200 immediately.\n- `FULL` scope performs the syntax check then starts semantic validation asynchronously.\n  When semantic validation is in progress the endpoint returns HTTP 202 with a\n  `Location` header pointing to the status resource — poll until `validateStatus.status`\n  is terminal (`COMPLETED`, `FAILED`, etc.).\n- `scope` and `revisionNumber` apply to Advanced Replication projects; `revisionNumber`\n  selects the project-file revision to validate.\n- `incremental` applies only to Mainframe Replication projects, which validate files in\n  chunks due to large project sizes. The first Mainframe validation always establishes a\n  full baseline regardless of the flag. Later requests with `incremental=true` validate\n  only file chunks changed since that baseline.\n- Optional `projectType` hint avoids an internal store probe when the type is known.\n\n**Use Cases:**\n- Agent/automation triggers a DSL syntax check before committing Advanced Replication project files.\n- Validate a complete Advanced Replication project including semantic checks and poll status.\n- Validate incremental Mainframe Replication file changes after an initial full baseline.\n\n**Authorization:** Requires either `replication-pipeline::create` or `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "validateProjectUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project to validate",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "scope",
            "in": "query",
            "description": "Validation scope: DSL_ONLY | FULL",
            "required": false,
            "schema": {
              "type": "string",
              "default": "FULL",
              "enum": [
                "DSL_ONLY",
                "FULL"
              ]
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type hint: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "incremental",
            "in": "query",
            "description": "Mainframe Replication only. The first validation always establishes a full baseline. For later validations, true validates only changed file chunks since that baseline.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true
            },
            "example": true
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number to validate",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Synchronous validation completed, including all DSL_ONLY validations and terminal FULL validations",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectValidationResponse"
                },
                "example": {
                  "validateStatus": {
                    "status": "COMPLETED",
                    "lastUpdatedOn": "2026-08-10T06:22:07+05:30",
                    "message": "DSL validation completed: DSL_ONLY=PASSED",
                    "completePercentage": 100,
                    "projectValidation": {
                      "severityLevel": "VALID",
                      "message": "PASSED | DSL_ONLY=PASSED",
                      "warning": 0,
                      "incomplete": 0,
                      "error": 0,
                      "fatal": 0,
                      "total": 0,
                      "scopeStatuses": [
                        {
                          "scope": "DSL_ONLY",
                          "status": "PASSED",
                          "findingCount": 0,
                          "errorCount": 0,
                          "warningCount": 0,
                          "message": "DSL_ONLY validation passed",
                          "findings": []
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "202": {
            "description": "FULL semantic validation remains in progress. Poll the URI in the Location header.",
            "headers": {
              "Location": {
                "description": "URI for GET project validation and commit status polling",
                "style": "simple",
                "schema": {
                  "type": "string",
                  "format": "uri"
                },
                "example": "/v1/integration/projects/6a757b2d9d7697fe03ff32e7/status"
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/projects/project-123/validate",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001",
                    "errors": {
                      "scope": "must be one of [DSL_ONLY, FULL]"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/validate",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::create or replication-pipeline::update when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/validate",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found for validation (DI-ADAPTER-PRJ-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project not found for validation",
                  "instance": "/v1/integration/projects/project-404/validate",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0009"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Validation failed (DI-ADAPTER-PRJ-0010)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Project validation failed",
                  "instance": "/v1/integration/projects/project-123/validate",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0010"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/status": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Get project status",
        "description": "Retrieves the existing project status response. Validation and commit fields retain their\ncurrent behavior. Continuous Replication projects may additionally include `analyzeStatus`\nwhile conversion analysis status is available; the field is omitted otherwise.\n\n**Features:**\n- Returns a complete status envelope: validation phase, per-scope results, findings,\n  severity level, completion percentage, and the most recent commit state.\n                                                            - Optionally returns `analyzeStatus` for Continuous Replication conversion analysis polling.\n- Use the `Location` URI returned by a `202 Accepted` validation response as the\n  polling target; continue polling while `validateStatus.status` is `INPROGRESS`.\n- Works for all project types: Continuous Replication, Mainframe, and Advanced Replication.\n\n**Use Cases:**\n- Poll semantic validation progress after triggering a `FULL` scope validation.\n                                                            - Poll conversion analysis after calling `analyzeProjectConversion` when `analyzeStatus`\n                                                                    is present, until its status reaches a terminal state.\n- Check whether a project has been committed and is ready for activation.\n- Inspect per-scope findings and severity after a completed validation.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getProjectStatusUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Status retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectStatusResponse"
                },
                "example": {
                  "projectId": "6a757b2d9d7697fe03ff32e7",
                  "validateStatus": {
                    "status": "INPROGRESS",
                    "lastUpdatedOn": "2026-08-10T06:23:49+05:30",
                    "message": "latest revision; DSL_ONLY=PASSED; SEMANTIC=INPROGRESS",
                    "completePercentage": 30,
                    "projectValidation": {
                      "severityLevel": "S4_WARNING",
                      "message": "INPROGRESS | DSL_ONLY=PASSED; FULL=INPROGRESS",
                      "scopeStatuses": [
                        {
                          "scope": "DSL_ONLY",
                          "status": "PASSED",
                          "findingCount": 0,
                          "errorCount": 0,
                          "warningCount": 0,
                          "findings": []
                        },
                        {
                          "scope": "FULL",
                          "status": "INPROGRESS",
                          "findingCount": 0,
                          "errorCount": 0,
                          "warningCount": 0,
                          "findings": []
                        }
                      ]
                    }
                  },
                  "commitStatus": {
                    "status": "OPEN",
                    "committed": false,
                    "lastUpdatedOn": "2026-08-07T06:38:39+05:30"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project status not found (DI-ADAPTER-PRJ-0011)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project status not found",
                  "instance": "/v1/integration/projects/project-404/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0011"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Project status retrieval failed (DI-ADAPTER-PRJ-0012)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Project status retrieval failed",
                  "instance": "/v1/integration/projects/project-123/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRJ-0012"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/monitoring/status": {
      "get": {
        "tags": [
          "Monitor Unified Integration Projects"
        ],
        "summary": "Get project monitoring status",
        "description": "Retrieves the runtime monitoring status for a single project of any supported type,\ndelegating to the Connect Monitoring Service's unified status endpoint.\n\n**Features:**\n- Returns a single, project-type-discriminated status envelope: `continuousAdvanced`\n  for Continuous Replication and Advanced Replication projects, `mainframe` for\n  Mainframe Replication projects.\n- `includeDetails` maps to table-level details for Continuous/Advanced projects and\n  source/target details for Mainframe projects.\n- `latency` includes mainframe latency details and is ignored for other project types.\n- Works for all project types: Continuous Replication, Mainframe, and Advanced Replication.\n\n**Use Cases:**\n- Poll runtime pipeline health and throughput for a monitoring dashboard.\n- Inspect data-flow, version, and CDWH statistics for a Continuous or Advanced project.\n- Inspect pipeline-level and agent-level status for a Mainframe project.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getProjectMonitoringStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type used to route the status lookup",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "includeDetails",
            "in": "query",
            "description": "Include type-specific monitoring details",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "latency",
            "in": "query",
            "description": "Include mainframe latency details (Mainframe Replication only)",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project monitoring status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectMonitoringStatusResponse"
                },
                "example": {
                  "id": "66f0c1e2a1b2c3d4e5f60789",
                  "projectId": "project-123",
                  "projectType": "REPLICATION",
                  "tenantId": "tenant-456",
                  "status": {
                    "continuousAdvanced": {
                      "agentId": "agent-789",
                      "name": "customer-replication",
                      "generationTimestamp": "2026-09-11T06:23:49Z",
                      "dataFlows": [],
                      "versions": [],
                      "overallPipelineStatuses": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "projectType is required",
                  "instance": "/v1/integration/projects/project-123/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0002"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/project-123/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.3",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/project-123/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project monitoring status not found (DI-ADAPTER-STA-0002)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project status not found",
                  "instance": "/v1/integration/projects/project-123/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Project monitoring status retrieval failed (DI-ADAPTER-STA-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve project status",
                  "instance": "/v1/integration/projects/project-123/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/monitoring/status": {
      "post": {
        "tags": [
          "Monitor Unified Integration Projects"
        ],
        "summary": "Get monitoring statuses for a mixed list of projects",
        "description": "Retrieves runtime monitoring statuses for a mixed list of Continuous, Mainframe, and\nAdvanced Replication projects in a single call, delegating to the Connect Monitoring\nService's unified bulk status endpoint. Results preserve request order.\n\n**Features:**\n- Accepts 1 to 50 projects per request; `projectId` values must be unique.\n- Each project's `latency` flag is honored only for Mainframe projects and ignored\n  for Continuous and Advanced projects.\n- Returns `found: false` and a null `status` for any project with no monitoring data,\n  rather than failing the whole request.\n\n**Use Cases:**\n- Populate a multi-project monitoring dashboard with a single call.\n- Refresh status for a known set of projects without one call per project.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "getProjectMonitoringStatuses",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "description": "1 to 50 projects; projectId values must be unique",
                "items": {
                  "$ref": "#/components/schemas/UnifiedProjectMonitoringStatusRequest"
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successfully retrieved project monitoring statuses",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectMonitoringStatusListResponse"
                },
                "example": {
                  "results": [
                    {
                      "id": "66f0c1e2a1b2c3d4e5f60789",
                      "projectId": "project-123",
                      "projectType": "REPLICATION",
                      "tenantId": "tenant-456",
                      "found": true,
                      "status": {
                        "continuousAdvanced": {
                          "agentId": "agent-789",
                          "name": "customer-replication"
                        }
                      }
                    },
                    {
                      "id": "",
                      "projectId": "project-999",
                      "projectType": "MAINFRAME_REPLICATION",
                      "tenantId": "",
                      "found": false,
                      "status": null
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad request (empty list, more than 50 projects, duplicate projectId, or invalid projectType; DI-ADAPTER-STA-0009)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid unified project monitoring status request",
                  "instance": "/v1/integration/projects/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0009"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authentication is required",
                  "instance": "/v1/integration/projects/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.3",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "The caller is not authorized for this resource",
                  "instance": "/v1/integration/projects/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Project monitoring statuses retrieval failed (DI-ADAPTER-STA-0001)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve project status",
                  "instance": "/v1/integration/projects/monitoring/status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-STA-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/advanced-dsl/projects/{projectId}/files/{fileId}": {
      "get": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Get a single project file",
        "description": "Retrieves metadata and optional content for a specific file within the project.\n\n**Features:**\n- Single-file metadata retrieval\n- Optional content inclusion (CLOB fetch)\n- Version, phase, and hash information\n\n**Use Cases:**\n- File detail inspection in VS Code explorer\n- Selective single-file download\n- Pre-edit conflict check on individual files\n\n**Scenarios:**\n- Quick content fetch for a single file preview\n- Metadata fetch only (`includeContent=false`) for lightweight checks\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "The catalog asset ID of the file",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "asset-file-001"
          },
          {
            "name": "includeContent",
            "in": "query",
            "description": "Whether to include base64-encoded file content",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved file",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileRecord"
                },
                "example": {
                  "catalogAssetId": "asset-file-001",
                  "flattenedPath": "pipelines/customer-sync.dis.yaml",
                  "name": "customer-sync.dis.yaml",
                  "version": 2,
                  "phase": "approved",
                  "contentHash": "e3b0c44298fc1c149afbf4c8996fb924...",
                  "sizeBytes": 2048,
                  "mimeType": "application/x-yaml"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files/asset-file-001",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — user lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files/asset-file-001",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "File not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL project not found",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files/asset-file-001",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0011"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error during file retrieval",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve file from catalog",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/files/asset-file-001",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0005"
                  }
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Advanced DSL Project Management"
        ],
        "summary": "Update a DSL file",
        "description": "Updates the content and metadata of an existing DSL file asset within a project\nusing a multipart/form-data upload.\n\n**Features**\n- Updates content, content-hash, size, MIME type, encoding, and phase.\n- Ensures the file is linked to a revision via `Includes` relationship after save.\n- Accepts optional `revisionNumber`; when omitted, links against the latest project revision.\n\n**Use Cases**\n- Persisting a modified DSL file during a push operation.\n\n**Scenarios**\n- File exists → patch content, hash, size, MIME type, encoding, and phase.\n- File not yet linked to selected/latest revision → create missing `Includes` relationship.\n- File already linked to selected/latest revision → no duplicate relationship is created.\n\n**Required Permissions**: `replication-pipeline::update` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "updateProjectFile",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "fileId",
            "in": "path",
            "description": "The existing file asset ID to update",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "file-abc123"
          },
          {
            "name": "mimeType",
            "in": "query",
            "description": "MIME type of the file content",
            "required": false,
            "schema": {
              "type": "string",
              "default": "application/yaml"
            },
            "example": "application/yaml"
          },
          {
            "name": "encoding",
            "in": "query",
            "description": "Encoding applied to the content",
            "required": false,
            "schema": {
              "type": "string",
              "default": "utf-8"
            },
            "example": "utf-8"
          },
          {
            "name": "phase",
            "in": "query",
            "description": "Target lifecycle phase to apply after save",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "approved"
          },
          {
            "name": "version",
            "in": "query",
            "description": "Expected current version for optimistic concurrency on existing files (optional)",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 2
          },
          {
            "name": "flattenedPath",
            "in": "query",
            "description": "Flattened path of the file within the project (e.g., pipelines/customer-sync.dis.yaml). If not provided, preserves existing path.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "pipelines/customer-sync.dis.yaml"
          },
          {
            "name": "revisionNumber",
            "in": "query",
            "description": "Optional revision number to associate the file with. If omitted, latest project revision is used.",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 3
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "File content as a multipart binary part (key: 'file')"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "File updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SaveDslFileResponse"
                },
                "example": {
                  "fileId": "file-abc123",
                  "name": "customer-sync.dis.yaml",
                  "flattenedPath": "customer-sync.dis.yaml",
                  "phase": "draft",
                  "version": 2,
                  "timestamp": "2026-05-17T10:00:00Z"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request — missing file part, unreadable content, or constraint violation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Insufficient permissions — requires `replication-pipeline::update` or legacy `replication-pipeline::manage`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project not found (error code: DI-ADAPTER-DSL-0011 DSL_PROJECT_NOT_FOUND)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "DSL project not found",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0011"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Version conflict for existing file (error code: DI-ADAPTER-DSL-0025 DSL_FILE_VERSION_CONFLICT)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "File version conflict — expected version does not match current version",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0025"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error — catalog asset patch, create, or retrieval failed (error codes: DI-ADAPTER-DSL-0020 DSL_FILE_SAVE_FAILED)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to save DSL file content",
                  "instance": "/v1/integration/advanced-dsl/projects/project-123/revisions/rev-abc123/files/file-abc123",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DSL-0020"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/continuous/projects/{projectId}/snapshot": {
      "get": {
        "tags": [
          "Build and Configure Continuous Integration Projects"
        ],
        "summary": "Get a continuous project snapshot",
        "description": "Retrieves a snapshot for a staged Project.\nSnapshot is a full point-in-time picture of the project configuration as it was staged, distinguished by its version number.\nIt captures project metadata, pipeline definitions, and parameter values at staging time.\n\n**Snapshot lifecycle semantics:**\n- Snapshot data is created during stage/commit lifecycle steps\n- `LATEST` returns the newest available snapshot\n- `ACTIVATED` returns the last deployed baseline snapshot\n- The response can be used for drift detection and delta computation in incremental commit/deploy flows\n\n**Request controls:**\n- `type` selects which snapshot baseline to retrieve (`LATEST`, `ACTIVATED`)\n- `includePipelines` controls whether pipeline details are included\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getProjectSnapshot",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Snapshot baseline to retrieve",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "LATEST",
                "ACTIVATED"
              ]
            },
            "example": "LATEST"
          },
          {
            "name": "includePipelines",
            "in": "query",
            "description": "Include pipeline details in the snapshot response",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved project snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectSnapshotResponse"
                },
                "example": {
                  "projectId": "project-123",
                  "projectName": "Customer_360_Replication",
                  "projectDescription": "Continuous replication baseline",
                  "projectType": "REPLICATION",
                  "createdAt": "2025-01-05T08:00:00Z",
                  "createdBy": "integration-admin",
                  "modifiedAt": "2025-01-09T10:15:30Z",
                  "modifiedBy": "integration-admin",
                  "committedAt": "2025-01-09T10:16:00Z",
                  "committedBy": "integration-admin",
                  "activatedAt": "2025-01-09T10:20:00Z",
                  "activatedBy": "integration-admin",
                  "activated": true,
                  "version": 5,
                  "pipelines": [
                    {
                      "id": "pipeline-1",
                      "name": "Orders_Replicate",
                      "description": "Replicates orders from DB2 to Snowflake",
                      "pipelineType": "REPLICATE",
                      "projectId": "project-123",
                      "source": {
                        "id": "conn-src-001",
                        "name": "DB2_Source_Connection",
                        "type": "DB2I",
                        "parameters": {
                          "DATABASE": "PRODDB",
                          "SCHEMA": "SALES"
                        }
                      },
                      "target": {
                        "id": "conn-tgt-002",
                        "name": "Snowflake_Analytics",
                        "type": "SNOWFLAKE",
                        "parameters": {
                          "DATABASE": "ANALYTICS_DB",
                          "SCHEMA": "SALES_REPLICA"
                        }
                      },
                      "createdAt": "2025-01-05T08:30:00Z",
                      "createdBy": "integration-admin",
                      "modifiedAt": "2025-01-09T10:15:00Z",
                      "modifiedBy": "integration-admin",
                      "properties": {
                        "APPLY_CHANGE_TABLES": "Y",
                        "COMMIT_FREQUENCY": "100"
                      }
                    }
                  ],
                  "parameters": {
                    "incremental_mode": "true",
                    "checkpoint_interval": "3600"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request - invalid query parameter value",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation failed for argument [type]",
                  "instance": "/v1/integration/continuous/projects/project-123/snapshot",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0001"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Invalid or missing credentials",
                  "instance": "/v1/integration/continuous/projects/project-123/snapshot",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Access denied",
                  "instance": "/v1/integration/continuous/projects/project-123/snapshot",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Project or snapshot not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project not found for id: project-123",
                  "instance": "/v1/integration/continuous/projects/project-123/snapshot",
                  "properties": {
                    "errorCode": "DI-ADAPTER-SNP-0002"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error while retrieving snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to retrieve project snapshot",
                  "instance": "/v1/integration/continuous/projects/project-123/snapshot",
                  "properties": {
                    "errorCode": "DI-ADAPTER-SNP-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/export": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Export mainframe pipelines as ZIP",
        "description": "Exports multiple mainframe pipelines as a ZIP archive containing their configurations and associated files.\n\n**Process Overview:**\n1. **Request Validation** - Validates project ID and pipeline IDs\n2. **Pipeline Collection** - Gathers all specified pipelines and their configurations\n3. **Content Aggregation** - Collects pipeline configurations, parameters, and associated files\n4. **Archive Creation** - Packages all pipeline data into a ZIP archive preserving structure\n5. **Stream Preparation** - Prepares the archive for download\n6. **Response Delivery** - Returns the ZIP file with appropriate headers\n\n**Key Features:**\n- Bulk export support for multiple pipelines in a single operation\n- Includes pipeline configurations, parameters, and associated files\n- Efficient streaming for large export sets\n- Directory structure preservation in archive\n\n**Use Cases:**\n- Backup multiple pipeline configurations\n- Transfer pipeline configurations between environments\n- Archive project pipeline configurations\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "exportMainframePipelines",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "description": "Set of pipeline IDs to export",
                "items": {
                  "type": "string"
                },
                "uniqueItems": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "ZIP archive of exported pipelines",
            "headers": {
              "Cache-Control": {
                "description": "No-cache headers to prevent caching of the ZIP file",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              },
              "Content-Disposition": {
                "description": "Indicates that the content is an attachment with filename",
                "style": "simple",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/octet-stream": {}
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid or empty pipeline IDs set\n- Pipeline IDs contain invalid formats\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/export",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/export",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks 'replication-pipeline::view' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/export",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Project does not exist\n- One or more specified pipelines do not exist within the project\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/export",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Pipeline export operation failure\n- ZIP archive creation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/export",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0001"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/import": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Import mainframe pipelines from ZIP",
        "description": "Imports multiple mainframe pipelines from a ZIP archive containing their configurations and associated files.\n\n**Process Overview:**\n1. **Request Validation** - Validates ZIP file\n2. **Archive Extraction** - Extracts pipeline configurations and files from ZIP\n3. **Pipeline Creation** - Creates pipelines based on extracted configurations\n4. **File Association** - Associates extracted files with created pipelines\n5. **Validation** - Validates imported pipeline configurations\n\n**Key Features:**\n- Bulk import support for multiple pipelines in a single operation\n- Supports pipeline configurations, parameters, and associated files\n- Validates imported configurations before creation\n\n**Use Cases:**\n- Restore pipeline configurations from backup\n- Transfer pipeline configurations between environments\n- Deploy pre-configured pipeline sets\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "importMainframePipelines",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MainframeImportPipelineRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Pipelines successfully imported from ZIP archive",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePipelineImportResponse"
                },
                "example": {
                  "successes": [
                    {
                      "projectId": "456",
                      "pipelineId": "67f8d2c8e4b0a1b2c3d4e5f6",
                      "pipelineName": "customer-data-pipeline",
                      "importedPipelineName": "customer-data-pipeline",
                      "status": "IMPORTED"
                    }
                  ],
                  "errors": [
                    {
                      "errorType": "CONFLICT_ERROR",
                      "pipelineName": "failed-pipeline",
                      "errorMessage": "Pipeline with name 'failed-pipeline' already exists in the project."
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Validation failed due to one of the following reasons:\n- Invalid project ID\n- Invalid archive format\n- Invalid file size\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/import",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/import",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/import",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Resource not found due to one of the following reasons:\n- Project does not exist\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/import",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Server encountered an unexpected condition, such as:\n- Pipeline import operation failure\n- ZIP archive extraction failure\n- Pipeline creation failure during import\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/import",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFD-0002"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/files/migration": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Run mainframe file hash migration",
        "description": "Backfills missing content hashes for Mainframe pipeline files so editable-sync and conflict detection can operate reliably.\n\n**Feature Context:**\n- Supports migration of legacy pipelines where file hashes were not persisted.\n- Enables hash-based compatibility checks required by pull/link-folder workflows.\n\n**Use Cases:**\n- **Targeted migration** for specific files by providing `fileIds`.\n- **Pipeline-wide migration** by sending an empty request body or an empty `fileIds` list.\n\n**Request Semantics:**\n- `fileIds` omitted or empty: migrate all eligible files in the pipeline.\n- `fileIds` present: migrate only matching IDs in the current pipeline.\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "runMainframeFileHashMigration",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          }
        ],
        "requestBody": {
          "description": "Optional file migration scope. Use empty body or empty fileIds list to migrate all eligible files.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframeHashMigrationRequest"
              },
              "examples": {
                "migrateSpecificFiles": {
                  "description": "migrateSpecificFiles",
                  "value": {
                    "fileIds": [
                      "file-101",
                      "file-205"
                    ]
                  }
                },
                "migrateAllFiles": {
                  "description": "migrateAllFiles",
                  "value": {
                    "fileIds": []
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Hash migration completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframeHashMigrationResponse"
                },
                "examples": {
                  "targetedMigration": {
                    "summary": "Targeted file migration",
                    "description": "targetedMigration",
                    "value": {
                      "updated": 2,
                      "skipped": 3,
                      "failed": 0,
                      "compatibilityReady": true
                    }
                  },
                  "fullPipelineMigration": {
                    "summary": "Pipeline-wide migration",
                    "description": "fullPipelineMigration",
                    "value": {
                      "updated": 5,
                      "skipped": 0,
                      "failed": 0,
                      "compatibilityReady": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid file IDs provided for migration",
                  "instance": "/v1/integration/mainframe/projects/project-123/pipelines/pipeline-456/files/migration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0009"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/project-123/pipelines/pipeline-456/files/migration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Pipeline not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/project-123/pipelines/pipeline-456/files/migration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Unexpected migration failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/project-123/pipelines/pipeline-456/files/migration",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0010"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Pull selected mainframe files by file IDs",
        "description": "Hydrates selected files by `fileIds` for Mainframe pipelines using parallel fetching.\n\n**Features:**\n- Selected-file hydration only (no full-pipeline download)\n- Parallel fetch for improved performance\n- Returns file payload with content and metadata (including size)\n- Validates project/pipeline association before hydration\n\n**Use Cases:**\n- Initial selective pull for user-selected files\n- Manual refresh of a scoped subset of tracked files\n- Recovering specific remote files during conflict resolution workflows\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "pullMainframeFiles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "fileIds",
            "in": "query",
            "description": "File IDs to hydrate",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "includeHidden",
            "in": "query",
            "description": "Include hidden/system files in pull hydration. When false (default), hidden files are filtered from responses. Files explicitly requested by ID are always honoured regardless of this flag.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully hydrated selected files",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePullFilesResponse"
                },
                "example": {
                  "projectId": "project-123",
                  "pipelineId": "pipeline-456",
                  "requestedFileCount": 2,
                  "hydratedFileCount": 2,
                  "files": [
                    {
                      "id": "67f8d2c8e4b0a1b2c3d4e5f6",
                      "fileName": "pipeline.sqd",
                      "size": 4096,
                      "content": "U1FEIERBVEEuLi4=",
                      "fileApplicationType": "ENGINE_SCRIPT",
                      "contentHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
                    },
                    {
                      "id": "67f8d2c8e4b0a1b2c3d4e5f7",
                      "fileName": "replication.rpl",
                      "size": 2048,
                      "content": "UlBMIERBVEEuLi4=",
                      "fileApplicationType": "CONFIGURATION",
                      "contentHash": "b94d27b9934d3e08a52e52d7da7dabfac484efe04a858123f1e5b0e4b11ea180"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid request or empty fileIds",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Validation error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Missing required permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Pipeline or requested file IDs not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Selected pull execution failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0013"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull-status": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get pull status for mainframe files",
        "description": "Returns pull readiness status and size count for mainframe file hydration.\n\n**Features:**\n- Validates project/pipeline association before evaluation\n- Hidden/system files excluded by default (`includeHidden=false`)\n- If `fileIds` is omitted or empty, **all visible pipeline files** are selected for evaluation\n- If `fileIds` is provided, evaluates only those specific file IDs against the latest remote snapshot\n- Returns available/missing counts and total payload size (real count, not estimated)\n- Surfaces explicit `ready`, `unavailable`, or `nothing_to_fetch` pull status\n\n**Use Cases:**\n- UX preflight before user confirms pull\n- Showing selected file count and expected download footprint\n- Detecting stale selections when files were removed remotely\n- Full-pipeline evaluation when no fileIds specified\n\n**Required Permissions:** `replication-pipeline::view`\n",
        "operationId": "getMainframePullStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "fileIds",
            "in": "query",
            "description": "Selected file IDs for pull-status evaluation (if omitted or empty, evaluates all visible pipeline files)",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "includeHidden",
            "in": "query",
            "description": "Include hidden/system files in pull-status evaluation",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully computed pull readiness status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePullStatusResponse"
                },
                "examples": {
                  "Ready": {
                    "description": "Ready",
                    "value": {
                      "projectId": "project-123",
                      "pipelineId": "pipeline-456",
                      "requestedFileCount": 2,
                      "availableFileCount": 2,
                      "totalSizeBytes": 8192,
                      "unavailableFileIds": [],
                      "status": "ready"
                    }
                  },
                  "Unavailable": {
                    "description": "Unavailable",
                    "value": {
                      "projectId": "project-123",
                      "pipelineId": "pipeline-456",
                      "requestedFileCount": 2,
                      "availableFileCount": 1,
                      "totalSizeBytes": 4096,
                      "unavailableFileIds": [
                        "67f8d2c8e4b0a1b2c3d4e5f7"
                      ],
                      "status": "unavailable"
                    }
                  },
                  "NothingToFetch": {
                    "description": "NothingToFetch",
                    "value": {
                      "projectId": "project-123",
                      "pipelineId": "pipeline-456",
                      "requestedFileCount": 0,
                      "availableFileCount": 0,
                      "totalSizeBytes": 0,
                      "unavailableFileIds": [],
                      "status": "nothing_to_fetch"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Missing required permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0004"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to compute pull status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/pull-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0012"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Push mainframe files",
        "description": "Executes orchestrated push for Mainframe pipeline files.\n\n**Features:**\n- Phase-based orchestration: preflight, upload, rename, delete, reconcile\n- Preflight drift detection against expected snapshot fingerprint\n- Batch upload support with conflict resolution (`REPLACE_ALL`, `PARTIAL`, `FAIL`)\n- Returns per-phase status, counts, and final refreshed snapshot\n\n**Use Cases:**\n- Sync local extension edits to remote mainframe pipeline assets\n- Apply selective updates/deletes after local diff planning\n- Guard against stale push via drift checks before write operations\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "pushMainframeFiles",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project that owns the pipeline.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline that will be pushed.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "includeHidden",
            "in": "query",
            "description": "Include hidden/system files (e.g., .DS_Store, .env, __pycache__) in push preflight fingerprint evaluation and upload filtering. When false (default), hidden files are excluded from fingerprint computation and upload phases, preventing unintended sync of system/configuration files.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MainframePushMultipartRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Push orchestration executed (success/partial/failure encoded in payload status)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePushResponse"
                },
                "example": {
                  "status": "success",
                  "phaseResults": [
                    {
                      "phase": "preflight",
                      "status": "success",
                      "processedCount": 12,
                      "failedCount": 0,
                      "failedEntries": []
                    },
                    {
                      "phase": "upload",
                      "status": "success",
                      "processedCount": 3,
                      "failedCount": 0,
                      "failedEntries": []
                    },
                    {
                      "phase": "rename",
                      "status": "success",
                      "processedCount": 0,
                      "failedCount": 0,
                      "failedEntries": []
                    },
                    {
                      "phase": "delete",
                      "status": "success",
                      "processedCount": 1,
                      "failedCount": 0,
                      "failedEntries": []
                    }
                  ],
                  "batchIndex": 1,
                  "totalBatches": 3,
                  "completedBatches": 1
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid request body or missing multipart payload",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid request parameter",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0002"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Missing required permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Push orchestration execution failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "Failed to execute mainframe push orchestration",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0019"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation": {
      "post": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Create mainframe push reservation",
        "description": "Acquires a distributed reservation required for batched mainframe push requests.\nValidates that the client's snapshot baseline matches the remote state.\nIf drift is detected (canReserve=false), returns conflict details without acquiring a lock.\nIf baseline matches, reserves exclusive access and returns a reservationId valid for 5 minutes.\n\n**Features:**\n- Distributed reservation locking (Redis-backed TTL of 5 minutes)\n- Preflight fingerprint validation against the current remote snapshot\n- Snapshot drift detection: returns canReserve=false with remote snapshot details on mismatch\n- Hidden/system files are excluded from fingerprint evaluation by default (`includeHidden=false`)\n- Concurrent push blocking: 409 response if another push already holds the lock\n- Atomic check-and-lock pattern: ensures the baseline matches before the reservation is acquired\n- Heartbeat extension during multi-batch push (each batch extends TTL)\n\n**Use Cases:**\n- Preflight validation before batching multi-file push to remote\n- Blocking concurrent push attempts to same pipeline\n- Obtaining unique reservationId for multi-phase orchestration\n- Detecting stale local snapshot before starting expensive push operations\n\n**Workflow:**\n1. Extension computes local snapshot fingerprint\n2. POST /push-reservation with fingerprint\n3. If canReserve=true: proceed with batched push, use reservationId for each batch\n4. If canReserve=false: show snapshot drift with remote files, prompt user for refresh/rebase\n\n**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "createMainframePushReservation",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project that owns the pipeline.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline that will receive the reservation.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "includeHidden",
            "in": "query",
            "description": "Include hidden/system files in push-reservation fingerprint evaluation",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "requestBody": {
          "description": "Reservation acquisition payload containing the client-computed baseline fingerprint used for snapshot drift detection.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MainframePushReservationRequest"
              },
              "example": {
                "expectedSnapshotFingerprint": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Reservation response (acquired or snapshot drift detected)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePushReservationResponse"
                },
                "examples": {
                  "acquired": {
                    "summary": "Reservation successfully acquired",
                    "description": "acquired",
                    "value": {
                      "reservationId": "uuid-1234-5678-9abc-def0",
                      "expiresAt": "2026-06-11T15:30:00Z",
                      "canReserve": true,
                      "remoteSnapshotFingerprint": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e"
                    }
                  },
                  "snapshot_drift": {
                    "summary": "Snapshot drift: canReserve=false with remote files for user review",
                    "description": "snapshot_drift",
                    "value": {
                      "canReserve": false,
                      "remoteSnapshotFingerprint": "d94d9e8dc8f78e0ef9154b78a8abecb4ddc6c14f4cbf1d365a08f6eaec8f4f95",
                      "remoteFiles": [
                        {
                          "id": "67f8d2c8e4b0a1b2c3d4e5f6",
                          "fileName": "pipeline.sqd",
                          "contentHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
                          "size": 8192,
                          "fileApplicationType": "ENGINE_SCRIPT"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Invalid request parameters or validation failed:\n- Missing or empty expectedSnapshotFingerprint\n- Invalid fingerprint format (must be a 64-character SHA-256 hex string)\n- Project ID or Pipeline ID mismatch (not found or not associated)\n- Request body validation failure\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Missing required parameter: expectedSnapshotFingerprint",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0002"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required, valid credentials not provided",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - User lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions for resource 'replication-pipeline::create'",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist:\n- Project with given projectId not found\n- Pipeline with given pipelineId not found in project\n- Pipeline is not a Mainframe pipeline\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Pipeline not found",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict - Another push already in progress:\n- Reservation already held by another user/client\n- Concurrent push attempt detected\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "reservationExpired": {
                    "description": "reservationExpired",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.9",
                      "title": "Conflict",
                      "status": 409,
                      "detail": "Existing push reservation has expired, please retry",
                      "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                      "properties": {
                        "errorCode": "DI-ADAPTER-MFF-0022"
                      }
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Reservation acquisition failed:\n- Remote snapshot fetch failed (network or service issue)\n- Fingerprint validation failure (remote inconsistency)\n- Redis cache write failure\n- Service unavailability\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "examples": {
                  "lockAcquireFailed": {
                    "description": "lockAcquireFailed",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                      "title": "Internal Server Error",
                      "status": 500,
                      "detail": "Failed to acquire push reservation lock",
                      "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                      "properties": {
                        "errorCode": "DI-ADAPTER-MFF-0023"
                      }
                    }
                  },
                  "reservationFetchFailed": {
                    "description": "reservationFetchFailed",
                    "value": {
                      "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                      "title": "Internal Server Error",
                      "status": 500,
                      "detail": "Failed to fetch remote snapshot for push reservation",
                      "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-reservation",
                      "properties": {
                        "errorCode": "DI-ADAPTER-MFF-0021"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-status": {
      "get": {
        "tags": [
          "Build and Configure Mainframe Integration Projects"
        ],
        "summary": "Get push status for mainframe files",
        "description": "Computes preflight push status for a Mainframe pipeline before upload starts.\n\n**Features:**\n- Compares client-provided proposed snapshot fingerprint against latest remote snapshot\n- Returns `canPush=false` with remote files payload when drift is detected\n- Validates project/pipeline association before evaluation\n- Hidden/system files are excluded from fingerprint evaluation by default (`includeHidden=false`)\n- Supports fast UI preflight checks before destructive push operations\n\n**Use Cases:**\n- Push preflight guard before user confirms push\n- Detecting server-side edits done after last pull/snapshot\n- Blocking stale push operations and guiding refresh workflows\n\n**Required Permissions:** `replication-pipeline::view` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.\n",
        "operationId": "getMainframePushStatus",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project that owns the pipeline.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "project-123"
          },
          {
            "name": "pipelineId",
            "in": "path",
            "description": "Unique identifier of the pipeline to evaluate for push readiness.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "pipeline-456"
          },
          {
            "name": "proposedSnapshotFingerprint",
            "in": "query",
            "description": "Client-computed canonical fingerprint of the proposed snapshot baseline.",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            },
            "example": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e"
          },
          {
            "name": "includeHidden",
            "in": "query",
            "description": "Include hidden/system files in push-status fingerprint evaluation",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          }
        ],
        "responses": {
          "200": {
            "description": "Successfully computed push preflight status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MainframePushStatusResponse"
                },
                "examples": {
                  "PushAllowed": {
                    "description": "PushAllowed",
                    "value": {
                      "canPush": true,
                      "remoteSnapshotFingerprint": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e"
                    }
                  },
                  "PushBlockedByDrift": {
                    "description": "PushBlockedByDrift",
                    "value": {
                      "canPush": false,
                      "remoteSnapshotFingerprint": "d94d9e8dc8f78e0ef9154b78a8abecb4ddc6c14f4cbf1d365a08f6eaec8f4f95"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Missing or malformed proposed snapshot fingerprint",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "Invalid request parameter",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0002"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - Authentication required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - Missing required permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Project or pipeline does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Not Found - Resource does not exist",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-DFL-0007"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - Failed to compute push status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "An unexpected error occurred",
                  "instance": "/v1/integration/mainframe/projects/{projectId}/pipelines/{pipelineId}/push-status",
                  "properties": {
                    "errorCode": "DI-ADAPTER-MFF-0014"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/integration/projects/{projectId}/activate": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Activate a project of any type",
        "description": "Activates a project through one common lifecycle contract. The `projectType` query\nparameter selects the internal implementation; the request and response shapes do not change.\n\n**Features:**\n- Supports `validate`, `commit`, `deploy`, and `start` for every project type.\n- Accepts common pipeline IDs and commit/deploy options.\n- Ignores fields that do not apply to the selected project type.\n- Preserves existing Continuous and Mainframe validation/commit orchestration.\n- Uses unified Portal operations for deploy and start.\n- Returns one phase-based acknowledgement envelope with a common status URL.\n\n**Use Cases:**\n- Run the existing Continuous or Mainframe activation workflow without selecting a\n  type-specific public endpoint.\n\n**Authorization:** Requires either `replication-pipeline::create` or\n`replication-pipeline::update` when permission harmonization is enabled; otherwise,\n`replication-pipeline::manage`.\n",
        "operationId": "activateProjectUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type used to select the lifecycle implementation",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "requestBody": {
          "description": "Common activation phases and options. Inapplicable fields are ignored.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedProjectActivationRequest"
              },
              "example": {
                "validate": true,
                "commit": true,
                "deploy": true,
                "start": true,
                "pipelineIds": [
                  "pipeline-123"
                ],
                "options": {
                  "commitMode": "INCREMENTAL",
                  "forceDeploy": false,
                  "queueTimeoutInMinutes": 4,
                  "stopRequestTimeoutInMinutes": 4,
                  "tableCaptureTimeoutInMinutes": 8
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Activation request accepted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectActivationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid activation request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::create or replication-pipeline::update when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Activation conflict",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Connect Portal activation failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectActivationResponse"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/files/replace": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Replace text in project files",
        "description": "Replaces matching text in project files through the unified project API.\n\n**Features:**\n- Supports literal, whole-word, case-sensitive, and regular-expression matching.\n- Returns one aggregate result contract for Advanced and Mainframe Replication.\n- Delegates matching, preflight, replacement, and persistence to Connect Portal.\n\n**Use Cases:**\n- Rename a connection reference consistently across project files.\n- Apply a bounded regular-expression replacement before validating a project.\n\n**Authorization:** Requires `replication-pipeline::update` when permission harmonization is\nenabled, or legacy `replication-pipeline::manage` otherwise.\n",
        "operationId": "replaceProjectFilesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique identifier of the project",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Optional project type: ADVANCED_REPLICATION | MAINFRAME_REPLICATION",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "description": "Unique Mainframe Replication pipeline identifier; ignored for Advanced Replication",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Project file replacement criteria and replacement text",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectFileReplaceRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Project file replacement completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectFileReplaceResponse"
                },
                "examples": {
                  "Advanced Replication": {
                    "description": "Advanced Replication",
                    "value": {
                      "projectId": "project-123",
                      "projectType": "ADVANCED_REPLICATION",
                      "dataFlowId": null,
                      "filesScanned": 12,
                      "filesMatched": 1,
                      "filesChanged": 1,
                      "matchCount": 2,
                      "replacementCount": 2,
                      "changedBytes": 384,
                      "files": [
                        {
                          "fileId": "file-002",
                          "fileName": "customers.dis.yaml",
                          "flattenedPath": "sources/customers.dis.yaml",
                          "version": 4,
                          "replacementCount": 2,
                          "matches": [
                            {
                              "line": 2,
                              "startColumn": 15,
                              "endColumn": 30,
                              "searchContentResult": "oracle_source"
                            }
                          ]
                        }
                      ]
                    }
                  },
                  "Mainframe Replication": {
                    "description": "Mainframe Replication",
                    "value": {
                      "projectId": "project-123",
                      "projectType": "MAINFRAME_REPLICATION",
                      "dataFlowId": "flow-123",
                      "filesScanned": 1,
                      "filesMatched": 1,
                      "filesChanged": 1,
                      "matchCount": 1,
                      "replacementCount": 1,
                      "files": [
                        {
                          "fileId": "file-101",
                          "fileName": "capture.sqd",
                          "replacementCount": 1,
                          "matches": [
                            {
                              "line": 4,
                              "startColumn": 8,
                              "endColumn": 21,
                              "searchContentResult": "x"
                            }
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request — invalid project type or replacement request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.1",
                  "title": "Bad Request",
                  "status": 400,
                  "detail": "searchTerm cannot be blank",
                  "instance": "/v1/integration/projects/project-123/files/replace",
                  "properties": {
                    "errorCode": "DI-ADAPTER-VAL-0000"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.2",
                  "title": "Unauthorized",
                  "status": 401,
                  "detail": "Authorization failed - missing or invalid credentials",
                  "instance": "/v1/integration/projects/project-123/files/replace",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0001"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::update when permission harmonization is enabled, or legacy replication-pipeline::manage otherwise",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.4",
                  "title": "Forbidden",
                  "status": 403,
                  "detail": "Authorization failed - insufficient permissions",
                  "instance": "/v1/integration/projects/project-123/files/replace",
                  "properties": {
                    "errorCode": "DI-ADAPTER-AUT-0002"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found — project does not exist",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.5",
                  "title": "Not Found",
                  "status": 404,
                  "detail": "Project project-404 was not found",
                  "instance": "/v1/integration/projects/project-404/files/replace",
                  "properties": {
                    "errorCode": "DI-PORTAL-PRJ-0004"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict — a concurrent change or project state prevented replacement",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.10",
                  "title": "Conflict",
                  "status": 409,
                  "detail": "A project file changed while replacements were being written",
                  "instance": "/v1/integration/projects/project-123/files/replace",
                  "properties": {
                    "errorCode": "DI-PORTAL-FIL-0017",
                    "filesUpdated": [
                      {
                        "fileId": "file-002",
                        "fileName": "customers.dis.yaml",
                        "flattenedPath": "sources/customers.dis.yaml",
                        "version": 4,
                        "replacementCount": 2
                      }
                    ],
                    "filesNotUpdated": [
                      {
                        "fileId": "file-003",
                        "fileName": "orders.dis.yaml",
                        "flattenedPath": "sources/orders.dis.yaml",
                        "reason": "CONCURRENT_CHANGE"
                      }
                    ]
                  }
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity — a file is unreadable or a preflight limit was exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.5.21",
                  "title": "Unprocessable Entity",
                  "status": 422,
                  "detail": "The replacement exceeds the maximum changed byte limit",
                  "instance": "/v1/integration/projects/project-123/files/replace",
                  "properties": {
                    "errorCode": "DI-PORTAL-FIL-0018"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error — replacement delegation or mapping failed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                },
                "example": {
                  "type": "https://datatracker.ietf.org/doc/html/rfc9110#section-15.6.1",
                  "title": "Internal Server Error",
                  "status": 500,
                  "detail": "We couldn't replace text in the project files. Please try again.",
                  "instance": "/v1/integration/projects/project-123/files/replace",
                  "properties": {
                    "errorCode": "DI-ADAPTER-PRF-0011"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/pipelines/trigger": {
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Start or stop project pipelines of any type",
        "description": "Starts or stops project pipelines through the implementation selected by `projectType`.\n\n**Features:**\n- Supports START and STOP through one type-agnostic public endpoint.\n- Preserves the Connect Portal status and safe response headers.\n\n**Use Cases:**\n- Start selected or all pipelines after deployment.\n- Stop selected or all running pipelines before maintenance.\n\n**Authorization:** Requires `replication-pipeline::operate`.\n",
        "operationId": "triggerProjectUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Unique project identifier",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "description": "Project type used to select the runtime implementation",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedProjectTriggerRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Trigger action completed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectRuntimeResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid trigger request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::operate",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Trigger conflict",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Connect Portal trigger failed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    },
    "/v1/integration/projects/{projectId}/variables": {
      "get": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "List project substitution variables",
        "description": "Lists substitution variables for a project or an optional pipeline scope.\n\n**Features:**\n- Supports Mainframe and Advanced Replication project types.\n- Omitting `pipelineId` lists project-scoped variables.\n\n**Use Cases:**\n- Inspect variable configuration before commit or deploy.\n- Resolve effective pipeline-scoped settings.\n\n**Authorization:** Requires `replication-pipeline::view`.\n",
        "operationId": "listProjectVariablesUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Variables listed",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UnifiedProjectVariableResponse"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::view",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project or pipeline not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Connect Portal variable retrieval failed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      },
      "put": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Update a project substitution variable",
        "description": "Updates a project- or pipeline-scoped substitution variable by ID. Requires `replication-pipeline::manage`.",
        "operationId": "updateProjectVariableUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "variableId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedProjectVariableRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Variable updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectVariableResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid variable request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::manage",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project, pipeline, or variable not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Variable name conflict",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Connect Portal variable update failed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      },
      "post": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Create a project substitution variable",
        "description": "Creates a project- or pipeline-scoped substitution variable. Requires `replication-pipeline::manage`.",
        "operationId": "createProjectVariableUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnifiedProjectVariableRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Variable created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectVariableResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid variable request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::manage",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project or pipeline not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "409": {
            "description": "Variable name conflict",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Connect Portal variable creation failed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      },
      "delete": {
        "tags": [
          "Unified Project Lifecycle APIs"
        ],
        "summary": "Delete a project substitution variable",
        "description": "Deletes a project- or pipeline-scoped substitution variable by ID. Requires `replication-pipeline::manage`.",
        "operationId": "deleteProjectVariableUnified",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1
            }
          },
          {
            "name": "projectType",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Supported project types for unified project operations",
              "enum": [
                "REPLICATION",
                "MAINFRAME_REPLICATION",
                "ADVANCED_REPLICATION"
              ]
            }
          },
          {
            "name": "pipelineId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "variableId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Variable deleted",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedProjectVariableResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid variable identifier",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden — requires replication-pipeline::manage",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "404": {
            "description": "Project, pipeline, or variable not found",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          },
          "500": {
            "description": "Connect Portal variable deletion failed",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetail"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_token": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "UnifiedProjectVariableRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "PARAMETER_DATA_TYPE_STRING",
              "PARAMETER_DATA_TYPE_ENCRYPTED_STRING"
            ]
          },
          "description": {
            "type": "string"
          }
        }
      },
      "UnifiedProjectVariableResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "projectType": {
            "type": "string",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "PARAMETER_DATA_TYPE_STRING",
              "PARAMETER_DATA_TYPE_ENCRYPTED_STRING"
            ]
          },
          "description": {
            "type": "string"
          },
          "lastModifiedBy": {
            "type": "string"
          },
          "lastUpdatedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ProblemDetail": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string",
            "format": "uri"
          },
          "properties": {
            "type": "object",
            "additionalProperties": {}
          }
        }
      },
      "ProjectFileUpdateRequest": {
        "type": "object",
        "description": "Request payload for updating one project file's content",
        "properties": {
          "content": {
            "type": "string",
            "description": "Base64-encoded file content, decoded using the declared encoding",
            "example": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4gIHNjaGVtYTogUFVCTElDXG4="
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type of the file content",
            "example": "application/yaml"
          },
          "encoding": {
            "type": "string",
            "description": "Encoding used to decode the Base64 content",
            "example": "utf-8"
          },
          "expectedVersion": {
            "type": "integer",
            "format": "int32",
            "description": "Expected current version, used for optimistic concurrency",
            "example": 1
          }
        }
      },
      "ProjectFileSummaryResponse": {
        "type": "object",
        "description": "Project file metadata. Content is intentionally omitted.",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Unique identifier of the file",
            "example": "file-002"
          },
          "dataFlowId": {
            "type": "string",
            "description": "Advanced Replication dataflow identifier owning this file, when applicable"
          },
          "fileName": {
            "type": "string",
            "description": "File name derived from the flattened path",
            "example": "customers.dis.yaml"
          },
          "flattenedPath": {
            "type": "string",
            "description": "Path of the file within the project's flattened file tree",
            "example": "sources/customers.dis.yaml"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "Current version number of the file",
            "example": 1
          },
          "phase": {
            "type": "string",
            "description": "Lifecycle phase of the file",
            "enum": [
              "DRAFT",
              "APPROVED",
              "PENDING_DELETION"
            ]
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type of the file content",
            "example": "application/yaml"
          },
          "encoding": {
            "type": "string",
            "description": "Encoding of the file content",
            "example": "utf-8"
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Size of the file content in bytes",
            "example": 512
          },
          "contentHash": {
            "type": "string",
            "description": "Hash of the file content, used for change detection"
          },
          "entryFile": {
            "type": "boolean",
            "description": "Whether this file is the project's designated entry file"
          },
          "unchanged": {
            "type": "boolean",
            "description": "True when an update matched the stored file and no write was performed; omitted for read (list/get) and create/delete responses"
          }
        }
      },
      "ProjectFileMoveEntry": {
        "type": "object",
        "description": "One rename or clone pair",
        "properties": {
          "currentFilePath": {
            "type": "string",
            "description": "Current path of the file to rename or clone",
            "example": "sources/customers.dis.yaml",
            "minLength": 1
          },
          "newFilePath": {
            "type": "string",
            "description": "New path for the renamed or cloned file",
            "example": "sources/customers_v2.dis.yaml",
            "minLength": 1
          },
          "pathPrefix": {
            "type": "boolean",
            "description": "When true, treat currentFilePath/newFilePath as prefixes covering multiple files"
          }
        },
        "required": [
          "currentFilePath",
          "newFilePath"
        ]
      },
      "ProjectFileMoveRequest": {
        "type": "object",
        "description": "Request payload for renaming or cloning project files",
        "properties": {
          "files": {
            "type": "array",
            "description": "Files to rename or clone",
            "items": {
              "$ref": "#/components/schemas/ProjectFileMoveEntry"
            },
            "minItems": 1
          },
          "replaceFiles": {
            "type": "array",
            "description": "Optional paths whose existing target files may be replaced without a conflict",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "files"
        ]
      },
      "ProjectFileMoveResultResponse": {
        "type": "object",
        "description": "Result of a rename or clone operation",
        "properties": {
          "filesRenamedOrCloned": {
            "type": "array",
            "description": "Paths of files successfully renamed or cloned",
            "items": {
              "type": "string"
            }
          },
          "filesIgnored": {
            "type": "array",
            "description": "Paths ignored because they did not match any existing file",
            "items": {
              "type": "string"
            }
          },
          "filesDeleted": {
            "type": "array",
            "description": "Paths deleted as a side effect of the move, when applicable",
            "items": {
              "type": "string"
            }
          },
          "conflictedFiles": {
            "type": "array",
            "description": "Target paths that already existed and were not replaced",
            "items": {
              "type": "string"
            }
          },
          "validationErrors": {
            "type": "array",
            "description": "Validation errors that prevented individual entries from completing",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "MainframePipelineParameterRequest": {
        "type": "object",
        "description": "A single name/value pipeline parameter.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Parameter name",
            "example": "user",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_]+$"
          },
          "value": {
            "type": "string",
            "description": "Parameter value",
            "example": "********",
            "minLength": 1
          },
          "type": {
            "type": "string",
            "description": "Parameter type",
            "enum": [
              "PARAMETER_DATA_TYPE_STRING",
              "PARAMETER_DATA_TYPE_ENCRYPTED_STRING"
            ],
            "example": "PARAMETER_DATA_TYPE_STRING"
          },
          "description": {
            "type": "string",
            "description": "Optional human-friendly description for the parameter",
            "example": "Mainframe connection user"
          }
        },
        "required": [
          "name",
          "value"
        ]
      },
      "MainframeFileRequest": {
        "type": "object",
        "description": "Request payload for file or folder operations",
        "properties": {
          "currentFilePath": {
            "type": "string",
            "description": "The current path/name of the file or folder.",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9\\._\\-\\/]{1,255}$"
          },
          "newFilePath": {
            "type": "string",
            "description": "The new path/name for the file or folder.",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9\\._\\-\\/]{1,255}$"
          },
          "isDirectory": {
            "type": "boolean",
            "description": "Indicates if the current path is a directory."
          }
        },
        "required": [
          "currentFilePath",
          "newFilePath"
        ]
      },
      "MainframeFilesRequest": {
        "type": "object",
        "description": "Request payload for mainframe files operations involving multiple files",
        "properties": {
          "files": {
            "type": "array",
            "description": "List of files to be processed.",
            "items": {
              "$ref": "#/components/schemas/MainframeFileRequest"
            },
            "minItems": 1
          },
          "replaceFiles": {
            "type": "array",
            "description": "List of files to be replaced during the operation. only applicable for PARTIAL conflict resolution.",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "files"
        ]
      },
      "MainframeFileOperationResponse": {
        "type": "object",
        "description": "Represents the response of a mainframe file operation such as upload. rename etc.",
        "properties": {
          "filesCreated": {
            "type": "array",
            "description": "List of files that were renamed during the operation.",
            "example": "file1.txt, file2.txt",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "filesRenamed": {
            "type": "array",
            "description": "List of files that were renamed during the operation.",
            "example": "oldName.txt -> newName.txt",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "filesConflicted": {
            "type": "array",
            "description": "List of files that were conflicted during the operation.",
            "example": "conflictedFile1.txt, conflictedFile2.txt",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "filesUpdated": {
            "type": "array",
            "description": "List of files that were updated during the operation.",
            "example": "fileA.txt, fileB.txt",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "filesDeleted": {
            "type": "array",
            "description": "List of files that were deleted during the operation.",
            "example": "fileX.txt, fileY.txt",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "filesIgnored": {
            "type": "array",
            "description": "List of files that were ignored during the operation.",
            "example": "ignoredFile1.txt, ignoredFile2.txt",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "errors": {
            "type": "array",
            "description": "List of error messages encountered during the operation.",
            "example": "Error message 1, Error message 2",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "SaveDslFileResponse": {
        "type": "object",
        "description": "Response confirming the DSL file was saved successfully",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Catalog asset ID of the saved file",
            "example": "file-abc123"
          },
          "name": {
            "type": "string",
            "description": "The base name of the saved file",
            "example": "customer-sync.dis.yaml"
          },
          "flattenedPath": {
            "type": "string",
            "description": "The flattened path of the saved file",
            "example": "pipelines/customer-sync.dis.yaml"
          },
          "phase": {
            "type": "string",
            "description": "The current lifecycle phase of the file after save",
            "example": "DRAFT"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "The version of the file after save",
            "example": 3
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Server timestamp when the save was processed",
            "example": "2026-05-17T10:00:00Z"
          }
        }
      },
      "UnifiedProjectCreateRequest": {
        "type": "object",
        "description": "Request payload for creating a new project of any type (Continuous Replication, Mainframe Replication, or Advanced Replication)",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the project. Must be unique within the workspace.",
            "example": "my_integration_project",
            "minLength": 1,
            "pattern": "^[a-zA-Z][a-zA-Z0-9_ -]*$"
          },
          "description": {
            "type": "string",
            "description": "Optional human-readable description of the project",
            "example": "Replicates customer data from Oracle to Snowflake"
          },
          "projectType": {
            "type": "string",
            "description": "Project type that determines the backing store and pipeline model",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ],
            "example": "REPLICATION"
          }
        },
        "required": [
          "name",
          "projectType"
        ]
      },
      "CreateProjectResponse": {
        "type": "object",
        "description": "Response containing the ID of the newly created project",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the created project",
            "example": "project-abc123"
          }
        }
      },
      "ProjectValidationResponse": {
        "type": "object",
        "description": "Unified project validation response",
        "properties": {
          "validateStatus": {
            "$ref": "#/components/schemas/ValidationStatusResponse",
            "description": "Validation status details"
          }
        }
      },
      "ValidationFindingResponse": {
        "type": "object",
        "description": "Detailed validation finding",
        "properties": {
          "findingId": {
            "type": "string",
            "description": "Stable finding identifier",
            "example": "disdsl-E-008"
          },
          "category": {
            "type": "string",
            "description": "Finding category",
            "example": "PIPELINE"
          },
          "severity": {
            "type": "string",
            "description": "Finding severity",
            "enum": [
              "INFO",
              "WARNING",
              "ERROR",
              "FATAL"
            ],
            "example": "ERROR"
          },
          "layer": {
            "type": "string",
            "description": "Validation layer that produced the finding",
            "example": "SEMANTIC"
          },
          "dslPath": {
            "type": "string",
            "description": "DSL path where the issue was found",
            "example": "pipelines[0].name"
          },
          "message": {
            "type": "string",
            "description": "Human-readable finding message",
            "example": "Duplicate pipeline name detected"
          },
          "errorCode": {
            "type": "string",
            "description": "Internal finding error code",
            "example": "disdsl-E-008"
          },
          "suggestion": {
            "type": "string",
            "description": "Suggested remediation for the finding"
          },
          "line": {
            "type": "integer",
            "format": "int32",
            "description": "Line number where the issue was found",
            "example": 14
          },
          "column": {
            "type": "integer",
            "format": "int32",
            "description": "Column number where the issue was found",
            "example": 3
          },
          "sourceFile": {
            "type": "string",
            "description": "Source file containing the issue",
            "example": "pipelines/customer.dis.yaml"
          }
        }
      },
      "ValidationResultResponse": {
        "type": "object",
        "description": "Validation result summary including counts and per-scope details",
        "properties": {
          "severityLevel": {
            "type": "string",
            "description": "Overall validation severity level",
            "enum": [
              "VALID",
              "S4_WARNING",
              "S3_INCOMPLETE",
              "S2_ERROR",
              "S1_FATAL",
              "INFO"
            ],
            "example": "VALID"
          },
          "message": {
            "type": "string",
            "description": "Overall validation message",
            "example": "PASSED | DSL_ONLY=PASSED"
          },
          "warning": {
            "type": "integer",
            "format": "int32",
            "description": "Warning count",
            "example": 0
          },
          "incomplete": {
            "type": "integer",
            "format": "int32",
            "description": "Incomplete count",
            "example": 0
          },
          "error": {
            "type": "integer",
            "format": "int32",
            "description": "Error count",
            "example": 0
          },
          "fatal": {
            "type": "integer",
            "format": "int32",
            "description": "Fatal count",
            "example": 0
          },
          "total": {
            "type": "integer",
            "format": "int32",
            "description": "Total findings count",
            "example": 0
          },
          "scopeStatuses": {
            "type": "array",
            "description": "Per-scope validation details",
            "items": {
              "$ref": "#/components/schemas/ValidationScopeStatusResponse"
            }
          }
        }
      },
      "ValidationScopeStatusResponse": {
        "type": "object",
        "description": "Validation status for one scope",
        "properties": {
          "scope": {
            "type": "string",
            "description": "Scope name",
            "enum": [
              "DSL_ONLY",
              "FULL"
            ],
            "example": "DSL_ONLY"
          },
          "status": {
            "type": "string",
            "description": "Validation status for this scope",
            "enum": [
              "STARTED",
              "INPROGRESS",
              "SKIPPED",
              "PASSED",
              "FAILED",
              "PASSED_WITH_WARNINGS"
            ],
            "example": "PASSED"
          },
          "findingCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total findings in this scope",
            "example": 0
          },
          "errorCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total errors in this scope",
            "example": 0
          },
          "warningCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total warnings in this scope",
            "example": 0
          },
          "message": {
            "type": "string",
            "description": "Scope-specific summary message",
            "example": "DSL_ONLY validation passed"
          },
          "findings": {
            "type": "array",
            "description": "Detailed findings for this scope",
            "items": {
              "$ref": "#/components/schemas/ValidationFindingResponse"
            }
          }
        }
      },
      "ValidationStatusResponse": {
        "type": "object",
        "description": "Adapter-owned validation status details",
        "properties": {
          "status": {
            "type": "string",
            "description": "Validation execution status",
            "enum": [
              "OPEN",
              "INPROGRESS",
              "SUCCESS",
              "COMPLETED",
              "TIMEOUT",
              "ERROR"
            ],
            "example": "COMPLETED"
          },
          "lastUpdatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when validation status was last updated",
            "example": "2026-08-12T06:22:07Z"
          },
          "message": {
            "type": "string",
            "description": "Validation summary message",
            "example": "DSL validation completed: DSL_ONLY=PASSED"
          },
          "completePercentage": {
            "type": "integer",
            "format": "int32",
            "description": "Validation completion percentage",
            "example": 100
          },
          "projectValidation": {
            "$ref": "#/components/schemas/ValidationResultResponse",
            "description": "Detailed validation summary"
          }
        }
      },
      "LogReaderConfigurationEntry": {
        "type": "object",
        "description": "LogReader configuration entry, upserted by connectionId + name",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id this LogReader applies to",
            "minLength": 1
          },
          "name": {
            "type": "string",
            "description": "LogReader name",
            "maxLength": 64,
            "minLength": 0
          },
          "journalName": {
            "type": "string",
            "description": "CDC journal name",
            "maxLength": 21,
            "minLength": 0
          },
          "logReaderId": {
            "type": "integer",
            "format": "int32",
            "description": "LogReader identifier"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Operational parameters"
          }
        },
        "required": [
          "connectionId",
          "journalName",
          "name"
        ]
      },
      "MetabaseConfigurationEntry": {
        "type": "object",
        "description": "Metabase configuration entry, upserted by connectionId",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id this Metabase applies to",
            "minLength": 1
          },
          "isTarget": {
            "type": "boolean",
            "description": "Whether this connection is used as the pipeline's target; drives connection-type-specific parameter defaulting (for example TARGET_ONLY) for Advanced Replication projects"
          },
          "name": {
            "type": "string",
            "description": "Metabase name",
            "maxLength": 200,
            "minLength": 0
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Catalog id of the vault connection asset, when vault-backed"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Operational parameters (non-credential)"
          },
          "version": {
            "type": "string",
            "description": "Metabase version"
          },
          "adminUserId": {
            "type": "string",
            "description": "Admin user id"
          },
          "adminUserPassword": {
            "type": "string",
            "description": "Admin password or vault secret-path token; never returned",
            "writeOnly": true
          },
          "replicationUser": {
            "type": "string",
            "description": "Replication user id"
          },
          "replicationPassword": {
            "type": "string",
            "description": "Replication password or vault secret-path token; never returned",
            "writeOnly": true
          }
        },
        "required": [
          "connectionId",
          "name"
        ]
      },
      "PipelineComponentsConfigurationRequest": {
        "type": "object",
        "description": "Composite Metabase/LogReader/UserDatabase configuration request for one pipeline",
        "properties": {
          "metabases": {
            "type": "array",
            "description": "Metabase entries to upsert; omit to leave Metabases untouched",
            "items": {
              "$ref": "#/components/schemas/MetabaseConfigurationEntry"
            }
          },
          "logReaders": {
            "type": "array",
            "description": "LogReader entries to upsert; omit to leave LogReaders untouched",
            "items": {
              "$ref": "#/components/schemas/LogReaderConfigurationEntry"
            }
          },
          "userDatabases": {
            "type": "array",
            "description": "UserDatabase entries to prepare; omit to leave user databases untouched",
            "items": {
              "$ref": "#/components/schemas/UserDatabaseConfigurationEntry"
            }
          }
        }
      },
      "UserDatabaseConfigurationEntry": {
        "type": "object",
        "description": "User-database preparation entry, upserted by connectionId",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id this preparation applies to",
            "minLength": 1
          },
          "isTarget": {
            "type": "boolean",
            "description": "Whether this connection is used as the pipeline's target"
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Catalog id of the vault connection asset, when vault-backed"
          },
          "userDataBaseNames": {
            "type": "array",
            "description": "Database names to prepare",
            "items": {
              "type": "string"
            },
            "maxItems": 2147483647,
            "minItems": 1
          },
          "adminUser": {
            "type": "string",
            "description": "Admin user id",
            "minLength": 1
          },
          "adminUserPassword": {
            "type": "string",
            "description": "Direct password or vault secret-path token; never returned",
            "minLength": 1,
            "writeOnly": true
          },
          "replicationUser": {
            "type": "string",
            "description": "Replication user id; required for SQL Server and PostgreSQL connections"
          }
        },
        "required": [
          "adminUser",
          "adminUserPassword",
          "connectionId",
          "isTarget",
          "userDataBaseNames"
        ]
      },
      "LogReaderConfigurationResult": {
        "type": "object",
        "description": "Outcome of upserting one LogReader configuration entry",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id this entry targeted"
          },
          "status": {
            "type": "string",
            "description": "CREATED, UPDATED, or FAILED",
            "enum": [
              "CREATED",
              "UPDATED",
              "FAILED"
            ]
          },
          "logReader": {
            "$ref": "#/components/schemas/LogReaderResponse",
            "description": "Resulting LogReader details, present when status is CREATED or UPDATED"
          },
          "errorCode": {
            "type": "string",
            "description": "Error code, present only when status is FAILED"
          },
          "message": {
            "type": "string",
            "description": "Human-readable success or failure message for this entry"
          }
        }
      },
      "LogReaderResponse": {
        "type": "object",
        "description": "Response model containing Log Reader (Change Selector) configuration",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the Log Reader (Change Selector)",
            "example": "logreader-1"
          },
          "journal": {
            "type": "string",
            "description": "Journal name used for log processing",
            "example": "JRN001"
          },
          "dataConnectionId": {
            "type": "string",
            "description": "Unique identifier of the associated data connection",
            "example": "conn-src-uuid"
          },
          "logReaderId": {
            "type": "integer",
            "format": "int32",
            "description": "LogReader identifier"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration parameters for the Log Reader"
          }
        }
      },
      "MetabaseConfigurationResult": {
        "type": "object",
        "description": "Individual Metabase configuration result",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the Metabase endpoint instance"
          },
          "version": {
            "type": "string",
            "description": "Version of the Metabase instance (if created)"
          },
          "response": {
            "type": "string",
            "description": "Response / status message from the configuration process"
          },
          "status": {
            "type": "string",
            "description": "Status for this endpoint configuration",
            "enum": [
              "SUCCESS",
              "FAILED",
              "SKIPPED"
            ]
          }
        }
      },
      "MetabaseResponse": {
        "type": "object",
        "description": "Response model containing Metabase configuration details",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the Metabase instance",
            "example": "metabase-source-1"
          },
          "version": {
            "type": "string",
            "description": "Version of the Metabase instance",
            "example": "1.0.0"
          },
          "dataConnectionId": {
            "type": "string",
            "description": "Unique identifier of the associated data connection",
            "example": "conn-metabase-uuid"
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Unique identifier of the associated vault connection",
            "example": "vault-conn-uuid"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration parameters for the Metabase instance"
          }
        }
      },
      "PrepareUserDatabaseResultDto": {
        "type": "object",
        "description": "On-prem user-database preparation result, keyed by database name",
        "properties": {
          "successMap": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Database name to success detail"
          },
          "failureMap": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Database name to failure reason"
          }
        }
      },
      "UnifiedPipelineConfigurationResponse": {
        "type": "object",
        "description": "Consolidated response for a composite Metabase/LogReader/UserDatabase pipeline configuration request",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Unique identifier for this configuration request"
          },
          "overallStatus": {
            "type": "string",
            "description": "Overall status across every requested component",
            "enum": [
              "SUCCESS",
              "SKIPPED",
              "PARTIAL",
              "FAILED"
            ]
          },
          "executionTimeInMs": {
            "type": "integer",
            "format": "int64",
            "description": "Total execution time for all component configurations in milliseconds"
          },
          "metabaseResults": {
            "type": "array",
            "description": "Per-entry Metabase configuration results",
            "items": {
              "$ref": "#/components/schemas/MetabaseConfigurationResult"
            }
          },
          "logReaderResults": {
            "type": "array",
            "description": "Per-entry LogReader configuration results",
            "items": {
              "$ref": "#/components/schemas/LogReaderConfigurationResult"
            }
          },
          "userDatabaseResults": {
            "type": "array",
            "description": "Per-entry UserDatabase configuration results",
            "items": {
              "$ref": "#/components/schemas/UserDatabaseConfigurationResult"
            }
          }
        }
      },
      "UserDatabaseConfigurationResult": {
        "type": "object",
        "description": "Outcome of preparing user databases for one connection entry",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id this entry targeted"
          },
          "status": {
            "type": "string",
            "description": "CREATED, UPDATED, or FAILED",
            "enum": [
              "CREATED",
              "UPDATED",
              "FAILED"
            ]
          },
          "result": {
            "$ref": "#/components/schemas/PrepareUserDatabaseResultDto",
            "description": "On-prem preparation result, present when status is CREATED or UPDATED"
          },
          "errorCode": {
            "type": "string",
            "description": "Error code, present only when status is FAILED"
          },
          "message": {
            "type": "string",
            "description": "Human-readable success or failure message for this entry"
          }
        }
      },
      "UnifiedAdvancedRuntimeOptions": {
        "description": "Advanced Replication start and stop options."
      },
      "UnifiedContinuousRuntimeOptions": {
        "type": "object",
        "description": "Continuous Replication start and stop options.",
        "properties": {
          "dataFlowNames": {
            "type": "array",
            "description": "Data flow names to start or stop. Omitted or empty means all data flows.",
            "items": {
              "type": "string"
            }
          },
          "sourceDataConnectionName": {
            "type": "string",
            "description": "Source data connection used for a selective-recopy start. Only one connection is supported because selective recopy targets a single data flow."
          },
          "qualifiedTableNames": {
            "type": "array",
            "description": "Qualified table names for a selective-recopy start. Use catalog||schema||table or schema||table, as applicable to the source type.",
            "items": {
              "type": "string"
            }
          },
          "resumeRequest": {
            "type": "boolean",
            "description": "Whether START resumes synchronization instead of starting from copy."
          }
        }
      },
      "UnifiedMainframeRuntimeOptions": {
        "type": "object",
        "description": "Mainframe Replication start and stop options.",
        "properties": {
          "pipelineIds": {
            "type": "array",
            "description": "Pipeline identifiers to start or stop. Omitted or empty means all pipelines.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UnifiedProjectRuntimeOptions": {
        "type": "object",
        "description": "Project-type options for start or stop. At most one branch may be supplied.",
        "properties": {
          "continuous": {
            "$ref": "#/components/schemas/UnifiedContinuousRuntimeOptions"
          },
          "mainframe": {
            "$ref": "#/components/schemas/UnifiedMainframeRuntimeOptions"
          },
          "advanced": {
            "$ref": "#/components/schemas/UnifiedAdvancedRuntimeOptions"
          }
        }
      },
      "UnifiedProjectTriggerRequest": {
        "type": "object",
        "description": "Request to start or stop project pipelines through the unified trigger endpoint.",
        "properties": {
          "action": {
            "type": "string",
            "description": "Runtime action to execute.",
            "enum": [
              "START",
              "STOP"
            ]
          },
          "options": {
            "$ref": "#/components/schemas/UnifiedProjectRuntimeOptions",
            "description": "Project-type-specific runtime options."
          }
        },
        "required": [
          "action"
        ]
      },
      "AdvancedOperationSuccessResult": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        }
      },
      "ProjectRuntimeOperationResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string"
          },
          "engineCommandStatusList": {
            "type": "array",
            "items": {}
          },
          "errorMessage": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "object",
            "additionalProperties": {},
            "writeOnly": true
          }
        }
      },
      "UnifiedProjectRuntimeResponse": {
        "type": "object",
        "properties": {
          "projectType": {
            "type": "string",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "operation": {
            "type": "string",
            "enum": [
              "COMMIT",
              "DEPLOY",
              "START",
              "STOP"
            ]
          },
          "result": {
            "$ref": "#/components/schemas/UnifiedProjectRuntimeResult"
          }
        }
      },
      "UnifiedProjectRuntimeResult": {
        "type": "object",
        "properties": {
          "continuous": {
            "$ref": "#/components/schemas/ProjectRuntimeOperationResult"
          },
          "mainframe": {
            "$ref": "#/components/schemas/WorkflowExecutionResponse"
          },
          "advanced": {
            "$ref": "#/components/schemas/AdvancedOperationSuccessResult"
          }
        }
      },
      "WorkflowExecutionResponse": {
        "type": "object",
        "properties": {
          "runtimeId": {
            "type": "string"
          },
          "definitionId": {
            "type": "string"
          },
          "workspaceId": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdBy": {
            "type": "string"
          },
          "temporalWorkflowId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "taskId": {
            "type": "string"
          }
        }
      },
      "ProjectFileUpsertRequest": {
        "type": "object",
        "description": "Request payload for creating or updating one project file",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Identifier of an existing file to update. Required for a batch-save item that updates a file; ignored by the single create endpoint, which always creates a new file.",
            "example": "file-002"
          },
          "flattenedPath": {
            "type": "string",
            "description": "Path of the file within the project's flattened file tree. Required when creating a new file — via the single create endpoint, or as a batch-save item without fileId. Not required when fileId identifies an existing file to update.",
            "example": "sources/customers.dis.yaml"
          },
          "content": {
            "type": "string",
            "description": "Base64-encoded file content, decoded using the declared encoding",
            "example": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4="
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type of the file content",
            "example": "application/yaml"
          },
          "encoding": {
            "type": "string",
            "description": "Encoding used to decode the Base64 content",
            "example": "utf-8"
          },
          "expectedVersion": {
            "type": "integer",
            "format": "int32",
            "description": "Expected current version, used for optimistic concurrency when overwriting"
          },
          "expectedContentHash": {
            "type": "string",
            "description": "Optional content-hash precondition, checked only when this item updates an existing file (fileId supplied). If it does not match the file's current stored hash, only this item fails; other items are unaffected. Ignored when creating a new file."
          }
        }
      },
      "ProjectFileSearchCriteriaRequest": {
        "type": "object",
        "description": "Request payload for searching project file paths and content",
        "properties": {
          "searchTerm": {
            "type": "string",
            "description": "Text or regular expression to search for",
            "example": "oracle_source",
            "minLength": 1
          },
          "matchCase": {
            "type": "boolean",
            "description": "When true, the search is case-sensitive",
            "example": false
          },
          "matchWord": {
            "type": "boolean",
            "description": "When true, only whole-word matches are returned"
          },
          "regex": {
            "type": "boolean",
            "description": "When true, searchTerm is treated as a regular expression",
            "example": false
          },
          "filesToInclude": {
            "type": "array",
            "description": "Restricts scanning to files matching one of these selectors",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSearchSelectorRequest"
            }
          },
          "view": {
            "type": "string",
            "description": "File-tree view to search: CURRENT | COMMITTED",
            "enum": [
              "CURRENT",
              "COMMITTED"
            ],
            "example": "CURRENT"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Optional revision number to search when view is COMMITTED"
          }
        },
        "required": [
          "searchTerm"
        ]
      },
      "ProjectFileSearchSelectorRequest": {
        "type": "object",
        "description": "A single file-selector used to scope a search",
        "properties": {
          "kind": {
            "type": "string",
            "description": "How the pattern is interpreted: EXACT | GLOB | REGEX",
            "enum": [
              "EXACT",
              "GLOB",
              "REGEX"
            ]
          },
          "pattern": {
            "type": "string",
            "description": "The selector pattern",
            "example": "sources/*.dis.yaml"
          }
        }
      },
      "ProjectFileSearchMatchResponse": {
        "type": "object",
        "description": "One search match within a file",
        "properties": {
          "line": {
            "type": "integer",
            "format": "int32",
            "description": "One-based line number of the match",
            "example": 2
          },
          "startColumn": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based start column of the match",
            "example": 15
          },
          "endColumn": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based end column of the match",
            "example": 28
          },
          "searchContentResult": {
            "type": "string",
            "description": "Matched text or capture result",
            "example": "oracle_source"
          }
        }
      },
      "ProjectFileSearchResultItem": {
        "type": "object",
        "description": "Search matches found within one file",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Unique identifier of the file",
            "example": "file-002"
          },
          "fileName": {
            "type": "string",
            "description": "File name derived from the flattened path",
            "example": "customers.dis.yaml"
          },
          "flattenedPath": {
            "type": "string",
            "description": "Path of the file within the project's flattened file tree",
            "example": "sources/customers.dis.yaml"
          },
          "matches": {
            "type": "array",
            "description": "Matches found within this file",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSearchMatchResponse"
            }
          }
        }
      },
      "ProjectFileSearchResultResponse": {
        "type": "object",
        "description": "Result of a project file path and content search",
        "properties": {
          "files": {
            "type": "array",
            "description": "Files containing at least one match",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSearchResultItem"
            }
          },
          "filesScanned": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of files scanned",
            "example": 12
          },
          "matchCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of matches found",
            "example": 1
          },
          "filesSkipped": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files skipped, for example due to size limits",
            "example": 0
          },
          "warnings": {
            "type": "array",
            "description": "Non-fatal warnings encountered while searching",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSearchWarningResponse"
            }
          },
          "truncated": {
            "type": "boolean",
            "description": "Whether results were truncated before completion",
            "example": false
          }
        }
      },
      "ProjectFileSearchWarningResponse": {
        "type": "object",
        "description": "Non-fatal warning encountered while searching project files",
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable warning code"
          },
          "message": {
            "type": "string",
            "description": "Human-readable warning message"
          },
          "fileId": {
            "type": "string",
            "description": "File affected by the warning, when applicable"
          },
          "flattenedPath": {
            "type": "string",
            "description": "Path of the file affected by the warning, when applicable"
          }
        }
      },
      "ProjectFileReplaceRequest": {
        "type": "object",
        "description": "Request payload for replacing matching text in project files",
        "properties": {
          "searchTerm": {
            "type": "string",
            "description": "Text or regular expression to replace",
            "example": "oracle_source",
            "minLength": 1
          },
          "matchCase": {
            "type": "boolean",
            "description": "When true, matching is case-sensitive",
            "example": false
          },
          "matchWord": {
            "type": "boolean",
            "description": "When true, only whole-word matches are replaced",
            "example": false
          },
          "regex": {
            "type": "boolean",
            "description": "When true, searchTerm is treated as a regular expression",
            "example": false
          },
          "filesToInclude": {
            "type": "array",
            "description": "Restricts replacement to files matching one of these selectors",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSearchSelectorRequest"
            }
          },
          "view": {
            "type": "string",
            "description": "File-tree view to replace in: CURRENT | COMMITTED",
            "enum": [
              "CURRENT",
              "COMMITTED"
            ],
            "example": "CURRENT"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Optional revision number"
          },
          "maxMatchesPerFile": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum matches allowed in one file",
            "example": 1000
          },
          "maxTotalMatches": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum matches allowed across all files",
            "example": 10000
          },
          "maxFilesScanned": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum number of files to scan",
            "example": 50
          },
          "maxBytesScanned": {
            "type": "integer",
            "format": "int64",
            "description": "Maximum number of bytes to scan",
            "example": 104857600
          },
          "deadlineSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "Maximum operation duration in seconds",
            "example": 30
          },
          "includeLine": {
            "type": "boolean",
            "description": "When true, include the updated line in each replacement match",
            "example": true
          },
          "replacement": {
            "type": "string",
            "description": "Replacement text; an empty string removes matched text",
            "example": "postgres_source"
          },
          "maxChangedBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Maximum number of changed output bytes",
            "example": 104857600,
            "minimum": 1
          }
        },
        "required": [
          "replacement",
          "searchTerm"
        ]
      },
      "ProjectFileReplaceResponse": {
        "type": "object",
        "description": "Aggregate result of replacing text in project files",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project",
            "example": "project-123"
          },
          "projectType": {
            "type": "string",
            "description": "Resolved project type",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ],
            "example": "ADVANCED_REPLICATION"
          },
          "dataFlowId": {
            "type": "string",
            "description": "Resolved portal dataflow identifier"
          },
          "filesScanned": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of files scanned; for Mainframe, derived from returned changed-file results",
            "example": 12
          },
          "filesMatched": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files containing matches",
            "example": 2
          },
          "filesChanged": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files changed",
            "example": 2
          },
          "matchCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of matches; for Mainframe, every returned match was replaced",
            "example": 3
          },
          "replacementCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of replacements written",
            "example": 3
          },
          "changedBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Total UTF-8 bytes written for changed files; unavailable for Mainframe",
            "example": 2048
          },
          "files": {
            "type": "array",
            "description": "Per-file replacement outcomes in deterministic search order",
            "items": {
              "$ref": "#/components/schemas/ProjectFileReplaceResultResponse"
            }
          }
        }
      },
      "ProjectFileReplaceResultResponse": {
        "type": "object",
        "description": "Replacement outcome for one project file",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Unique identifier of the file",
            "example": "file-002"
          },
          "fileName": {
            "type": "string",
            "description": "File name derived from the flattened path",
            "example": "customers.dis.yaml"
          },
          "flattenedPath": {
            "type": "string",
            "description": "Path of the file within the project's flattened file tree; unavailable for Mainframe",
            "example": "sources/customers.dis.yaml"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "Version assigned after replacement; unavailable for Mainframe",
            "example": 4
          },
          "replacementCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of replacements written to this file",
            "example": 2
          },
          "matches": {
            "type": "array",
            "description": "Updated line text and replacement-adjusted columns",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSearchMatchResponse"
            }
          }
        }
      },
      "ProjectFileBulkSaveRequest": {
        "type": "object",
        "description": "Request payload for bulk-saving project files (maximum 250 per request)",
        "properties": {
          "files": {
            "type": "array",
            "description": "Files to create or update, up to 250 per request",
            "items": {
              "$ref": "#/components/schemas/ProjectFileUpsertRequest"
            },
            "maxItems": 250,
            "minItems": 0
          }
        },
        "required": [
          "files"
        ]
      },
      "ProjectFileBatchItemResponse": {
        "type": "object",
        "description": "Result for one file within a bulk save or delete operation",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Unique identifier of the file",
            "example": "file-002"
          },
          "successful": {
            "type": "boolean",
            "description": "Whether this file's operation succeeded",
            "example": true
          },
          "error": {
            "type": "string",
            "description": "Failure reason, present only when successful is false"
          },
          "metadata": {
            "$ref": "#/components/schemas/ProjectFileSummaryResponse",
            "description": "Resulting file metadata, present only when successful is true"
          },
          "unchanged": {
            "type": "boolean",
            "description": "True when this update item matched the stored file and no write was performed; omitted for create and delete items"
          }
        }
      },
      "ProjectFileBatchResultResponse": {
        "type": "object",
        "description": "Results for a bulk file save or delete operation",
        "properties": {
          "results": {
            "type": "array",
            "description": "Per-file results, in request order",
            "items": {
              "$ref": "#/components/schemas/ProjectFileBatchItemResponse"
            }
          }
        }
      },
      "ProjectFileBulkDeleteRequest": {
        "type": "object",
        "description": "Request payload for bulk-deleting project files (maximum 250 per request)",
        "properties": {
          "fileIds": {
            "type": "array",
            "description": "Unique identifiers of the files to delete, up to 250 per request",
            "example": [
              "file-002",
              "file-003"
            ],
            "items": {
              "type": "string"
            },
            "maxItems": 250,
            "minItems": 0
          }
        },
        "required": [
          "fileIds"
        ]
      },
      "UnifiedActivationOptions": {
        "type": "object",
        "description": "Common activation options shared by all project types.",
        "properties": {
          "commitMode": {
            "type": "string",
            "default": "INCREMENTAL",
            "description": "Commit mode where supported.",
            "enum": [
              "INCREMENTAL",
              "FULL"
            ]
          },
          "forceDeploy": {
            "type": "boolean",
            "default": false,
            "description": "Force deployment where supported."
          },
          "queueTimeoutInMinutes": {
            "type": "integer",
            "format": "int32",
            "description": "Queue timeout in minutes where supported.",
            "minimum": 4
          },
          "stopRequestTimeoutInMinutes": {
            "type": "integer",
            "format": "int32",
            "description": "Stop-request timeout in minutes where supported.",
            "minimum": 4
          },
          "tableCaptureTimeoutInMinutes": {
            "type": "integer",
            "format": "int32",
            "description": "Table-capture timeout in minutes where supported.",
            "minimum": 8
          }
        }
      },
      "UnifiedProjectActivationRequest": {
        "type": "object",
        "description": "Common activation request for every project type. Options that do not apply to the selected project type are ignored.",
        "properties": {
          "validate": {
            "type": "boolean",
            "default": false,
            "description": "Run project or pipeline validation before commit."
          },
          "commit": {
            "type": "boolean",
            "default": false,
            "description": "Commit or stage the current configuration."
          },
          "deploy": {
            "type": "boolean",
            "default": false,
            "description": "Deploy the committed configuration."
          },
          "start": {
            "type": "boolean",
            "default": false,
            "description": "Start pipelines after deployment."
          },
          "pipelineIds": {
            "type": "array",
            "description": "Optional pipelines targeted by validation and Mainframe lifecycle phases.",
            "items": {
              "type": "string"
            }
          },
          "options": {
            "$ref": "#/components/schemas/UnifiedActivationOptions",
            "description": "Common activation options. Inapplicable fields are ignored by project type."
          }
        }
      },
      "UnifiedActivationPhaseResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "NOT_REQUESTED",
              "IGNORED",
              "ACCEPTED",
              "PENDING",
              "SUCCEEDED",
              "FAILED"
            ]
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UnifiedActivationPhases": {
        "type": "object",
        "properties": {
          "validate": {
            "$ref": "#/components/schemas/UnifiedActivationPhaseResult"
          },
          "commit": {
            "$ref": "#/components/schemas/UnifiedActivationPhaseResult"
          },
          "deploy": {
            "$ref": "#/components/schemas/UnifiedActivationPhaseResult"
          },
          "start": {
            "$ref": "#/components/schemas/UnifiedActivationPhaseResult"
          }
        }
      },
      "UnifiedProjectActivationResponse": {
        "type": "object",
        "description": "Common activation acknowledgement for every project type.",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique project identifier."
          },
          "projectType": {
            "type": "string",
            "description": "Resolved project type.",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "status": {
            "type": "string",
            "description": "Overall activation execution status.",
            "enum": [
              "ACCEPTED",
              "COMPLETED",
              "FAILED"
            ]
          },
          "phases": {
            "$ref": "#/components/schemas/UnifiedActivationPhases",
            "description": "Status of each activation phase."
          },
          "statusUrl": {
            "type": "string",
            "description": "Relative URL used to poll asynchronous project status."
          }
        }
      },
      "UnifiedProjectMonitoringStatusRequest": {
        "type": "object",
        "description": "Identifies one project in a mixed-type unified monitoring status request",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project",
            "minLength": 1
          },
          "projectType": {
            "type": "string",
            "description": "Project type: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "latency": {
            "type": "boolean",
            "description": "Mainframe Replication only; ignored for Continuous and Advanced projects"
          }
        },
        "required": [
          "projectId",
          "projectType"
        ]
      },
      "ContinuousAdvanced": {
        "type": "object",
        "description": "Monitoring status fields specific to Continuous and Advanced Replication projects",
        "properties": {
          "agentId": {
            "type": "string",
            "description": "Unique identifier of the agent"
          },
          "name": {
            "type": "string",
            "description": "Name of the project"
          },
          "currentEmailRuntimeServer": {
            "type": "string",
            "description": "Runtime server used for email notifications"
          },
          "changes": {
            "type": "string",
            "description": "Indicates if the project is up to date or needs update",
            "enum": [
              "UP_TO_DATE",
              "UPDATE_NEEDED"
            ]
          },
          "generationTimestamp": {
            "type": "string",
            "description": "Timestamp when the status was generated (RFC 3339 UTC)"
          },
          "dataFlows": {
            "type": "array",
            "description": "Data flow statuses for the project",
            "items": {
              "$ref": "#/components/schemas/MonitoringDataFlowStatus"
            }
          },
          "versions": {
            "type": "array",
            "description": "Version information for the project",
            "items": {
              "$ref": "#/components/schemas/MonitoringProjectVersions"
            }
          },
          "cdwhStatsAndStatusInfos": {
            "type": "array",
            "description": "CDWH stats and status information",
            "items": {
              "$ref": "#/components/schemas/MonitoringMonitoringCDWHStatsAndStatus"
            }
          },
          "virtualId": {
            "type": "string",
            "description": "Virtual identifier for the project"
          },
          "overallPipelineStatuses": {
            "type": "array",
            "description": "Overall pipeline statuses",
            "items": {
              "$ref": "#/components/schemas/MonitoringOverallPipelineStatus"
            }
          }
        }
      },
      "Mainframe": {
        "type": "object",
        "description": "Monitoring status fields specific to Mainframe Replication projects",
        "properties": {
          "pipelines": {
            "type": "array",
            "description": "Pipeline-level monitoring statuses",
            "items": {
              "$ref": "#/components/schemas/MonitoringMainframePipelineMonitoringStatus"
            }
          },
          "createdAt": {
            "type": "string",
            "description": "Timestamp when the mainframe project status was created"
          },
          "agents": {
            "type": "array",
            "description": "Runtime agent statuses",
            "items": {
              "$ref": "#/components/schemas/MonitoringMonitoringMainframeAgents"
            }
          },
          "summary": {
            "$ref": "#/components/schemas/MonitoringMainframeProjectSummary",
            "description": "Aggregated mainframe project monitoring summary"
          }
        }
      },
      "MonitoringAgentHeader": {
        "type": "object",
        "properties": {
          "active": {
            "$ref": "#/components/schemas/MonitoringAgentState"
          },
          "allocated": {
            "type": "integer",
            "format": "int32"
          },
          "id": {
            "type": "string"
          },
          "lastCommitStck": {
            "type": "string"
          },
          "lastCommitTimestamp": {
            "type": "string"
          },
          "lastLogLsn": {
            "type": "string"
          },
          "pending": {
            "$ref": "#/components/schemas/MonitoringAgentState"
          },
          "status": {
            "type": "string"
          },
          "used": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringAgentState": {
        "type": "object",
        "properties": {
          "database": {
            "type": "string"
          },
          "excludedPlans": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "externalConfigFile": {
            "type": "string"
          },
          "flags": {
            "type": "string"
          },
          "plan": {
            "type": "string"
          },
          "storageId": {
            "type": "string"
          },
          "storageName": {
            "type": "string"
          }
        }
      },
      "MonitoringAverageLatency": {
        "type": "object",
        "properties": {
          "avgBacklogLatency": {
            "type": "integer",
            "format": "int64"
          },
          "avgCaptureLatency": {
            "type": "integer",
            "format": "int64"
          },
          "avgReplicationLatency": {
            "type": "integer",
            "format": "int64"
          },
          "transactionsAcknowledged": {
            "type": "integer",
            "format": "int32"
          },
          "updatedAt": {
            "type": "string"
          }
        }
      },
      "MonitoringBacklogRowStatus": {
        "type": "object",
        "properties": {
          "pendingRows": {
            "type": "integer",
            "format": "int32"
          },
          "pendingTransactions": {
            "type": "integer",
            "format": "int32"
          },
          "timestamp": {
            "type": "string"
          }
        }
      },
      "MonitoringContinuousAverageLatency": {
        "type": "object",
        "properties": {
          "backlog": {
            "type": "number"
          },
          "capture": {
            "type": "number"
          },
          "replication": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "updatedAt": {
            "type": "string"
          }
        }
      },
      "MonitoringCumulativeLatency": {
        "type": "object",
        "properties": {
          "cumulativeBacklogLatency": {
            "type": "integer",
            "format": "int32"
          },
          "cumulativeCaptureLatency": {
            "type": "integer",
            "format": "int32"
          },
          "cumulativeReplicationLatency": {
            "type": "integer",
            "format": "int32"
          },
          "transactionsAcknowledged": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringCurrentLatency": {
        "type": "object",
        "properties": {
          "avgTransactionLatency": {
            "type": "integer",
            "format": "int64"
          },
          "transactionBacklogLatency": {
            "type": "integer",
            "format": "int64"
          },
          "transactionCaptureLatency": {
            "type": "integer",
            "format": "int64"
          },
          "transactionReplicationLatency": {
            "type": "integer",
            "format": "int64"
          },
          "updatedAt": {
            "type": "string"
          }
        }
      },
      "MonitoringDataConnectionStatus": {
        "type": "object",
        "properties": {
          "connectionType": {
            "type": "string"
          },
          "logReaders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringLogReaderStatus"
            }
          },
          "name": {
            "type": "string"
          },
          "source": {
            "type": "boolean"
          },
          "stats": {
            "$ref": "#/components/schemas/MonitoringStats"
          },
          "target": {
            "type": "boolean"
          }
        }
      },
      "MonitoringDataFlowStatus": {
        "type": "object",
        "properties": {
          "backlogRows": {
            "$ref": "#/components/schemas/MonitoringBacklogRowStatus"
          },
          "captureStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "copyPhase": {
            "type": "boolean"
          },
          "dataFlowType": {
            "type": "string"
          },
          "logReaderStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "monitoringRequestProcessing": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "overallStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "replicationStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "runtimeServerStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "runtimeServers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringRuntimeServerStatus"
            }
          },
          "startedAt": {
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/MonitoringStats"
          },
          "tableMappings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringTableMappingStatus"
            }
          }
        }
      },
      "MonitoringDetails": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "rowsApplied": {
            "type": "integer",
            "format": "int64"
          },
          "rowsCaptured": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "MonitoringLatency": {
        "type": "object",
        "properties": {
          "avgTransactionLatency": {
            "type": "integer",
            "format": "int32"
          },
          "totalBacklogLatency": {
            "type": "integer",
            "format": "int32"
          },
          "totalCaptureLatency": {
            "type": "integer",
            "format": "int32"
          },
          "totalReplicationLatency": {
            "type": "integer",
            "format": "int32"
          },
          "transactionBacklogLatency": {
            "type": "integer",
            "format": "int32"
          },
          "transactionCaptureLatency": {
            "type": "integer",
            "format": "int32"
          },
          "transactionReplicationLatency": {
            "type": "integer",
            "format": "int32"
          },
          "transactionsAcknowledged": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringLatencyDetails": {
        "type": "object",
        "properties": {
          "averageLatency": {
            "$ref": "#/components/schemas/MonitoringAverageLatency"
          },
          "cumulativeLatency": {
            "$ref": "#/components/schemas/MonitoringCumulativeLatency"
          },
          "currentLatency": {
            "$ref": "#/components/schemas/MonitoringCurrentLatency"
          }
        }
      },
      "MonitoringLogReaderStatus": {
        "type": "object",
        "properties": {
          "journal": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "sequence": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        }
      },
      "MonitoringMailSender": {
        "type": "object",
        "properties": {
          "mailSent": {
            "type": "boolean"
          },
          "timerStartedAt": {
            "type": "string"
          }
        }
      },
      "MonitoringMainframePipelineMonitoringStatus": {
        "type": "object",
        "properties": {
          "agents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringMonitoringMainframeAgents"
            }
          },
          "id": {
            "type": "string"
          },
          "internalName": {
            "type": "string"
          },
          "latencyDetails": {
            "$ref": "#/components/schemas/MonitoringLatencyDetails"
          },
          "mailSender": {
            "$ref": "#/components/schemas/MonitoringMailSender"
          },
          "name": {
            "type": "string"
          },
          "pipelineId": {
            "type": "string"
          },
          "projectId": {
            "type": "string"
          },
          "reportedAt": {
            "type": "string"
          },
          "tenantId": {
            "type": "string"
          }
        }
      },
      "MonitoringMainframeProjectSummary": {
        "type": "object",
        "properties": {
          "health": {
            "type": "string"
          },
          "lastUpdated": {
            "type": "string"
          },
          "longestCurrentLatencyMs": {
            "type": "integer",
            "format": "int32"
          },
          "totalRowsApplied": {
            "type": "integer",
            "format": "int32"
          },
          "totalRowsCaptured": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringMonitoringCDWHPipelineIdInfo": {
        "type": "object",
        "properties": {
          "projectName": {
            "type": "string"
          },
          "target": {
            "type": "string"
          },
          "targetType": {
            "type": "string"
          },
          "userPPName": {
            "type": "string"
          }
        }
      },
      "MonitoringMonitoringCDWHStatsAndStatus": {
        "type": "object",
        "properties": {
          "idInfo": {
            "$ref": "#/components/schemas/MonitoringMonitoringCDWHPipelineIdInfo"
          },
          "pipelinePhase": {
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/MonitoringMonitoringCDWHStatsInfo"
          },
          "status": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "stopReason": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          }
        }
      },
      "MonitoringMonitoringCDWHStatsInfo": {
        "type": "object",
        "properties": {
          "appliedRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "appliedTransactionCount": {
            "type": "integer",
            "format": "int32"
          },
          "applyLatency": {
            "type": "integer",
            "format": "int32"
          },
          "processedRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "processedTransactionCount": {
            "type": "integer",
            "format": "int32"
          },
          "readRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "skipRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "stagedRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "stagedTransactionCount": {
            "type": "integer",
            "format": "int32"
          },
          "startedAt": {
            "type": "string"
          }
        }
      },
      "MonitoringMonitoringMainframeAgents": {
        "type": "object",
        "properties": {
          "allocated": {
            "type": "integer",
            "format": "int32"
          },
          "cdctype": {
            "type": "string"
          },
          "flavor": {
            "type": "integer",
            "format": "int32"
          },
          "git": {
            "type": "string"
          },
          "header": {
            "$ref": "#/components/schemas/MonitoringAgentHeader"
          },
          "id": {
            "type": "string"
          },
          "internalName": {
            "type": "string"
          },
          "latency": {
            "$ref": "#/components/schemas/MonitoringLatency"
          },
          "message": {
            "type": "string"
          },
          "messageDetails": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "pipelineId": {
            "type": "string"
          },
          "pipelineStarted": {
            "type": "string"
          },
          "reportedAt": {
            "type": "string"
          },
          "runtimeServerName": {
            "type": "string"
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringSourceInfo"
            }
          },
          "status": {
            "type": "string"
          },
          "store": {
            "$ref": "#/components/schemas/MonitoringStoreInfo"
          },
          "summary": {
            "$ref": "#/components/schemas/MonitoringSummary"
          },
          "targets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringTargetInfo"
            }
          },
          "used": {
            "type": "integer",
            "format": "int32"
          },
          "version": {
            "type": "string"
          }
        }
      },
      "MonitoringOverallPipelineStatus": {
        "type": "object",
        "properties": {
          "copyPhase": {
            "type": "boolean"
          },
          "pipelineName": {
            "type": "string"
          },
          "pipelineStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "replicationStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          }
        }
      },
      "MonitoringProjectVersions": {
        "type": "object",
        "properties": {
          "committedVersion": {
            "type": "integer",
            "format": "int32"
          },
          "deployedVersion": {
            "type": "integer",
            "format": "int32"
          },
          "serverName": {
            "type": "string"
          }
        }
      },
      "MonitoringRuntimeServerStatus": {
        "type": "object",
        "properties": {
          "dataConnections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringDataConnectionStatus"
            }
          },
          "hasChange": {
            "type": "boolean"
          },
          "logReaderStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "name": {
            "type": "string"
          },
          "replicationStatus": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          },
          "state": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "",
              "STOPPED",
              "OK",
              "ACTION_REQUIRED",
              "UPDATING",
              "IN_PROGRESS",
              "PARTIAL",
              "COMPLETED",
              "NONE",
              "UNKNOWN",
              "RUNNING",
              "STOPPING",
              "COPY_PHASE",
              "STOP_REASON_BY_USER",
              "STOP_REASON_NOT_APPLICABLE",
              "STOP_REASON_ON_COPYREQUEST_COMPLETE",
              "STOP_REASON_ON_ERROR",
              "IGNORED",
              "DISABLED",
              "STARTING",
              "INFORMATION",
              "ATTENTION"
            ]
          }
        }
      },
      "MonitoringSourceInfo": {
        "type": "object",
        "properties": {
          "active": {
            "$ref": "#/components/schemas/MonitoringSourceState"
          },
          "alias": {
            "type": "string"
          },
          "bytesCaptured": {
            "type": "integer",
            "format": "int64"
          },
          "datastore": {
            "type": "string"
          },
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringDetails"
            }
          },
          "index": {
            "type": "integer",
            "format": "int32"
          },
          "key": {
            "type": "string"
          },
          "rowsCaptured": {
            "type": "integer",
            "format": "int64"
          },
          "statsLife": {
            "$ref": "#/components/schemas/MonitoringSourceStat"
          },
          "statsSession": {
            "$ref": "#/components/schemas/MonitoringSourceStat"
          }
        }
      },
      "MonitoringSourceStat": {
        "type": "object",
        "properties": {
          "delete": {
            "type": "integer",
            "format": "int32"
          },
          "insert": {
            "type": "integer",
            "format": "int32"
          },
          "update": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringSourceState": {
        "type": "object",
        "properties": {
          "flags": {
            "type": "string"
          },
          "targetUrls": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "MonitoringStats": {
        "type": "object",
        "properties": {
          "apply": {
            "$ref": "#/components/schemas/MonitoringStatsInfos"
          },
          "averageLatency": {
            "$ref": "#/components/schemas/MonitoringContinuousAverageLatency"
          },
          "backlogLatency": {
            "type": "integer",
            "format": "int32"
          },
          "captureLatency": {
            "type": "integer",
            "format": "int32"
          },
          "replicationLatency": {
            "type": "integer",
            "format": "int32"
          },
          "retrieve": {
            "$ref": "#/components/schemas/MonitoringStatsInfos"
          },
          "send": {
            "$ref": "#/components/schemas/MonitoringStatsInfos"
          },
          "statisticEstimationWindow": {
            "type": "string"
          },
          "totalLatency": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringStatsInfos": {
        "type": "object",
        "properties": {
          "bytes": {
            "type": "integer",
            "format": "int32"
          },
          "lastReported": {
            "type": "string"
          },
          "rows": {
            "type": "integer",
            "format": "int32"
          },
          "skippedRows": {
            "type": "integer",
            "format": "int32"
          },
          "transactions": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringStoreInfo": {
        "type": "object",
        "properties": {
          "cabId": {
            "type": "string"
          },
          "cabName": {
            "type": "string"
          }
        }
      },
      "MonitoringSummary": {
        "type": "object",
        "properties": {
          "bytesApplied": {
            "type": "integer",
            "format": "int64"
          },
          "bytesCaptured": {
            "type": "integer",
            "format": "int64"
          },
          "cummulativeBytesCaptured": {
            "type": "integer",
            "format": "int64"
          },
          "cummulativeRowsCaptured": {
            "type": "integer",
            "format": "int64"
          },
          "rowsApplied": {
            "type": "integer",
            "format": "int64"
          },
          "rowsCaptured": {
            "type": "integer",
            "format": "int64"
          },
          "transactionsCaptured": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "MonitoringTableLevelStats": {
        "type": "object",
        "properties": {
          "bytes": {
            "type": "integer",
            "format": "int32"
          },
          "deleteRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "insertRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "recordCount": {
            "type": "integer",
            "format": "int32"
          },
          "skippedDeleteRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "skippedInsertRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "skippedRecordBytes": {
            "type": "integer",
            "format": "int32"
          },
          "skippedRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "skippedUpdateRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "stagedRecordCount": {
            "type": "integer",
            "format": "int32"
          },
          "transactions": {
            "type": "integer",
            "format": "int32"
          },
          "updateRecordCount": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "MonitoringTableMappingDetails": {
        "type": "object",
        "properties": {
          "appliedStats": {
            "$ref": "#/components/schemas/MonitoringTableLevelStats"
          },
          "captureStatus": {
            "type": "string"
          },
          "retrievedStats": {
            "$ref": "#/components/schemas/MonitoringTableLevelStats"
          },
          "sentStats": {
            "$ref": "#/components/schemas/MonitoringTableLevelStats"
          },
          "source": {
            "$ref": "#/components/schemas/MonitoringTableMappingDetailsTable"
          },
          "target": {
            "$ref": "#/components/schemas/MonitoringTableMappingDetailsTable"
          }
        }
      },
      "MonitoringTableMappingDetailsTable": {
        "type": "object",
        "properties": {
          "catalog": {
            "type": "string"
          },
          "schema": {
            "type": "string"
          },
          "table": {
            "type": "string"
          }
        }
      },
      "MonitoringTableMappingStatus": {
        "type": "object",
        "properties": {
          "mappingDetails": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringTableMappingDetails"
            }
          },
          "source": {
            "$ref": "#/components/schemas/MonitoringTableMappingsStatusDataConnection"
          },
          "target": {
            "$ref": "#/components/schemas/MonitoringTableMappingsStatusDataConnection"
          }
        }
      },
      "MonitoringTableMappingsStatusDataConnection": {
        "type": "object",
        "properties": {
          "connectionType": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "MonitoringTargetInfo": {
        "type": "object",
        "properties": {
          "alias": {
            "type": "string"
          },
          "bytesApplied": {
            "type": "integer",
            "format": "int64"
          },
          "connected": {
            "type": "string"
          },
          "datastore": {
            "type": "string"
          },
          "details": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MonitoringDetails"
            }
          },
          "index": {
            "type": "integer",
            "format": "int32"
          },
          "key": {
            "type": "string"
          },
          "lastAckLsn": {
            "type": "string"
          },
          "lastConnection": {
            "type": "string"
          },
          "lastDisconnection": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "recordsDeleted": {
            "type": "integer",
            "format": "int64"
          },
          "recordsInserted": {
            "type": "integer",
            "format": "int64"
          },
          "recordsUpdated": {
            "type": "integer",
            "format": "int64"
          },
          "rowsApplied": {
            "type": "integer",
            "format": "int64"
          },
          "statsLife": {
            "$ref": "#/components/schemas/MonitoringTargetStat"
          },
          "statsSession": {
            "$ref": "#/components/schemas/MonitoringTargetStat"
          }
        }
      },
      "MonitoringTargetStat": {
        "type": "object",
        "properties": {
          "bytes": {
            "type": "integer",
            "format": "int32"
          },
          "records": {
            "type": "integer",
            "format": "int32"
          },
          "txns": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "Result": {
        "type": "object",
        "description": "Correlates one requested project with its monitoring status",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the underlying monitoring status document"
          },
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project"
          },
          "projectType": {
            "type": "string",
            "description": "Project type: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "tenantId": {
            "type": "string",
            "description": "Workspace or tenant identifier"
          },
          "found": {
            "type": "boolean",
            "description": "False when no monitoring data exists for this project"
          },
          "status": {
            "$ref": "#/components/schemas/Status",
            "description": "Absent when no monitoring data exists for this project (found=false)"
          }
        }
      },
      "Status": {
        "type": "object",
        "description": "Discriminated monitoring status; only one of the two fields is populated",
        "properties": {
          "continuousAdvanced": {
            "$ref": "#/components/schemas/ContinuousAdvanced",
            "description": "Populated for Continuous and Advanced Replication projects"
          },
          "mainframe": {
            "$ref": "#/components/schemas/Mainframe",
            "description": "Populated for Mainframe Replication projects"
          }
        }
      },
      "UnifiedProjectMonitoringStatusListResponse": {
        "type": "object",
        "description": "Unified monitoring status results for a mixed list of projects",
        "properties": {
          "results": {
            "type": "array",
            "description": "One result per requested project, in request order",
            "items": {
              "$ref": "#/components/schemas/Result"
            }
          }
        }
      },
      "MainframePushMultipartRequest": {
        "type": "object",
        "description": "Multipart push form payload containing metadata fields and upload file parts.",
        "properties": {
          "reservationId": {
            "type": "string",
            "description": "Active reservation ID returned by the push-reservation endpoint.",
            "example": "de4f4c95-3aa6-4a63-8c83-d785f08e8f85",
            "minLength": 1
          },
          "batchIndex": {
            "type": "integer",
            "format": "int32",
            "description": "0-based batch index within the current push run.",
            "example": 0,
            "minimum": 0
          },
          "totalBatches": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of batches in the current push run.",
            "example": 3,
            "minimum": 1
          },
          "expectedSnapshotFingerprint": {
            "type": "string",
            "description": "Canonical snapshot fingerprint from client baseline (SHA-256 over sorted id|fileName|contentHash tuples).",
            "example": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e",
            "minLength": 1
          },
          "uploadFiles": {
            "type": "array",
            "description": "Files metadata to upload or update as part of this batch.",
            "items": {
              "$ref": "#/components/schemas/UploadFileForm"
            }
          },
          "renameFiles": {
            "type": "array",
            "description": "Requested rename operations.",
            "items": {
              "$ref": "#/components/schemas/RenameFileForm"
            }
          },
          "deleteFileIds": {
            "type": "array",
            "description": "Remote file IDs requested for deletion.",
            "example": [
              "file-9",
              "file-10"
            ],
            "items": {
              "type": "string"
            }
          },
          "conflictResolution": {
            "type": "string",
            "description": "Conflict resolution policy for upload/rename phases.",
            "enum": [
              "REPLACE_ALL",
              "PARTIAL",
              "FAIL"
            ],
            "example": "REPLACE_ALL"
          },
          "files": {
            "type": "array",
            "description": "Multipart binary file parts corresponding to uploadFiles[].fileName.",
            "items": {
              "type": "string",
              "format": "binary"
            }
          },
          "final": {
            "type": "boolean"
          },
          "batchWindowValid": {
            "type": "boolean",
            "description": "Indicates whether batchIndex is within the valid [0, totalBatches) window for the current push run."
          }
        },
        "required": [
          "batchIndex",
          "expectedSnapshotFingerprint",
          "reservationId",
          "totalBatches"
        ]
      },
      "RenameFileForm": {
        "type": "object",
        "description": "Rename operation entry in multipart push request.",
        "properties": {
          "oldPath": {
            "type": "string",
            "description": "Current file path/name before rename.",
            "example": "pipelines/orders.sqd",
            "minLength": 1
          },
          "fileName": {
            "type": "string",
            "description": "Target file name/path.",
            "example": "pipelines/orders_v2.sqd",
            "minLength": 1
          }
        },
        "required": [
          "fileName",
          "oldPath"
        ]
      },
      "UploadFileForm": {
        "type": "object",
        "description": "Upload file metadata entry in multipart push request.",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Existing remote file ID. Empty for new files.",
            "example": "file-1"
          },
          "fileName": {
            "type": "string",
            "description": "Relative file name/path within pipeline workspace.",
            "example": "pipelines/orders.sqd",
            "minLength": 1
          }
        },
        "required": [
          "fileName"
        ]
      },
      "MainframePushResponse": {
        "type": "object",
        "description": "Response payload for orchestrated mainframe push execution.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Overall push result status.",
            "enum": [
              "success",
              "partial_failure",
              "failed"
            ],
            "example": "success"
          },
          "phaseResults": {
            "type": "array",
            "description": "Per-phase execution summary.",
            "items": {
              "$ref": "#/components/schemas/PhaseResult"
            }
          },
          "batchIndex": {
            "type": "integer",
            "format": "int32",
            "description": "Batch index acknowledged by the adapter.",
            "example": 0
          },
          "totalBatches": {
            "type": "integer",
            "format": "int32",
            "description": "Total batches for this push run.",
            "example": 3
          },
          "completedBatches": {
            "type": "integer",
            "format": "int32",
            "description": "Count of successfully applied batches.",
            "example": 1
          },
          "errorMessage": {
            "type": "string",
            "description": "Top-level error message when push is failed or partially failed.",
            "example": "Remote drift detected"
          }
        }
      },
      "PhaseResult": {
        "type": "object",
        "description": "Result of a specific phase in the pipeline activation process.",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates whether the phase was successful.",
            "example": true
          },
          "errors": {
            "type": "array",
            "description": "List of errors encountered during the phase if any.",
            "example": [
              "Error message"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "MainframePushReservationRequest": {
        "type": "object",
        "description": "Request to acquire a mainframe push reservation.\n\nThe adapter compares the provided snapshot fingerprint against the current remote snapshot\nbefore it attempts to acquire the lock.\n",
        "properties": {
          "expectedSnapshotFingerprint": {
            "type": "string",
            "description": "Canonical snapshot fingerprint computed by the client from its stored baseline.\n\nAlgorithm: SHA-256 over sorted tuples of id|fileName|contentHash, joined by newline.\nUsed to detect remote snapshot drift before acquiring the reservation.\n",
            "example": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e",
            "minLength": 1
          }
        },
        "required": [
          "expectedSnapshotFingerprint"
        ]
      },
      "MainframePushReservationResponse": {
        "type": "object",
        "description": "Response returned after acquiring or attempting to acquire a mainframe push reservation.\n\nSuccessful responses include a reservation identifier and expiry timestamp. Drift responses\ninclude the latest remote snapshot fingerprint and file snapshot for UI review.\n",
        "properties": {
          "reservationId": {
            "type": "string",
            "description": "Reservation identifier that must be sent with each push batch."
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "Reservation expiry timestamp. Null if reservation was not acquired."
          },
          "canReserve": {
            "type": "boolean",
            "description": "Whether the remote snapshot matches the client baseline."
          },
          "remoteSnapshotFingerprint": {
            "type": "string",
            "description": "Remote snapshot fingerprint currently stored on the adapter side."
          }
        }
      },
      "MainframeHydratedFile": {
        "type": "object",
        "description": "Hydrated file payload",
        "properties": {
          "id": {
            "type": "string",
            "description": "File ID",
            "example": "67f8d2c8e4b0a1b2c3d4e5f6"
          },
          "fileName": {
            "type": "string",
            "description": "File name",
            "example": "pipeline.sqd"
          },
          "size": {
            "type": "integer",
            "format": "int64",
            "description": "File size in bytes",
            "example": 4096
          },
          "content": {
            "type": "string",
            "description": "Base64-encoded file content",
            "example": "U1FEIERBVEEuLi4="
          },
          "fileApplicationType": {
            "type": "string",
            "description": "File application type",
            "example": "ENGINE_SCRIPT"
          },
          "contentHash": {
            "type": "string",
            "description": "SHA-256 content hash",
            "example": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
          }
        }
      },
      "MainframePullFilesResponse": {
        "type": "object",
        "description": "Selected-file hydration response",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Project ID",
            "example": "project-123"
          },
          "pipelineId": {
            "type": "string",
            "description": "Pipeline ID",
            "example": "pipeline-456"
          },
          "requestedFileCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files requested",
            "example": 2
          },
          "hydratedFileCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files successfully hydrated",
            "example": 2
          },
          "files": {
            "type": "array",
            "description": "Hydrated files",
            "items": {
              "$ref": "#/components/schemas/MainframeHydratedFile"
            }
          }
        }
      },
      "MainframeMappingConfiguration": {
        "type": "object",
        "description": "Mapping object for 1-to-1 source-to-target mapping relationship",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/MainframeSourceMapping",
            "description": "Source mapping configuration"
          },
          "target": {
            "$ref": "#/components/schemas/MainframeTargetMapping",
            "description": "Target mapping configuration"
          }
        },
        "required": [
          "target"
        ]
      },
      "MainframeSourceMapping": {
        "type": "object",
        "description": "Source mapping configuration for mainframe table mapping request",
        "properties": {
          "database": {
            "type": "string",
            "description": "Database name of the source"
          },
          "schema": {
            "type": "string",
            "description": "Schema name of the source"
          },
          "table": {
            "type": "string",
            "description": "Table name of the source"
          },
          "schemaCase": {
            "type": "string",
            "description": "Case transformation to apply to source schema names. Default is NONE.",
            "enum": [
              "NONE",
              "MATCH_ORIGINAL_CASE",
              "SENTENCE_CASE",
              "LOWER_CASE",
              "UPPER_CASE",
              "TOGGLE_CASE",
              "CAPITALIZE_EACH_WORD"
            ],
            "example": "NONE"
          },
          "tableCase": {
            "type": "string",
            "description": "Case transformation to apply to source table names. Default is NONE.",
            "enum": [
              "NONE",
              "MATCH_ORIGINAL_CASE",
              "SENTENCE_CASE",
              "LOWER_CASE",
              "UPPER_CASE",
              "TOGGLE_CASE",
              "CAPITALIZE_EACH_WORD"
            ],
            "example": "NONE"
          },
          "columnCase": {
            "type": "string",
            "description": "Case transformation to apply to source column names. Default is NONE.",
            "enum": [
              "NONE",
              "MATCH_ORIGINAL_CASE",
              "SENTENCE_CASE",
              "LOWER_CASE",
              "UPPER_CASE",
              "TOGGLE_CASE",
              "CAPITALIZE_EACH_WORD"
            ],
            "example": "NONE"
          }
        }
      },
      "MainframeTableMappingRequest": {
        "type": "object",
        "description": "Request model for automatic source-to-target table mapping for a mainframe replication pipeline",
        "properties": {
          "mappings": {
            "type": "array",
            "description": "List of mapping objects, each defining a 1-to-1 source-to-target mapping",
            "items": {
              "$ref": "#/components/schemas/MainframeMappingConfiguration"
            },
            "minItems": 1
          }
        },
        "required": [
          "mappings"
        ]
      },
      "MainframeTargetMapping": {
        "type": "object",
        "description": "Target mapping configuration for mainframe table mapping request",
        "properties": {
          "database": {
            "type": "string",
            "description": "Database name of the target"
          },
          "schema": {
            "type": "string",
            "description": "Schema name of the target",
            "minLength": 1
          },
          "table": {
            "type": "string",
            "description": "Table name of the target",
            "minLength": 1
          }
        },
        "required": [
          "schema",
          "table"
        ]
      },
      "MainframeTableMappingResponse": {
        "type": "object",
        "description": "Response model containing table mapping information for mainframe replication pipelines",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the table mapping",
            "example": "mapping_x688lglh9kq5"
          },
          "sourceDatabase": {
            "type": "string",
            "description": "Name of the source database",
            "example": "source-database"
          },
          "sourceSchema": {
            "type": "string",
            "description": "Name of the source schema",
            "example": "source-schema"
          },
          "sourceTable": {
            "type": "string",
            "description": "Name of the source table",
            "example": "source-table"
          },
          "targetDatabase": {
            "type": "string",
            "description": "Name of the target database",
            "example": "target-database"
          },
          "targetSchema": {
            "type": "string",
            "description": "Name of the target schema",
            "example": "target-schema"
          },
          "targetTable": {
            "type": "string",
            "description": "Name of the target table",
            "example": "target-table"
          },
          "targetTopic": {
            "type": "string",
            "description": "Name of the target topic",
            "example": "target-topic"
          },
          "targetSubject": {
            "type": "string",
            "description": "Name of the target subject for schema registry",
            "example": "target-subject"
          },
          "sourceSchemaCase": {
            "type": "string",
            "description": "Case transformation to apply to source schema names. Default is NONE.",
            "enum": [
              "NONE",
              "MATCH_ORIGINAL_CASE",
              "SENTENCE_CASE",
              "LOWER_CASE",
              "UPPER_CASE",
              "TOGGLE_CASE",
              "CAPITALIZE_EACH_WORD"
            ],
            "example": "NONE"
          },
          "sourceTableCase": {
            "type": "string",
            "description": "Case transformation to apply to source table names. Default is NONE.",
            "enum": [
              "NONE",
              "MATCH_ORIGINAL_CASE",
              "SENTENCE_CASE",
              "LOWER_CASE",
              "UPPER_CASE",
              "TOGGLE_CASE",
              "CAPITALIZE_EACH_WORD"
            ],
            "example": "NONE"
          },
          "sourceColumnCase": {
            "type": "string",
            "description": "Case transformation to apply to source column names. Default is NONE.",
            "enum": [
              "NONE",
              "MATCH_ORIGINAL_CASE",
              "SENTENCE_CASE",
              "LOWER_CASE",
              "UPPER_CASE",
              "TOGGLE_CASE",
              "CAPITALIZE_EACH_WORD"
            ],
            "example": "NONE"
          }
        }
      },
      "CreateMainframeFile": {
        "type": "object",
        "description": "Request payload for creating a new mainframe file",
        "properties": {
          "path": {
            "type": "string",
            "description": "Directory path where the file or folder will be created (e.g. '/path/to'). Use \"/\" for root.\n",
            "example": "/path/to",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9\\._\\-\\/]{1,255}$"
          },
          "name": {
            "type": "string",
            "description": "Name of the file or folder to create (e.g. 'file.txt' or 'folder').",
            "example": "file.txt",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9\\._\\-]{1,255}$"
          },
          "fileContent": {
            "type": "string",
            "format": "binary",
            "description": "File content as multipart binary. Can be null when `directory` is true."
          },
          "fileApplicationType": {
            "type": "string",
            "description": "Type of application the file is used for",
            "enum": [
              "ENGINE_SCRIPT",
              "CONFIGURATION"
            ],
            "example": "ENGINE_SCRIPT"
          },
          "directory": {
            "type": "boolean",
            "description": "If true, the request represents a directory creation instead of a regular file.\nWhen true, `fileContent` may be null.\n",
            "example": false
          }
        },
        "required": [
          "name",
          "path"
        ]
      },
      "UploadMainframeFiles": {
        "type": "object",
        "description": "Request payload for uploading multiple mainframe files to a specific directory path",
        "properties": {
          "path": {
            "type": "string",
            "description": "Target directory path where files will be uploaded",
            "example": "scripts/config",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9\\._\\-\\/]{1,255}$"
          },
          "files": {
            "type": "array",
            "description": "List of files to upload (maximum 200 files)",
            "example": [
              "file-latest.txt",
              "config-latest.jcl"
            ],
            "items": {
              "type": "string",
              "format": "binary"
            },
            "maxItems": 200,
            "minItems": 1
          },
          "replaceFiles": {
            "type": "array",
            "description": "List of file names to be replaced if they already exist. Only applicable for PARTIAL conflict resolution.",
            "example": [
              "file1.txt",
              "config.jcl"
            ],
            "items": {
              "type": "string"
            }
          },
          "expandArchive": {
            "type": "boolean",
            "description": "Whether to expand archive files (zip). Only applicable when uploading a single file. Default is true.",
            "example": true
          }
        },
        "required": [
          "files",
          "path"
        ]
      },
      "MainframeHashMigrationRequest": {
        "type": "object",
        "description": "Request payload to trigger content-hash backfill for mainframe files",
        "properties": {
          "fileIds": {
            "type": "array",
            "description": "Optional list of file IDs to migrate. If omitted or empty, migration targets all files in the pipeline that need hash backfill.",
            "example": [
              "file-101",
              "file-205"
            ],
            "items": {
              "type": "string",
              "minLength": 1
            }
          }
        }
      },
      "MainframeHashMigrationResponse": {
        "type": "object",
        "description": "Result of mainframe hash migration",
        "properties": {
          "updated": {
            "type": "integer",
            "format": "int32",
            "description": "Count of files considered updated during migration",
            "example": 0
          },
          "skipped": {
            "type": "integer",
            "format": "int32",
            "description": "Count of files skipped during migration",
            "example": 12
          },
          "failed": {
            "type": "integer",
            "format": "int32",
            "description": "Count of files that failed migration",
            "example": 0
          },
          "compatibilityReady": {
            "type": "boolean",
            "description": "Whether pipeline is compatibility-ready after migration",
            "example": true
          }
        }
      },
      "SetMainframeEntryFileRequest": {
        "type": "object",
        "description": "Request payload for setting the entry file name of a Mainframe Replication Pipeline. The entryFileName must be a fully qualified file name within the pipeline workspace.",
        "properties": {
          "entryFileName": {
            "type": "string",
            "description": "Fully qualified file name to set as the pipeline entry (main) script within the pipeline workspace",
            "example": "scripts/main/main.sqd",
            "minLength": 1,
            "pattern": "^(?![\\\\/])(?![A-Za-z]:[\\\\/])(?!.*(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$))(?!\\s)(?!.*\\s$).+$"
          }
        },
        "required": [
          "entryFileName"
        ]
      },
      "CDCFieldMappings": {
        "type": "object",
        "description": "CDC field mapping configuration",
        "properties": {
          "sourceMessageProducerFormat": {
            "type": "string",
            "description": "Source message producer format",
            "enum": [
              "custom",
              "precisely_replication",
              "debezium"
            ]
          },
          "fieldMappings": {
            "type": "array",
            "description": "Field mappings for CDC",
            "items": {
              "$ref": "#/components/schemas/FieldMapping"
            },
            "minItems": 1
          }
        },
        "required": [
          "fieldMappings",
          "sourceMessageProducerFormat"
        ]
      },
      "FieldMapping": {
        "type": "object",
        "description": "Mapping between source and target fields",
        "properties": {
          "sourceField": {
            "type": "string",
            "description": "Source field name",
            "example": "sv_sending_table"
          },
          "targetField": {
            "type": "string",
            "description": "Target field name",
            "example": "Dataset name",
            "minLength": 1
          },
          "valueMappings": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Value mappings for the field"
          }
        },
        "required": [
          "targetField"
        ]
      },
      "MainframePipelineConfigurationRequest": {
        "type": "object",
        "description": "Request model for configuring a mainframe pipeline, including source assets, target assets, and field mapping criteria.",
        "properties": {
          "sources": {
            "type": "array",
            "description": "List of source topic identifiers.",
            "example": [
              "sourceTopic1",
              "sourceTopic2"
            ],
            "items": {
              "type": "string"
            }
          },
          "targets": {
            "type": "array",
            "description": "List of target schema and table definitions.",
            "example": [
              {
                "schema": "targetSchema1",
                "tables": [
                  "targetTable1"
                ]
              },
              {
                "schema": "targetSchema2",
                "tables": [
                  "targetTable2"
                ]
              }
            ],
            "items": {
              "$ref": "#/components/schemas/SchemaTables"
            }
          },
          "transformation": {
            "$ref": "#/components/schemas/CDCFieldMappings",
            "description": "Field mapping criteria for transformation between source and target assets."
          }
        }
      },
      "SchemaTables": {
        "type": "object",
        "description": "Schema and its associated tables.",
        "properties": {
          "schema": {
            "type": "string",
            "description": "Selected schema.",
            "example": "targetSchema",
            "minLength": 1
          },
          "tables": {
            "type": "array",
            "description": "List of selected tables in the schema.",
            "example": [
              "targetTable1",
              "targetTable2"
            ],
            "items": {
              "type": "string"
            },
            "minItems": 1
          }
        },
        "required": [
          "schema",
          "tables"
        ]
      },
      "MainframePipelineConfigurationResponse": {
        "type": "object",
        "description": "Consolidated response containing results from mainframe pipeline component configuration operations",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Unique identifier for this configuration request",
            "example": "config-req-12345-abcde"
          },
          "overallStatus": {
            "type": "string",
            "description": "Overall status of the configuration operation",
            "enum": [
              "SUCCESS",
              "PARTIAL",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "executionTimeInMs": {
            "type": "integer",
            "format": "int64",
            "description": "Total execution time for all component configurations in milliseconds",
            "example": 45123
          },
          "sources": {
            "$ref": "#/components/schemas/SourceSelectionResult",
            "description": "Result of source asset selection/configuration."
          },
          "targets": {
            "$ref": "#/components/schemas/TargetSelectionResult",
            "description": "Result of target asset selection/configuration."
          },
          "transformation": {
            "$ref": "#/components/schemas/Transformation",
            "description": "Result of transformation (field mapping) configuration."
          }
        }
      },
      "SourceSelectionResult": {
        "type": "object",
        "description": "Result of source asset selection/configuration.",
        "properties": {
          "selectedResources": {
            "type": "array",
            "description": "List of selected source asset identifiers.",
            "example": [
              "sourceTopic1",
              "sourceTopic2"
            ],
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string",
            "description": "Status for this endpoint configuration",
            "enum": [
              "SUCCESS",
              "PARTIAL",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "response": {
            "type": "string",
            "description": "Response / status message from the configuration process",
            "example": 2
          }
        }
      },
      "TargetSelectionResult": {
        "type": "object",
        "description": "Result of target asset selection/configuration.",
        "properties": {
          "selectedResources": {
            "type": "array",
            "description": "List of selected target schema and table definitions.",
            "example": [
              {
                "schema": "targetSchema",
                "table": "targetTable1"
              },
              {
                "schema": "targetSchema",
                "table": "targetTable2"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/SchemaTables"
            }
          },
          "status": {
            "type": "string",
            "description": "Status for this endpoint configuration",
            "enum": [
              "SUCCESS",
              "PARTIAL",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "response": {
            "type": "string",
            "description": "Response / status message from the configuration process",
            "example": 2
          }
        }
      },
      "Transformation": {
        "type": "object",
        "description": "Result of transformation (field mapping) configuration.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Configuration status for transformation component",
            "enum": [
              "SUCCESS",
              "PARTIAL",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "response": {
            "type": "string",
            "description": "Response message from the configuration process",
            "example": "Field mappings applied successfully."
          }
        }
      },
      "GenerateApplicationResponse": {
        "type": "object",
        "description": "Response containing the result of an application generation operation",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates whether the application generation was successful",
            "example": true
          },
          "statusMessage": {
            "type": "string",
            "description": "Status message providing details about the generation result",
            "example": "Application generated successfully."
          }
        }
      },
      "MainframePipelineActivationResponse": {
        "type": "object",
        "description": "Response object containing the result of a mainframe pipeline activation operation.",
        "properties": {
          "validate": {
            "$ref": "#/components/schemas/PhaseResult",
            "description": "Result of the validation phase."
          },
          "stage": {
            "$ref": "#/components/schemas/PhaseResult",
            "description": "Result of the stage phase."
          },
          "deploy": {
            "$ref": "#/components/schemas/PhaseResult",
            "description": "Result of the deploy phase."
          },
          "start": {
            "$ref": "#/components/schemas/PhaseResult",
            "description": "Result of the start phase."
          }
        }
      },
      "MainframePipelineActivationRequest": {
        "type": "object",
        "description": "Request payload for activating a pipeline. This includes flags for staging, validation, activation, and start operations.",
        "properties": {
          "validate": {
            "type": "boolean",
            "description": "Flag to indicate whether validation should be performed during staging",
            "example": true
          },
          "stage": {
            "type": "boolean",
            "description": "Flag to indicate whether the pipeline should be staged",
            "example": true
          },
          "activate": {
            "type": "boolean",
            "description": "Flag to indicate whether the pipeline should be activated",
            "example": true
          },
          "start": {
            "type": "boolean",
            "description": "Flag to indicate whether the pipeline should be started",
            "example": true
          }
        }
      },
      "MainframeImportPipelineRequest": {
        "type": "object",
        "description": "Import request containing ZIP file and conflict resolutions",
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "description": "Compressed ZIP file containing mainframe pipelines to import. Max size: 15MB.",
            "example": "pipelines_backup.zip"
          },
          "resolveConflictsForPipelineNames": {
            "type": "array",
            "description": "Resolve conflicts for pipelines with these names during import by importing them with new pipeline names\n- new_name = given_name + \"_imported\"\n- if a \"Pipeline1\" already exists, the imported pipeline will be named \"Pipeline1_imported\"\n",
            "example": [
              "Pipeline1",
              "Pipeline2"
            ],
            "items": {
              "type": "string"
            }
          },
          "ignorePipelinesNames": {
            "type": "array",
            "description": "Ignore pipelines with these names during import if conflicts are detected.",
            "example": [
              "Pipeline3",
              "Pipeline4"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "MainframeImportPipelineError": {
        "type": "object",
        "description": "Details of a pipeline import error",
        "properties": {
          "errorType": {
            "type": "string",
            "description": "Type of error that occurred during import:\n- CONFLICT_ERROR: A pipeline with the same name already exists, use conflict resolutions in import request.\n",
            "enum": [
              "PIPELINE_ERROR",
              "RUNTIME_ENGINE_ERROR",
              "CONFLICT_ERROR"
            ],
            "example": "PIPELINE_ERROR"
          },
          "pipelineName": {
            "type": "string",
            "description": "Name of the pipeline that failed to import",
            "example": "failed-pipeline"
          },
          "errorMessage": {
            "type": "string",
            "description": "Detailed error message explaining what went wrong",
            "example": "Pipeline configuration is invalid: missing required connection settings"
          }
        }
      },
      "MainframeImportPipelineSuccess": {
        "type": "object",
        "description": "Details of a successfully imported pipeline",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project where the pipeline was imported",
            "example": "67f8d2c8e4b0a1b2c3d4e5f7"
          },
          "pipelineId": {
            "type": "string",
            "description": "Unique identifier assigned to the imported pipeline",
            "example": "67f8d2c8e4b0a1b2c3d4e5f6"
          },
          "pipelineName": {
            "type": "string",
            "description": "Original name of the pipeline in the ZIP archive",
            "example": "customer-data-pipeline"
          },
          "importedPipelineName": {
            "type": "string",
            "description": "Name of the pipeline after import (may differ if renamed due to conflicts)",
            "example": "customer-data-pipeline-v2"
          },
          "status": {
            "type": "string",
            "description": "Import status of the pipeline",
            "enum": [
              "IMPORTED",
              "IGNORED"
            ],
            "example": "IMPORTED"
          }
        }
      },
      "MainframePipelineImportResponse": {
        "type": "object",
        "description": "Response containing the results of importing mainframe pipelines from a ZIP archive",
        "properties": {
          "successes": {
            "type": "array",
            "description": "List of pipelines that were successfully imported",
            "example": [
              {
                "pipelineName": "pipeline1",
                "pipelineImportedName": "pipeline1",
                "pipelineId": "123",
                "projectId": "456",
                "status": "SUCCESS"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/MainframeImportPipelineSuccess"
            }
          },
          "errors": {
            "type": "array",
            "description": "List of pipelines that failed to import with error details",
            "example": [
              {
                "errorType": "VALIDATION_ERROR",
                "pipelineName": "pipeline2",
                "errorMessage": "Invalid configuration"
              }
            ],
            "items": {
              "$ref": "#/components/schemas/MainframeImportPipelineError"
            }
          }
        }
      },
      "CreateMainframePipelineRequest": {
        "type": "object",
        "description": "Request payload for creating a new Mainframe Replication Pipeline in the Data Integration Project",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Project ID. When supplied, the pipeline is created directly under this project.",
            "example": "project-123"
          },
          "projectName": {
            "type": "string",
            "description": "Project name. Used only when projectId is omitted.",
            "example": "Mainframe-Project",
            "pattern": "^[a-zA-Z][a-zA-Z0-9_ -]*$|^$"
          },
          "pipelineName": {
            "type": "string",
            "description": "Pipeline name",
            "example": "Mainframe-Pipeline-1",
            "pattern": "[a-zA-Z0-9._-]+$"
          },
          "description": {
            "type": "string",
            "description": "Description of the replication pipeline",
            "example": "Pipeline for synchronizing customer data between systems"
          },
          "syncConfig": {
            "$ref": "#/components/schemas/CreateMainframeSyncPipelineRequest",
            "description": "Sync pipeline configuration"
          },
          "reverseSyncConfig": {
            "$ref": "#/components/schemas/CreateMainframeReverseSyncPipelineRequest",
            "description": "Reverse sync pipeline configuration"
          },
          "replicationSettings": {
            "$ref": "#/components/schemas/MainframePipelineSettings",
            "description": "Mainframe pipeline replication settings"
          }
        },
        "required": [
          "replicationSettings"
        ]
      },
      "CreateMainframeReverseSyncPipelineRequest": {
        "type": "object",
        "description": "Configuration for the mainframe reverse sync pipeline",
        "properties": {
          "sourceConnectionId": {
            "type": "string",
            "description": "Source connection ID",
            "example": "67fccf1e836cb73b44f6c038",
            "minLength": 1
          },
          "targetConnectionId": {
            "type": "string",
            "description": "Target connection ID",
            "example": "67fccf97836cb73b44f6c058",
            "minLength": 1
          }
        },
        "required": [
          "sourceConnectionId",
          "targetConnectionId"
        ]
      },
      "CreateMainframeSyncPipelineRequest": {
        "type": "object",
        "description": "Configuration for the mainframe sync pipeline",
        "properties": {
          "runTimeEngineName": {
            "type": "string",
            "description": "Runtime engine name",
            "example": "Engine1",
            "minLength": 1
          }
        },
        "required": [
          "runTimeEngineName"
        ]
      },
      "MainframePipelineSettings": {
        "type": "object",
        "description": "Mainframe pipeline settings",
        "properties": {
          "sourceConnectionType": {
            "type": "string",
            "description": "Source connection type",
            "enum": [
              "VSAM",
              "IMS",
              "DB2ZOS",
              "DB2I",
              "KAFKA",
              "NONE"
            ],
            "example": "VSAM"
          },
          "targetConnectionType": {
            "type": "string",
            "description": "Target connection type",
            "enum": [
              "VSAM",
              "IMS",
              "DB2ZOS",
              "DB2I",
              "KAFKA",
              "NONE"
            ],
            "example": "KAFKA"
          },
          "autoStart": {
            "type": "boolean",
            "description": "Auto start pipeline after the configuration is active",
            "example": true
          },
          "replicationMode": {
            "type": "string",
            "description": "Replication mode",
            "enum": [
              "ADVANCED",
              "HIGH_VOLUME"
            ],
            "example": "ADVANCED"
          }
        },
        "required": [
          "sourceConnectionType",
          "targetConnectionType"
        ]
      },
      "CreateMainframePipelineResponse": {
        "type": "object",
        "description": "Response containing the created pipeline's details",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "ID of the project containing the pipeline. This is the project that was either found or created during the pipeline creation process.",
            "example": "data-integration-project-id-123"
          },
          "pipelineId": {
            "type": "string",
            "description": "ID of the created pipeline. This identifier can be used to query the pipeline status, modify its configuration, or manage its lifecycle.",
            "example": "customer-data-synchronization-pipeline-456"
          },
          "replicationType": {
            "type": "string",
            "description": "Type of mainframe replication configured for the pipeline.",
            "enum": [
              "ENGINE",
              "REPLICATOR"
            ],
            "example": "MAINFRAME_REPLICATION_TYPE_ENGINE"
          }
        }
      },
      "TriggerMainframePipelinesRequest": {
        "type": "object",
        "description": "Request to trigger lifecycle actions (start / stop) for one or more mainframe pipelines within a project.",
        "properties": {
          "pipelines": {
            "type": "array",
            "description": "List of pipeline IDs on which the action should be applied.",
            "example": [
              "pipelineId1",
              "pipelineId2"
            ],
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "uniqueItems": true
          },
          "action": {
            "type": "string",
            "description": "Action to perform on the specified pipelines.",
            "enum": [
              "START",
              "STOP"
            ],
            "example": "START"
          }
        },
        "required": [
          "action",
          "pipelines"
        ]
      },
      "TriggerOperationResponse": {
        "type": "object",
        "description": "Acknowledgement response indicating the submitted trigger request for specified operation was accepted.",
        "properties": {
          "message": {
            "type": "string",
            "description": "Informational message describing the outcome of the submission.",
            "example": "request START submitted"
          },
          "status": {
            "type": "string",
            "description": "Overall submission status of the trigger request.",
            "enum": [
              "Submitted",
              "InProgress",
              "Completed",
              "Partial",
              "Failed",
              "Cancelled"
            ],
            "example": "Submitted"
          }
        }
      },
      "CreateProjectRequest": {
        "type": "object",
        "description": "Request payload for creating a new Continuous Data Integration Project",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the project to be created. A project is a container for continuous data integration pipelines.",
            "example": "data_integration_project",
            "minLength": 1,
            "pattern": "^[a-zA-Z][a-zA-Z0-9_ -]*$"
          },
          "description": {
            "type": "string",
            "description": "Optional description of the data integration project",
            "example": "Project for managing continuous data integration pipelines"
          }
        },
        "required": [
          "name"
        ]
      },
      "CreateContinuousProjectResponse": {
        "type": "object",
        "description": "Response containing the created project's ID",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the created project. This identifier can be used to query the project status, modify its configuration, or manage its pipelines.",
            "example": "project-123"
          }
        }
      },
      "SuggestedAssetResponse": {
        "type": "object",
        "description": "Full path details for a matched catalog asset. Fields are populated based on asset type.",
        "properties": {
          "database": {
            "type": "string",
            "description": "Database name (for RDBMS assets)",
            "example": "db1"
          },
          "schema": {
            "type": "string",
            "description": "Schema name (for RDBMS assets)",
            "example": "public"
          },
          "table": {
            "type": "string",
            "description": "Table name (for RDBMS assets)",
            "example": "users"
          },
          "journal": {
            "type": "string",
            "description": "Journal name (for DB2I/DB2LUW RDBMS assets)",
            "example": "user/journal"
          },
          "topic": {
            "type": "string",
            "description": "Kafka topic name (for Kafka assets)",
            "example": "user-events"
          },
          "subject": {
            "type": "string",
            "description": "Schema Registry subject (for Schema Registry assets)",
            "example": "users-value"
          }
        }
      },
      "AssetMatchCriteria": {
        "type": "object",
        "description": "Request model for asset matching at any hierarchy level.",
        "properties": {
          "database": {
            "type": "string",
            "description": "Optional: Database name for schema/table matching."
          },
          "schema": {
            "type": "string",
            "description": "Optional: Schema name for table matching."
          },
          "patterns": {
            "type": "array",
            "description": "List of regex patterns for matching assets.",
            "items": {
              "type": "string"
            },
            "minItems": 1
          }
        },
        "required": [
          "patterns"
        ]
      },
      "ColumnMapping": {
        "type": "object",
        "properties": {
          "sourceColumnName": {
            "type": "string"
          },
          "targetColumnName": {
            "type": "string"
          },
          "sourceColType": {
            "type": "string"
          },
          "targetColType": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "Copy",
              "Ignore",
              "SoftDelete"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "TARGET_COLUMN_DATATYPE_NOT_SUPPORTED",
              "SOURCE_COLUMN_DATATYPE_NOT_SUPPORTED",
              "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_NOT_SUPPORTED",
              "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
              "SOURCE_COLUMN_DATATYPE_SUPPORTED",
              "TARGET_AND_SOURCE_COLUMN_DATATYPE_NOT_COMPATIBLE",
              "NOT_CHECKED"
            ]
          },
          "targetColumnNullableState": {
            "type": "string",
            "enum": [
              "NULLABLE_WITH_DEFAULT_VALUE",
              "NULLABLE_WITHOUT_DEFAULT_VALUE",
              "NON_NULLABLE_WITH_DEFAULT_VALUE",
              "NON_NULLABLE_WITHOUT_DEFAULT_VALUE"
            ]
          },
          "sourceColumnNullableState": {
            "type": "string",
            "enum": [
              "NULLABLE_WITH_DEFAULT_VALUE",
              "NULLABLE_WITHOUT_DEFAULT_VALUE",
              "NON_NULLABLE_WITH_DEFAULT_VALUE",
              "NON_NULLABLE_WITHOUT_DEFAULT_VALUE"
            ]
          },
          "key": {
            "type": "boolean"
          },
          "duplicate": {
            "type": "boolean"
          },
          "expression": {
            "type": "boolean"
          },
          "fieldMappingType": {
            "type": "string",
            "enum": [
              "FIELD",
              "EXPRESSION",
              "RRN"
            ]
          }
        }
      },
      "ContinuousMappingConfiguration": {
        "type": "object",
        "description": "Mapping object for 1-to-many source-to-target mapping relationship",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/ContinuousSourceMapping",
            "description": "Source object (polymorphic)"
          },
          "targets": {
            "type": "array",
            "description": "List of target objects (polymorphic, can be empty in direct mapping phase)",
            "items": {
              "$ref": "#/components/schemas/ContinuousTargetMapping"
            }
          }
        },
        "required": [
          "source"
        ]
      },
      "ContinuousSourceMapping": {
        "type": "object",
        "description": "Polymorphic source mapping configuration (e.g., RDBMS, KAFKA, SCHEMA_REGISTRY)",
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the source mapping (e.g., RDBMS, KAFKA, SCHEMA_REGISTRY)",
            "enum": [
              "RDBMS",
              "KAFKA",
              "SCHEMA_REGISTRY"
            ]
          }
        }
      },
      "ContinuousTableMappingRequest": {
        "type": "object",
        "description": "Request model for automatic source-to-many-target table mapping for a continuous replication pipeline",
        "properties": {
          "mappings": {
            "type": "array",
            "description": "List of mapping objects, each defining a 1-to-many source-to-target mapping",
            "items": {
              "$ref": "#/components/schemas/ContinuousMappingConfiguration"
            },
            "minItems": 1
          }
        },
        "required": [
          "mappings"
        ]
      },
      "ContinuousTargetMapping": {
        "type": "object",
        "description": "Polymorphic target mapping configuration (e.g., RDBMS, KAFKA, SCHEMA_REGISTRY)",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "ID of the target connection; used to resolve target type and metadata"
          },
          "softDeleteColumn": {
            "type": "string",
            "description": "Soft delete column name for the target"
          },
          "columnMappings": {
            "type": "array",
            "description": "List of column mappings for the target",
            "items": {
              "$ref": "#/components/schemas/ColumnMapping"
            }
          },
          "includedCDCRowMetadata": {
            "type": "array",
            "description": "List of CDC row metadata fields to include for the target",
            "items": {
              "type": "string"
            }
          },
          "type": {
            "type": "string",
            "description": "The type of the target mapping (e.g., RDBMS, KAFKA, SCHEMA_REGISTRY)",
            "enum": [
              "RDBMS",
              "KAFKA",
              "SCHEMA_REGISTRY"
            ]
          }
        }
      },
      "ColumnMappingResponse": {
        "type": "object",
        "description": "Response model containing column mapping information",
        "properties": {
          "sourceColumnName": {
            "type": "string",
            "description": "Name of the source column",
            "example": "ACCOUNT_ID"
          },
          "targetColumnName": {
            "type": "string",
            "description": "Name of the target column",
            "example": "ACCOUNT_ID"
          },
          "sourceColType": {
            "type": "string",
            "description": "Data type of the source column",
            "example": "INTEGER"
          },
          "targetColType": {
            "type": "string",
            "description": "Data type of the target column",
            "example": "INT64"
          },
          "isDistributionKey": {
            "type": "boolean",
            "description": "Flag indicating if this column is used as a distribution key",
            "example": true
          },
          "action": {
            "type": "string",
            "description": "Action to be performed for this column mapping",
            "enum": [
              "Copy",
              "Ignore",
              "SoftDelete"
            ],
            "example": "Copy"
          },
          "state": {
            "type": "string",
            "description": "Current state of the column mapping",
            "enum": [
              "TARGET_COLUMN_DATATYPE_NOT_SUPPORTED",
              "SOURCE_COLUMN_DATATYPE_NOT_SUPPORTED",
              "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_NOT_SUPPORTED",
              "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED",
              "SOURCE_COLUMN_DATATYPE_SUPPORTED",
              "TARGET_AND_SOURCE_COLUMN_DATATYPE_NOT_COMPATIBLE",
              "NOT_CHECKED"
            ],
            "example": "BOTH_TARGET_AND_SOURCE_COLUMN_DATATYPE_SUPPORTED"
          },
          "sourceColumnNullableState": {
            "type": "string",
            "description": "Nullable state of the source column",
            "enum": [
              "NULLABLE_WITH_DEFAULT_VALUE",
              "NULLABLE_WITHOUT_DEFAULT_VALUE",
              "NON_NULLABLE_WITH_DEFAULT_VALUE",
              "NON_NULLABLE_WITHOUT_DEFAULT_VALUE"
            ],
            "example": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE"
          },
          "targetColumnNullableState": {
            "type": "string",
            "description": "Nullable state of the target column",
            "enum": [
              "NULLABLE_WITH_DEFAULT_VALUE",
              "NULLABLE_WITHOUT_DEFAULT_VALUE",
              "NON_NULLABLE_WITH_DEFAULT_VALUE",
              "NON_NULLABLE_WITHOUT_DEFAULT_VALUE"
            ],
            "example": "NON_NULLABLE_WITHOUT_DEFAULT_VALUE"
          },
          "metadataMapping": {
            "type": "boolean",
            "description": "Flag indicating if this is a change data records metadata mapping",
            "example": false
          },
          "mappingType": {
            "type": "string",
            "description": "Type of mapping if this is FIELD / EXPRESSION / RRN",
            "enum": [
              "FIELD",
              "EXPRESSION",
              "RRN"
            ],
            "example": "FIELD"
          }
        }
      },
      "ContinuousTableMappingResponse": {
        "type": "object",
        "description": "Response model containing table mapping information for continuous replication pipelines",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the table mapping",
            "example": "mapping_x688lglh9kq5"
          },
          "sourceDatabase": {
            "type": "string",
            "description": "Name of the source database",
            "example": "source-database"
          },
          "sourceSchema": {
            "type": "string",
            "description": "Name of the source schema",
            "example": "source-schema"
          },
          "sourceTable": {
            "type": "string",
            "description": "Name of the source table",
            "example": "source-table"
          },
          "targetDatabase": {
            "type": "string",
            "description": "Name of the target database",
            "example": "target-database"
          },
          "targetSchema": {
            "type": "string",
            "description": "Name of the target schema",
            "example": "target-schema"
          },
          "targetTable": {
            "type": "string",
            "description": "Name of the target table",
            "example": "target-table"
          },
          "targetTopic": {
            "type": "string",
            "description": "Name of the target topic",
            "example": "target-topic"
          },
          "targetSubject": {
            "type": "string",
            "description": "Name of the target subject for schema registry",
            "example": "target-subject"
          },
          "type": {
            "type": "string",
            "description": "Type of the table mapping",
            "enum": [
              "TARGET_EXISTS_WITH_MATCH",
              "TARGET_EXISTS_WITHOUT_MATCH",
              "TARGET_DOES_NOT_EXIST",
              "BOTH_TARGET_AND_SUBJECT_EXISTS_WITH_MATCH",
              "TARGET_EXISTS_WITHOUT_MATCH_AND_SUBJECT_EXISTS_WITH_MATCH",
              "TARGET_DOES_NOT_EXIST_AND_SUBJECT_EXISTS_WITH_MATCH",
              "TARGET_EXISTS_WITH_MATCH_AND_SUBJECT_EXISTS_WITHOUT_MATCH",
              "BOTH_TARGET_AND_SUBJECT_EXISTS_WITHOUT_MATCH",
              "TARGET_DOES_NOT_EXIST_AND_SUBJECT_EXISTS_WITHOUT_MATCH",
              "TARGET_EXISTS_WITH_MATCH_AND_SUBJECT_DOES_NOT_EXIST",
              "TARGET_EXISTS_WITHOUT_MATCH_AND_SUBJECT_DOES_NOT_EXIST",
              "BOTH_TARGET_AND_SUBJECT_DOES_NOT_EXIST"
            ],
            "example": "TARGET_EXISTS_WITH_MATCH"
          },
          "hasCustomColMappings": {
            "type": "boolean",
            "description": "Flag indicating whether the table has custom column mappings",
            "example": true
          },
          "includedCDCRowMetadata": {
            "type": "array",
            "description": "Metadata fields to include with change data records for this table mapping configuration, this overrides the Metadata fields defined at the pipeline level",
            "items": {
              "type": "string"
            }
          },
          "schemaVersion": {
            "type": "string",
            "description": "Version of the schema used for this mapping",
            "example": 1
          },
          "softDeleteColumnName": {
            "type": "string",
            "description": "Name of the column used for soft deletes",
            "example": "soft_delete_column"
          },
          "columnMappings": {
            "type": "array",
            "description": "List of column mappings for this table",
            "items": {
              "$ref": "#/components/schemas/ColumnMappingResponse"
            }
          }
        }
      },
      "ContinuousPipelineConnectionsRequest": {
        "type": "object",
        "description": "Request payload for associating source and target connections with an existing Continuous Replication Pipeline",
        "properties": {
          "sourceConnectionId": {
            "type": "string",
            "description": "The ID of the source data connection to use for the pipeline. A data connection contains information on how to access the database or data source along with the required credentials.",
            "example": "conn-src-uuid",
            "minLength": 1
          },
          "targetConnectionId": {
            "type": "string",
            "description": "The ID of the target data connection to use for the pipeline. A data connection contains information on how to access the database or data along with the required credentials.",
            "example": "conn-tgt-uuid",
            "minLength": 1
          },
          "sourceParameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Optional custom source connection parameters to override defaults. Parameters should match known parameter names; unknown parameters will be ignored with a warning."
          },
          "targetParameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Optional custom target connection parameters to override defaults. When target connection type is KAFKA, these parameters will override the default Kafka parameters. Parameters should match known parameter names; unknown parameters will be ignored with a warning. Common Kafka parameters include: ACKNOWLEDGMENT, ENABLE_TRANSACTION_BUNDLING, INCLUDE_IMAGE_OPTION, LOB_MAX_SIZE, MESSAGE_FORMAT, PARTITION_MESSAGES_BY, etc.",
            "example": {
              "MESSAGE_FORMAT": "CSV",
              "ACKNOWLEDGMENT": "WAIT_SINGLE_BROKER"
            }
          }
        },
        "required": [
          "sourceConnectionId",
          "targetConnectionId"
        ]
      },
      "BatchWindow": {
        "type": "object",
        "description": "Configuration for batch processing windows in staging operations. Defines both data volume and time-based triggers that determine when batch processing operations should be initiated in the staging environment.",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/DataLimit",
            "description": "Data limit configuration for batch processing"
          },
          "duration": {
            "$ref": "#/components/schemas/Duration",
            "description": "Duration configuration for batch processing"
          }
        }
      },
      "ContinuousPipelineConfigurationRequest": {
        "type": "object",
        "description": "Request payload for configuring various components within a continuous integration pipeline",
        "properties": {
          "metabase": {
            "$ref": "#/components/schemas/MetabaseConfiguration",
            "description": "Configuration for Metabase Replication Metadata component"
          },
          "logReader": {
            "$ref": "#/components/schemas/LogReaderConfiguration",
            "description": "Configuration for LogReader log processing and journal management component"
          },
          "userDatabase": {
            "$ref": "#/components/schemas/UserDatabaseConfiguration",
            "description": "Configuration for User Database components"
          },
          "staging": {
            "$ref": "#/components/schemas/StagingConfiguration",
            "description": "Configuration for Staging data processing and batch management component"
          }
        }
      },
      "DataLimit": {
        "type": "object",
        "description": "Configuration for data limits in batch operations",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32",
            "description": "Numeric limit value for batch processing",
            "example": 100
          },
          "units": {
            "type": "string",
            "description": "Units for the data limit",
            "example": "THOUSAND",
            "minLength": 1
          }
        },
        "required": [
          "limit",
          "units"
        ]
      },
      "Duration": {
        "type": "object",
        "description": "Configuration for duration limits in batch operations",
        "properties": {
          "frequency": {
            "type": "integer",
            "format": "int32",
            "description": "Frequency value for batch processing",
            "example": 60
          },
          "units": {
            "type": "string",
            "description": "Time units for the frequency",
            "example": "SECONDS",
            "minLength": 1
          }
        },
        "required": [
          "frequency",
          "units"
        ]
      },
      "LogReaderConfiguration": {
        "type": "object",
        "description": "Configuration parameters for LogReader log processing and journal management component",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name identifier for the LogReader instance",
            "example": "transaction-logReader",
            "minLength": 1,
            "pattern": "[a-zA-Z0-9@$#/_-]+$"
          },
          "journalName": {
            "type": "string",
            "description": "The journal name for log processing and change data capture, mandatory for DB2I connection type but can be omitted for Db2LUW connection type",
            "example": "transaction-journal",
            "pattern": "[a-zA-Z0-9@$#/_-]+$"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration parameters for LogReader customization",
            "example": {
              "log_level": "INFO",
              "batch_size": "1000"
            }
          }
        },
        "required": [
          "name"
        ]
      },
      "MetabaseConfiguration": {
        "type": "object",
        "description": "Composite Metabase configuration containing source and target endpoint configurations",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/MetabaseEndpointConfiguration",
            "description": "Source Metabase configuration"
          },
          "target": {
            "$ref": "#/components/schemas/MetabaseEndpointConfiguration",
            "description": "Target Metabase configuration"
          }
        }
      },
      "MetabaseEndpointConfiguration": {
        "type": "object",
        "description": "Configuration parameters for a single Metabase endpoint (source or target)",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name identifier for the Metabase instance",
            "example": "analytics-metabase",
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9._-]+$"
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Vault connection ID for secure credential storage",
            "example": "vault-conn-123"
          },
          "adminUser": {
            "type": "string",
            "description": "Admin username for Metabase authentication",
            "example": "metabase_admin"
          },
          "adminPassword": {
            "type": "string",
            "description": "Admin password for Metabase authentication",
            "example": "********"
          },
          "replicationUser": {
            "type": "string",
            "description": "Replication user for Metabase",
            "example": "replicator_user",
            "minLength": 1
          },
          "replicationPassword": {
            "type": "string",
            "description": "Password for Metabase replication user",
            "example": "********",
            "minLength": 1
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration parameters",
            "example": {
              "database_type": "postgresql"
            }
          },
          "role": {
            "type": "string",
            "description": "Endpoint role (SOURCE or TARGET)",
            "enum": [
              "SOURCE",
              "TARGET"
            ],
            "readOnly": true
          }
        },
        "required": [
          "name",
          "replicationPassword",
          "replicationUser"
        ]
      },
      "StagingConfiguration": {
        "type": "object",
        "description": "Configuration parameters for Staging data processing and batch management component",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of staging configuration specifying the cloud storage platform",
            "enum": [
              "CDWH_STAGING_TYPE_GCS",
              "CDWH_STAGING_TYPE_S3",
              "CDWH_STAGING_TYPE_AZURE"
            ],
            "example": "CDWH_STAGING_TYPE_S3"
          },
          "directory": {
            "type": "string",
            "description": "Directory path for staging data storage",
            "example": "/data/staging",
            "minLength": 1
          },
          "schema": {
            "type": "string",
            "description": "Database schema name for staging operations",
            "example": "staging_schema",
            "minLength": 1
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Vault connection ID for secure credential storage",
            "example": "vault-conn-123"
          },
          "storageIntegration": {
            "type": "string",
            "description": "Name of the Snowflake account-level object for connecting to external cloud storage (used for Snowflake target connections with GCP/Azure/S3 staging)",
            "example": "my_storage_integration"
          },
          "batchWindow": {
            "$ref": "#/components/schemas/BatchWindow",
            "description": "Batch processing window configuration for staging operations"
          }
        },
        "required": [
          "batchWindow",
          "directory",
          "schema",
          "type"
        ]
      },
      "UserDatabaseConfiguration": {
        "type": "object",
        "description": "Composite User Database configuration containing source and target endpoint configurations",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/UserDatabaseEndpointConfiguration",
            "description": "Source User Database configuration"
          },
          "target": {
            "$ref": "#/components/schemas/UserDatabaseEndpointConfiguration",
            "description": "Target User Database configuration"
          }
        }
      },
      "UserDatabaseEndpointConfiguration": {
        "type": "object",
        "description": "Configuration parameters for creating User Databases per endpoint (source or target)",
        "properties": {
          "databases": {
            "type": "array",
            "description": "List of user databases to configure",
            "example": [
              "user-db-primary",
              "user-db-replica"
            ],
            "items": {
              "type": "string"
            },
            "minItems": 1
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Vault connection ID for secure credential storage",
            "example": "vault-conn-123"
          },
          "username": {
            "type": "string",
            "description": "Username for user database authentication",
            "example": "db_admin",
            "minLength": 1
          },
          "password": {
            "type": "string",
            "description": "Password for user database authentication",
            "example": "********",
            "minLength": 1
          },
          "replicationUser": {
            "type": "string",
            "description": "Replication user for the prepared user databases; required for SQL Server and PostgreSQL connections",
            "example": "replicator_user"
          },
          "role": {
            "type": "string",
            "description": "Endpoint role (SOURCE or TARGET)",
            "enum": [
              "SOURCE",
              "TARGET"
            ],
            "readOnly": true
          }
        },
        "required": [
          "databases",
          "password",
          "username"
        ]
      },
      "ContinuousPipelineConfigurationResponse": {
        "type": "object",
        "description": "Consolidated response containing results from continuous pipeline component configuration operations",
        "properties": {
          "requestId": {
            "type": "string",
            "description": "Unique identifier for this configuration request",
            "example": "config-req-12345-abcde"
          },
          "overallStatus": {
            "type": "string",
            "description": "Overall status of the configuration operation",
            "enum": [
              "SUCCESS",
              "PARTIAL",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "executionTimeInMs": {
            "type": "integer",
            "format": "int64",
            "description": "Total execution time for all component configurations in milliseconds",
            "example": 45123
          },
          "metabase": {
            "$ref": "#/components/schemas/MetabaseResult",
            "description": "Results for Metabase configuration"
          },
          "logReader": {
            "$ref": "#/components/schemas/LogReaderResult",
            "description": "Results for LogReader configuration"
          },
          "userDatabase": {
            "$ref": "#/components/schemas/UserDatabaseResult",
            "description": "Results for User Database configurations"
          },
          "staging": {
            "$ref": "#/components/schemas/StagingResult",
            "description": "Results for Staging configuration"
          }
        }
      },
      "DatabaseConfigurationResult": {
        "type": "object",
        "description": "Result for individual database configuration",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the user database"
          },
          "response": {
            "type": "string",
            "description": "Response message from the configuration process"
          },
          "status": {
            "type": "string",
            "description": "Configuration status for this user database",
            "enum": [
              "SUCCESS",
              "FAILED",
              "SKIPPED"
            ]
          }
        }
      },
      "EndpointUserDatabaseResult": {
        "type": "object",
        "description": "Aggregated database configuration results for one endpoint (source or target)",
        "properties": {
          "success": {
            "type": "array",
            "description": "Successful database configuration results for this endpoint",
            "items": {
              "$ref": "#/components/schemas/DatabaseConfigurationResult"
            }
          },
          "failure": {
            "type": "array",
            "description": "Failed database configuration results for this endpoint",
            "items": {
              "$ref": "#/components/schemas/DatabaseConfigurationResult"
            }
          }
        }
      },
      "LogReaderResult": {
        "type": "object",
        "description": "Result details for LogReader component configuration",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the configured LogReader instance"
          },
          "journalName": {
            "type": "string",
            "description": "Journal name associated with the LogReader"
          },
          "response": {
            "type": "string",
            "description": "Response message from the configuration process"
          },
          "status": {
            "type": "string",
            "description": "Configuration status for this component",
            "enum": [
              "SUCCESS",
              "FAILED",
              "SKIPPED"
            ]
          }
        }
      },
      "MetabaseResult": {
        "type": "object",
        "description": "Metabase configuration outcome separated into success and failure lists",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/MetabaseConfigurationResult",
            "description": "Metabase configuration result for source endpoint"
          },
          "target": {
            "$ref": "#/components/schemas/MetabaseConfigurationResult",
            "description": "Metabase configuration result for target endpoint"
          }
        }
      },
      "StagingResult": {
        "type": "object",
        "description": "Result details for Staging component configuration",
        "properties": {
          "status": {
            "type": "string",
            "description": "Configuration status for staging component",
            "enum": [
              "SUCCESS",
              "FAILED",
              "SKIPPED"
            ]
          },
          "response": {
            "type": "string",
            "description": "Response message from the configuration process"
          }
        }
      },
      "UserDatabaseResult": {
        "type": "object",
        "description": "Result details for User Database component configurations",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/EndpointUserDatabaseResult",
            "description": "User database configuration results for source endpoint"
          },
          "target": {
            "$ref": "#/components/schemas/EndpointUserDatabaseResult",
            "description": "User database configuration results for target endpoint"
          }
        }
      },
      "ProjectId": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        }
      },
      "AnalyzeStatus": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "OPEN",
              "INPROGRESS",
              "SUCCESS",
              "COMPLETED",
              "TIMEOUT",
              "ERROR"
            ]
          },
          "lastUpdatedOn": {
            "type": "string",
            "format": "date-time"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "CommitStatusResponse": {
        "type": "object",
        "description": "Adapter-owned commit or staging status details",
        "properties": {
          "status": {
            "type": "string",
            "description": "Commit execution status",
            "enum": [
              "OPEN",
              "INPROGRESS",
              "SUCCESS",
              "COMPLETED",
              "TIMEOUT",
              "ERROR"
            ],
            "example": "COMPLETED"
          },
          "message": {
            "type": "string",
            "description": "Commit summary message"
          },
          "lastUpdatedOn": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when commit status was last updated",
            "example": "2026-08-12T06:22:07Z"
          },
          "projectValidation": {
            "$ref": "#/components/schemas/ValidationResultResponse",
            "description": "Detailed validation summary associated with the commit state"
          },
          "committed": {
            "type": "boolean",
            "description": "Whether the project has been committed"
          }
        }
      },
      "UnifiedProjectStatusResponse": {
        "type": "object",
        "description": "Unified project status response",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project"
          },
          "validateStatus": {
            "$ref": "#/components/schemas/ValidationStatusResponse",
            "description": "Validation status details"
          },
          "commitStatus": {
            "$ref": "#/components/schemas/CommitStatusResponse",
            "description": "Commit/staging status details"
          },
          "analyzeStatus": {
            "$ref": "#/components/schemas/AnalyzeStatus",
            "description": "Optional conversion analysis status for Continuous Replication projects; omitted when unavailable"
          }
        }
      },
      "ActivationOptions": {
        "type": "object",
        "description": "Options for activating the project",
        "properties": {
          "forced": {
            "type": "boolean",
            "description": "Flag to indicate whether activation should be forced, overriding any existing active configurations",
            "example": false
          },
          "queueTimeoutInMinutes": {
            "type": "integer",
            "format": "int32",
            "description": "Queue timeout in minutes",
            "example": 4
          },
          "stopRequestTimeoutInMinutes": {
            "type": "integer",
            "format": "int32",
            "description": "Stop request timeout in minutes",
            "example": 4
          },
          "tableCaptureTimeoutInMinutes": {
            "type": "integer",
            "format": "int32",
            "description": "Table capture timeout in minutes",
            "example": 8
          }
        }
      },
      "ProjectActivationRequest": {
        "type": "object",
        "description": "Request payload for activating a project. This includes flags and options for staging, activation, and pipeline start operations. It supports detailed configurations such as forced operations and timeouts.",
        "properties": {
          "validate": {
            "type": "boolean",
            "description": "Flag to indicate whether pipeline activation readiness should be validated before staging is committed",
            "example": true
          },
          "validateOptions": {
            "$ref": "#/components/schemas/ValidateOptions",
            "description": "Options for validating pipeline activation readiness before staging is committed"
          },
          "stage": {
            "type": "boolean",
            "description": "Flag to indicate whether the project should be staged",
            "example": true
          },
          "stagingOptions": {
            "$ref": "#/components/schemas/StagingOptions",
            "description": "Options for staging the project"
          },
          "activate": {
            "type": "boolean",
            "description": "Flag to indicate whether the project should be activated",
            "example": true
          },
          "activationOptions": {
            "$ref": "#/components/schemas/ActivationOptions",
            "description": "Options for activating the project"
          },
          "startPipelines": {
            "type": "boolean",
            "description": "Flag to indicate whether pipelines within the project should be started",
            "example": true
          }
        },
        "required": [
          "activate",
          "stage",
          "startPipelines"
        ]
      },
      "StagingOptions": {
        "type": "object",
        "description": "Options for staging the project",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of staging",
            "enum": [
              "INCREMENTAL_COMMIT",
              "FULL_COMMIT"
            ],
            "example": "INCREMENTAL_COMMIT"
          }
        },
        "required": [
          "type"
        ]
      },
      "ValidateOptions": {
        "type": "object",
        "description": "Options for validating pipeline activation readiness before staging is committed",
        "properties": {
          "pipelineIds": {
            "type": "array",
            "description": "IDs of specific pipelines to validate readiness for before validating the entire project. When provided, these pipelines are validated first as a pipeline-level pre-check; the full project is still validated afterward regardless. When omitted, only the project-level validation is performed.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CreateContinuousPipelineRequest": {
        "type": "object",
        "description": "Request payload for creating a new Continuous Replication Pipeline in the Data Integration Project",
        "properties": {
          "projectName": {
            "type": "string",
            "description": "The name of the project that will contain this replication pipeline. A project contains a collection of replication pipelines.",
            "example": "data_integration_project",
            "pattern": "^[a-zA-Z][a-zA-Z0-9_ -]*$"
          },
          "pipelineName": {
            "type": "string",
            "description": "The name of the replication pipeline to be created. A replication pipeline is a collection of data transfer tasks that filters and transfers data to a specified target.",
            "example": "customer-data-sync",
            "pattern": "[a-zA-Z0-9._-]+$"
          },
          "description": {
            "type": "string",
            "description": "Description of the replication pipeline",
            "example": "Pipeline for synchronizing customer data between systems",
            "minLength": 1
          },
          "pipelineType": {
            "type": "string",
            "description": "The type of replication pipeline. Can be COPY (one-time copy), REPLICATE (continuous replication), SYNCHRONIZE (copy then replicate) or AUDIT (auditing data changes) ",
            "enum": [
              "SYNCHRONIZE",
              "REPLICATE",
              "COPY",
              "AUDIT"
            ],
            "example": "SYNCHRONIZE"
          },
          "properties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration properties for the replication pipeline, such as row filters, settings, or process-specific options"
          }
        },
        "required": [
          "description",
          "pipelineType"
        ]
      },
      "CreateContinuousPipelineResponse": {
        "type": "object",
        "description": "Response containing the created pipeline's details",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "ID of the project containing the pipeline. This is the project that was either found or created during the pipeline creation process.",
            "example": "data-integration-project-id-123"
          },
          "pipelineId": {
            "type": "string",
            "description": "ID of the created pipeline. This identifier can be used to query the pipeline status, modify its configuration, or manage its lifecycle.",
            "example": "customer-data-synchronization-pipeline-456"
          }
        }
      },
      "TriggerContinuousPipelinesRequest": {
        "type": "object",
        "description": "Request to trigger lifecycle actions (start / stop) for one or more continuous replication pipelines within a project.",
        "properties": {
          "pipelines": {
            "type": "array",
            "description": "        List of pipeline names on which the action should be applied.\n        If this is not provided, the action will be applied to all pipelines associated with the project.\n",
            "example": [
              "pipeline1",
              "pipeline2"
            ],
            "items": {
              "type": "string"
            }
          },
          "resumeRequest": {
            "type": "boolean",
            "default": false,
            "description": "Indicates whether this trigger is to resume a previously paused or failed request (idempotent retry).",
            "example": false
          },
          "action": {
            "type": "string",
            "description": "Action to perform on the specified pipelines.",
            "enum": [
              "START",
              "STOP"
            ],
            "example": "START"
          }
        },
        "required": [
          "action"
        ]
      },
      "LogReaderStartOptions": {
        "type": "object",
        "description": "Options for starting a log reader, including warm start and offset details.",
        "properties": {
          "warmStart": {
            "type": "boolean",
            "description": "Whether Resume from last read (Warm) or Specify receiver and sequence location(Cold)."
          },
          "receiverType": {
            "type": "string",
            "description": "Receiver type: CURRENT, CURRENT_CHAIN, or SPECIFY. Required for START.",
            "enum": [
              "CURRENT",
              "CURRENT_CHAIN",
              "SPECIFY"
            ],
            "example": "CURRENT"
          },
          "receiverOffset": {
            "type": "integer",
            "format": "int32",
            "description": "Receiver offset if receiverType is SPECIFY. Required for START and SPECIFY.",
            "example": 123
          },
          "sequenceType": {
            "type": "string",
            "description": "Sequence type: LAST, FIRST, or SPECIFY. Required for START.",
            "enum": [
              "FIRST",
              "LAST",
              "SPECIFY"
            ],
            "example": "LAST"
          },
          "sequenceOffset": {
            "type": "integer",
            "format": "int32",
            "description": "Sequence offset if sequenceType is SPECIFY. Required for START and SPECIFY.",
            "example": 456
          }
        }
      },
      "TriggerLogReaderRequest": {
        "type": "object",
        "description": "Request to trigger lifecycle actions (START or STOP) for a log reader within a project.",
        "properties": {
          "pipeline": {
            "type": "string",
            "description": "Name of the pipeline in which associated log reader has to be triggered.",
            "minLength": 1
          },
          "logReader": {
            "type": "string",
            "description": "Name of the log reader to trigger.",
            "minLength": 1
          },
          "startOptions": {
            "$ref": "#/components/schemas/LogReaderStartOptions",
            "description": "Options for starting a log reader, including warm start and offset details. Required only for START action."
          },
          "action": {
            "type": "string",
            "description": "Action to perform on the log readers.",
            "enum": [
              "START",
              "STOP"
            ],
            "example": "START"
          }
        },
        "required": [
          "action",
          "logReader",
          "pipeline"
        ]
      },
      "TriggerEnginesRequest": {
        "type": "object",
        "description": "Request to trigger lifecycle actions (START or STOP) for one or more continuous replication run time engines within a project. If 'engines' is empty or not provided, the action applies to all available engines in the project.",
        "properties": {
          "engines": {
            "type": "array",
            "description": "List of engine names to target for the operation. If empty or not provided, the action applies to all available engines in the project.",
            "items": {
              "type": "string"
            }
          },
          "action": {
            "type": "string",
            "description": "Action to perform on the engines.",
            "enum": [
              "START",
              "STOP"
            ],
            "example": "START"
          }
        },
        "required": [
          "action"
        ]
      },
      "TriggerDiagnosticBundleRequest": {
        "type": "object",
        "description": "Request to start or stop diagnostic bundles.",
        "properties": {
          "bundleName": {
            "type": "string",
            "description": "The name to identify the diagnostic bundle",
            "example": "My-Diagnostic-Bundle",
            "minLength": 1
          },
          "description": {
            "type": "string",
            "description": "A description for the diagnostic bundle",
            "example": "Bundle created for troubleshooting purposes"
          },
          "action": {
            "type": "string",
            "description": "Action to perform: START to initiate bundle creation, STOP to cancel ongoing bundle creation.",
            "enum": [
              "START",
              "STOP"
            ],
            "example": "START"
          }
        },
        "required": [
          "action",
          "bundleName"
        ]
      },
      "TableIdentifier": {
        "type": "object",
        "description": "Fully qualified table identifier with database, schema and table components.",
        "properties": {
          "database": {
            "type": "string",
            "description": "Name of the database containing the table",
            "example": "my_database"
          },
          "schema": {
            "type": "string",
            "description": "Schema (namespace) within the database that contains the table",
            "example": "public"
          },
          "table": {
            "type": "string",
            "description": "Name of the table to operate on. Required when specifying individual tables.",
            "example": "orders"
          }
        }
      },
      "TriggerCaptureRequest": {
        "type": "object",
        "description": "Request to trigger lifecycle actions (START or STOP) for a Capture operation on all or specified table identifiers associated with a pipeline within a project.",
        "properties": {
          "pipeline": {
            "type": "string",
            "description": "Name of the pipeline for which the capture operation should be triggered.",
            "minLength": 1
          },
          "tables": {
            "type": "array",
            "description": "List of fully qualified table identifiers (database, schema, table) to target for the capture operation. If empty or not provided, the action applies to all tables in the pipeline.",
            "items": {
              "$ref": "#/components/schemas/TableIdentifier"
            }
          },
          "action": {
            "type": "string",
            "description": "Action to perform on the capture operation.",
            "enum": [
              "START",
              "STOP"
            ],
            "example": "START"
          }
        },
        "required": [
          "action",
          "pipeline"
        ]
      },
      "TriggerBacklogRowsRequest": {
        "type": "object",
        "description": "Request to trigger clear operation on backlog rows associated with a pipeline within a project",
        "properties": {
          "pipeline": {
            "type": "string",
            "description": "Name of the pipeline for which backlog rows should be cleared.",
            "minLength": 1
          },
          "forced": {
            "type": "boolean",
            "description": "Set to true to force the clear operation. When forced, all backlog rows that have not been replicated for any data connection in the pipeline will be deleted. This may result in data loss."
          },
          "action": {
            "type": "string",
            "description": "Action to perform on the backlog rows.",
            "enum": [
              "CLEAR"
            ],
            "example": "CLEAR"
          }
        },
        "required": [
          "action",
          "pipeline"
        ]
      },
      "FileOperationResult": {
        "type": "object",
        "description": "Result of a single file operation within the push",
        "properties": {
          "flattenedPath": {
            "type": "string",
            "description": "The flattened path of the file",
            "example": "pipelines/customer-sync.dis.yaml"
          },
          "catalogAssetId": {
            "type": "string",
            "description": "The catalog asset ID assigned to this file",
            "example": "asset-xyz-789"
          },
          "action": {
            "type": "string",
            "description": "The action performed on the file",
            "enum": [
              "created",
              "draft_version_created",
              "draft_version_updated",
              "draft_to_approved"
            ],
            "example": "created"
          },
          "phase": {
            "type": "string",
            "description": "The lifecycle phase of the file",
            "enum": [
              "draft",
              "approved",
              "pending_deletion"
            ],
            "example": "draft"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "The version number of the file asset",
            "example": 1
          },
          "catalogLink": {
            "type": "string",
            "description": "Direct link to the asset in the Data Catalog UI",
            "example": "https://catalog.precisely.com/assets/asset-xyz-789"
          }
        }
      },
      "PushSuccessResponse": {
        "type": "object",
        "description": "Response containing the outcome of a successful DSL project push",
        "properties": {
          "status": {
            "type": "string",
            "description": "Status of the push operation",
            "enum": [
              "success",
              "partial",
              "failed"
            ],
            "example": "success"
          },
          "revisionId": {
            "type": "string",
            "description": "Unique identifier of the created revision",
            "example": "rev-abc123"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The revision number assigned to this push",
            "example": 4
          },
          "filesPersistedCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of files persisted in this revision",
            "example": 12
          },
          "fileResults": {
            "type": "array",
            "description": "Per-file operation results",
            "items": {
              "$ref": "#/components/schemas/FileOperationResult"
            }
          },
          "retentionEvictions": {
            "type": "array",
            "description": "Revisions evicted due to retention policy",
            "items": {
              "$ref": "#/components/schemas/RetentionEviction"
            }
          },
          "warnings": {
            "type": "array",
            "description": "Non-fatal warnings produced during the push",
            "items": {
              "type": "string"
            }
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Server timestamp when the push was finalized",
            "example": "2026-05-17T10:00:00Z"
          }
        }
      },
      "RetentionEviction": {
        "type": "object",
        "description": "Details of a revision evicted by the retention policy",
        "properties": {
          "evictedRevisionId": {
            "type": "string",
            "description": "The ID of the evicted revision",
            "example": "rev-old-001"
          },
          "evictedRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The revision number of the evicted revision",
            "example": 1
          },
          "filesPhysicallyDeleted": {
            "type": "integer",
            "format": "int32",
            "description": "Number of file assets physically deleted",
            "example": 5
          },
          "filesRelationshipDeleted": {
            "type": "integer",
            "format": "int32",
            "description": "Number of relationship links removed",
            "example": 5
          }
        }
      },
      "PushReservationRequest": {
        "type": "object",
        "description": "Request payload for acquiring a push reservation (lock) on a DSL project",
        "properties": {
          "baseRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The base revision number that the client last synced from. The server uses this to detect revision conflicts (stale base). Must match the latest server revision for the reservation to succeed.",
            "example": 3,
            "minimum": 0
          }
        },
        "required": [
          "baseRevisionNumber"
        ]
      },
      "PushReservationResponse": {
        "type": "object",
        "description": "Response containing push reservation details after successful lock acquisition",
        "properties": {
          "reservationId": {
            "type": "string",
            "description": "Unique identifier of the reservation (used as correlation ID for subsequent push requests)",
            "example": "res-a1b2c3d4-5678-90ef-ghij-klmnopqrstuv"
          },
          "projectId": {
            "type": "string",
            "description": "The project ID for which the reservation was acquired",
            "example": "project-123"
          },
          "proposedRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The proposed revision number assigned by the server (latest + 1)",
            "example": 4
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the reservation expires (300s TTL from acquisition)",
            "example": "2026-05-17T10:05:00Z"
          }
        }
      },
      "PushConflictResponse": {
        "type": "object",
        "description": "Conflict response when push reservation cannot be acquired",
        "properties": {
          "code": {
            "type": "string",
            "description": "The type of conflict that prevented reservation acquisition",
            "enum": [
              "REVISION_CONFLICT",
              "PUSH_IN_PROGRESS"
            ],
            "example": "REVISION_CONFLICT"
          },
          "message": {
            "type": "string",
            "description": "Human-readable description of the conflict",
            "example": "A newer revision exists on the server. Please pull the latest changes before pushing."
          },
          "latestRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The latest revision number on the server (for REVISION_CONFLICT)",
            "example": 5
          },
          "latestRevisionId": {
            "type": "string",
            "description": "The latest revision ID on the server (for REVISION_CONFLICT)",
            "example": "rev-latest-xyz"
          },
          "owner": {
            "type": "string",
            "description": "The user currently holding the push lock (for PUSH_IN_PROGRESS)",
            "example": "jane.doe@example.com"
          },
          "retryAfterSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "Suggested seconds to wait before retrying (for PUSH_IN_PROGRESS)",
            "example": 30
          },
          "progress": {
            "$ref": "#/components/schemas/PushProgress",
            "description": "Progress of the current push operation (for PUSH_IN_PROGRESS)"
          }
        }
      },
      "PushProgress": {
        "type": "object",
        "description": "Progress details of the in-flight push",
        "properties": {
          "completedBatches": {
            "type": "integer",
            "format": "int32",
            "description": "Number of batches completed so far",
            "example": 2
          },
          "totalBatches": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of batches in the push",
            "example": 5
          }
        }
      },
      "AdvancedPipelineResponse": {
        "type": "object",
        "description": "Read-only Advanced Replication pipeline summary",
        "properties": {
          "id": {
            "type": "string",
            "description": "Persisted pipeline row identifier",
            "example": "66b6e4c7e74f5f12ab345678"
          },
          "name": {
            "type": "string",
            "description": "Pipeline name",
            "example": "customer-replication"
          },
          "description": {
            "type": "string",
            "description": "Pipeline description",
            "example": "Replicate customer records to Snowflake"
          },
          "type": {
            "type": "string",
            "description": "Advanced pipeline type",
            "enum": [
              "SYNCHRONIZE",
              "REPLICATE",
              "COPY"
            ],
            "example": "REPLICATE"
          },
          "runOnHost": {
            "type": "string",
            "description": "Runtime host selected for the pipeline, when present",
            "example": "engine-east-1"
          },
          "sourceFile": {
            "type": "string",
            "description": "Catalog-relative DSL source file path",
            "example": "pipelines/customer.dis.yaml"
          },
          "line": {
            "type": "integer",
            "format": "int32",
            "description": "Line number of the pipeline declaration in the DSL source file",
            "example": 14
          },
          "column": {
            "type": "integer",
            "format": "int32",
            "description": "Column number of the pipeline declaration in the DSL source file",
            "example": 3
          },
          "validationStatus": {
            "type": "string",
            "description": "High-level validation status for the pipeline",
            "enum": [
              "STARTED",
              "INPROGRESS",
              "SKIPPED",
              "PASSED",
              "FAILED",
              "PASSED_WITH_WARNINGS"
            ],
            "example": "PASSED"
          },
          "validationMessage": {
            "type": "string",
            "description": "Short validation summary message for the pipeline",
            "example": "Pipeline validation passed"
          },
          "lastValidatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the most recent validation touching this pipeline",
            "example": "2026-08-12T06:22:07Z"
          }
        }
      },
      "ConnectionResponse": {
        "type": "object",
        "description": "Data connection details used in pipelines",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the connection",
            "example": "conn-uuid"
          },
          "name": {
            "type": "string",
            "description": "Human readable connection name",
            "example": "Primary Source Connection"
          },
          "type": {
            "type": "string",
            "description": "Connection type (e.g., DB2I, KAFKA, BIGQUERY)",
            "example": "DB2I"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Connection configuration parameters as key-value pairs"
          }
        }
      },
      "ContinuousPipelineResponse": {
        "type": "object",
        "description": "Response model containing pipeline information",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the pipeline",
            "example": "dataflow-456"
          },
          "name": {
            "type": "string",
            "description": "Name of the pipeline",
            "example": "Customer Data Synchronization"
          },
          "description": {
            "type": "string",
            "description": "Description of the pipeline",
            "example": "Synchronizes customer data between systems"
          },
          "pipelineType": {
            "type": "string",
            "description": "Type of the pipeline (e.g. COPY, REPLICATE, SYNCHRONIZE)",
            "enum": [
              "SYNCHRONIZE",
              "REPLICATE",
              "COPY"
            ],
            "example": "REPLICATE"
          },
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project containing this pipeline",
            "example": "project-123"
          },
          "source": {
            "$ref": "#/components/schemas/ConnectionResponse",
            "description": "Source connection details"
          },
          "target": {
            "$ref": "#/components/schemas/ConnectionResponse",
            "description": "Target connection details"
          },
          "staging": {
            "$ref": "#/components/schemas/ConnectionResponse",
            "description": "Staging / schema-registry connection details, if applicable"
          },
          "userDatabases": {
            "type": "array",
            "description": "List of user databases prepared for this pipeline",
            "items": {
              "$ref": "#/components/schemas/UserDatabaseResponse"
            }
          },
          "includedCDCRowMetadata": {
            "type": "array",
            "description": "Metadata fields to include with change data records for all default table mappings in this pipeline",
            "items": {
              "type": "string"
            }
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the pipeline was created",
            "example": "2025-08-24T14:15:22Z"
          },
          "properties": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration properties for the pipeline"
          },
          "createdBy": {
            "type": "string",
            "description": "Username of the pipeline owner",
            "example": "john.doe@example.com"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the pipeline was last modified",
            "example": "2025-08-25T10:30:15Z"
          },
          "modifiedBy": {
            "type": "string",
            "description": "Username of the person who last modified the pipeline",
            "example": "jane.smith@example.com"
          },
          "tableMappings": {
            "type": "array",
            "description": "List of table mappings configured for this pipeline",
            "items": {
              "$ref": "#/components/schemas/ContinuousTableMappingResponse"
            }
          }
        }
      },
      "MainframeAgent": {
        "type": "object",
        "description": "Mainframe agent associated with a pipeline, including type and name.",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of the mainframe agent.",
            "enum": [
              "APPLY_ENGINE",
              "STREAM_PUBLISHER",
              "REPLICATOR"
            ],
            "example": "APPLY_ENGINE"
          },
          "name": {
            "type": "string",
            "description": "Name of the agent.",
            "example": "agent-1"
          }
        }
      },
      "MainframePipelineResponse": {
        "type": "object",
        "description": "Response model containing mainframe pipeline information",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the mainframe pipeline",
            "example": "mainframe-pipeline-001"
          },
          "name": {
            "type": "string",
            "description": "Name of the mainframe pipeline",
            "example": "CustomerMainframePipeline"
          },
          "internalName": {
            "type": "string",
            "description": "Internal system name used for the pipeline",
            "example": "customer_mainframe_pipeline_internal"
          },
          "agents": {
            "type": "array",
            "description": "Agents associated with this pipeline",
            "items": {
              "$ref": "#/components/schemas/MainframeAgent"
            }
          },
          "description": {
            "type": "string",
            "description": "Description of the pipeline purpose and functionality",
            "example": "Synchronizes customer data from mainframe to cloud."
          },
          "pipelineType": {
            "type": "string",
            "description": "Type of mainframe pipeline, defining its purpose and behavior",
            "enum": [
              "NONE",
              "ENGINE_VSAM",
              "ENGINE_IMS",
              "ENGINE_DB2",
              "ENGINE_KAFKA",
              "REPLICATOR_VSAM",
              "REPLICATOR_IMS",
              "REPLICATOR_DB2",
              "REPLICATOR_DEFAULT"
            ]
          },
          "replicationType": {
            "type": "string",
            "description": "Type of mainframe replication",
            "enum": [
              "ENGINE",
              "REPLICATOR"
            ],
            "example": "MAINFRAME_REPLICATION_TYPE_ENGINE"
          },
          "runtimeEngineId": {
            "type": "string",
            "description": "Identifier of the runtime engine associated with this pipeline",
            "example": "runtime-engine-123"
          },
          "entryFileId": {
            "type": "string",
            "description": "Identifier of the entry file for this pipeline",
            "example": "entry-file-abc"
          },
          "configJsonFileId": {
            "type": "string",
            "description": "Identifier of the configuration JSON file for this pipeline",
            "example": "config-json-xyz"
          },
          "projectId": {
            "type": "string",
            "description": "Identifier of the project this pipeline belongs to",
            "example": "project-789"
          },
          "autoStart": {
            "type": "boolean",
            "description": "Flag indicating whether the pipeline should automatically start when deployed",
            "example": true
          },
          "stagePipelineConfiguration": {
            "type": "boolean",
            "description": "Flag indicating whether to stage the pipeline configuration",
            "example": true
          },
          "activatePipelineConfiguration": {
            "type": "boolean",
            "description": "Flag indicating whether to activate the pipeline configuration",
            "example": true
          },
          "pipelineState": {
            "type": "string",
            "description": "Current state of the pipeline",
            "enum": [
              "UNKNOWN",
              "CREATING",
              "CREATED",
              "EDITED",
              "STAGED_WITH_SUCCESS",
              "STAGED_WITH_ERROR",
              "DEPLOYED_WITH_SUCCESS"
            ],
            "example": "PIPELINE_STATE_DEPLOYED_WITH_SUCCESS"
          },
          "sourceDataConnectionId": {
            "type": "string",
            "description": "Identifier of the data connection used as the source for this pipeline",
            "example": "source-conn-001"
          },
          "targetDataConnectionId": {
            "type": "string",
            "description": "Identifier of the data connection used as the target for this pipeline",
            "example": "target-conn-002"
          },
          "selectedResources": {
            "$ref": "#/components/schemas/MainframeSelectedResources",
            "description": "Source and target resources selected for this pipeline"
          },
          "cdcFieldMappings": {
            "$ref": "#/components/schemas/CDCFieldMappings",
            "description": "Field mapping configuration for Change Data Capture operations"
          },
          "createdBy": {
            "type": "string",
            "description": "User who created the pipeline",
            "example": "john.doe@example.com"
          },
          "modifiedBy": {
            "type": "string",
            "description": "User who last modified the pipeline",
            "example": "jane.smith@example.com"
          },
          "deployedBy": {
            "type": "string",
            "description": "User who deployed the pipeline",
            "example": "carol.white@example.com"
          },
          "committedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the pipeline was last committed",
            "example": "2025-11-06T09:17:47Z"
          },
          "deployedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the pipeline was last deployed",
            "example": "2025-11-06T10:00:00Z"
          },
          "validatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the pipeline was last validated",
            "example": "2025-11-06T10:30:00Z"
          },
          "tableMappings": {
            "type": "array",
            "description": "List of table mappings configured for this pipeline",
            "items": {
              "$ref": "#/components/schemas/MainframeTableMappingResponse"
            }
          }
        }
      },
      "MainframeSelectedResources": {
        "type": "object",
        "description": "Selected resources for mainframe pipeline, including source and target assets.",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/SelectedAssets",
            "description": "Source assets selected for the pipeline."
          },
          "target": {
            "$ref": "#/components/schemas/SelectedAssets",
            "description": "Target assets selected for the pipeline."
          }
        }
      },
      "ProjectListMessageResponse": {
        "type": "object",
        "description": "Informational message for a partial project list response",
        "properties": {
          "source": {
            "type": "string",
            "description": "Source system that produced the message",
            "example": "CATALOG"
          },
          "projectTypes": {
            "type": "array",
            "description": "Project types affected by the unavailable source",
            "items": {
              "type": "string"
            }
          },
          "message": {
            "type": "string",
            "description": "Human-readable informational message"
          }
        }
      },
      "ProjectResponse": {
        "type": "object",
        "description": "Response model containing project information",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the project",
            "example": "project-123"
          },
          "name": {
            "type": "string",
            "description": "Name of the project",
            "example": "Customer Data Integration Project"
          },
          "description": {
            "type": "string",
            "description": "Description of the project",
            "example": "Integration project for customer data synchronization"
          },
          "projectType": {
            "type": "string",
            "description": "Type of the project (e.g. COPY, REPLICATION, MAINFRAME_REPLICATION)",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ],
            "example": "REPLICATION"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project was created",
            "example": "2025-08-24T14:15:22Z"
          },
          "createdBy": {
            "type": "string",
            "description": "Username of the person who created the project",
            "example": "john.doe@example.com"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project was last modified",
            "example": "2025-08-25T10:30:15Z"
          },
          "modifiedBy": {
            "type": "string",
            "description": "Username of the person who last modified the project",
            "example": "jane.smith@example.com"
          },
          "committedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project was last committed",
            "example": "2025-08-25T11:45:30Z"
          },
          "committedBy": {
            "type": "string",
            "description": "Username of the person who committed the project",
            "example": "jane.smith@example.com"
          },
          "deployedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project was last deployed",
            "example": "2025-08-25T12:00:00Z"
          },
          "deployedBy": {
            "type": "string",
            "description": "Username of the person who deployed the project",
            "example": "admin@precisely.com"
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Configuration parameters for the project"
          },
          "validationSummary": {
            "$ref": "#/components/schemas/ProjectValidationSummaryResponse",
            "description": "Project-level validation summary for Advanced Replication projects, including per-scope status"
          },
          "pipelines": {
            "type": "array",
            "description": "List of Continuous Pipelines associated with this project",
            "items": {
              "$ref": "#/components/schemas/ContinuousPipelineResponse"
            }
          },
          "advancedPipelines": {
            "type": "array",
            "description": "Read-only Advanced Replication pipelines associated with this project",
            "items": {
              "$ref": "#/components/schemas/AdvancedPipelineResponse"
            },
            "readOnly": true
          },
          "mainframePipelines": {
            "type": "array",
            "description": "List of Mainframe Pipelines associated with this project",
            "items": {
              "$ref": "#/components/schemas/MainframePipelineResponse"
            }
          },
          "metabases": {
            "type": "array",
            "description": "List of Metabases associated with this project",
            "items": {
              "$ref": "#/components/schemas/MetabaseResponse"
            }
          },
          "logreaders": {
            "type": "array",
            "description": "List of Log Readers(Change Selectors) associated with this project",
            "items": {
              "$ref": "#/components/schemas/LogReaderResponse"
            }
          }
        }
      },
      "ProjectValidationScopeSummaryResponse": {
        "type": "object",
        "description": "Project-level validation status for one scope",
        "properties": {
          "scope": {
            "type": "string",
            "description": "Scope name",
            "enum": [
              "DSL_ONLY",
              "FULL"
            ],
            "example": "DSL_ONLY"
          },
          "status": {
            "type": "string",
            "description": "Validation status for this scope",
            "enum": [
              "STARTED",
              "INPROGRESS",
              "SKIPPED",
              "PASSED",
              "FAILED",
              "PASSED_WITH_WARNINGS"
            ],
            "example": "FAILED"
          },
          "message": {
            "type": "string",
            "description": "Scope-specific summary message"
          }
        }
      },
      "ProjectValidationSummaryResponse": {
        "type": "object",
        "description": "Project-level validation summary for Advanced Replication projects",
        "properties": {
          "status": {
            "type": "string",
            "description": "Overall validation status",
            "enum": [
              "OPEN",
              "INPROGRESS",
              "SUCCESS",
              "COMPLETED",
              "TIMEOUT",
              "ERROR"
            ],
            "example": "COMPLETED"
          },
          "message": {
            "type": "string",
            "description": "Overall validation message",
            "example": "DSL validation completed: DSL_ONLY=PASSED; FULL=FAILED"
          },
          "lastValidatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the latest validation run",
            "example": "2026-08-13T12:43:40.875Z"
          },
          "scopeStatuses": {
            "type": "array",
            "description": "Per-scope validation status summary (DSL_ONLY, FULL)",
            "items": {
              "$ref": "#/components/schemas/ProjectValidationScopeSummaryResponse"
            }
          }
        }
      },
      "SelectedAssets": {
        "type": "object",
        "description": "Assets selected for a mainframe endpoint, including database, schemas/tables, and topics.",
        "properties": {
          "database": {
            "type": "string",
            "description": "Name of the selected database.",
            "example": "sourceDatabase"
          },
          "schemasAndTables": {
            "type": "array",
            "description": "List of selected schemas and associated tables.",
            "example": "sourceSchema",
            "items": {
              "$ref": "#/components/schemas/SchemaTables"
            }
          },
          "topics": {
            "type": "array",
            "description": "List of selected topics.",
            "example": [
              "sourceTopic1",
              "sourceTopic2"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UnifiedProjectPageResponse": {
        "type": "object",
        "description": "Paginated unified project response with partial-result metadata",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of content items in the current page",
            "items": {
              "$ref": "#/components/schemas/ProjectResponse"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based page number",
            "example": 0
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "Number of items per page (requested size)",
            "example": 20
          },
          "numberOfElements": {
            "type": "integer",
            "format": "int32",
            "description": "Actual number of items in the current page",
            "example": 15
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of items across all pages",
            "example": 157
          },
          "totalPages": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pages available",
            "example": 8
          },
          "first": {
            "type": "boolean",
            "description": "Indicates if this is the first page",
            "example": true
          },
          "last": {
            "type": "boolean",
            "description": "Indicates if this is the last page",
            "example": false
          },
          "partialResponse": {
            "type": "boolean",
            "description": "Indicates that only a subset of backing stores returned results",
            "example": true
          },
          "messages": {
            "type": "array",
            "description": "Source-specific informational messages for a partial response",
            "items": {
              "$ref": "#/components/schemas/ProjectListMessageResponse"
            }
          }
        }
      },
      "UserDatabaseResponse": {
        "type": "object",
        "description": "User database prepared or referenced by a pipeline",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the user database",
            "example": "USERDB1"
          },
          "dataConnectionId": {
            "type": "string",
            "description": "Identifier of the data connection backing the user database",
            "example": "conn-db-uuid"
          }
        }
      },
      "PreparedUserDatabaseConnectionStateResponse": {
        "type": "object",
        "description": "Prepared/skipped user-database state for one connection within one pipeline",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id this state is scoped to"
          },
          "preparedUserDbs": {
            "type": "array",
            "description": "Database names successfully prepared for this connection",
            "items": {
              "type": "string"
            }
          },
          "skippedPrepareUserDbs": {
            "type": "array",
            "description": "Database names skipped/failed for this connection",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UnifiedProjectMonitoringStatusResponse": {
        "type": "object",
        "description": "Unified project monitoring status response",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the underlying monitoring status document"
          },
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project"
          },
          "projectType": {
            "type": "string",
            "description": "Project type: REPLICATION | MAINFRAME_REPLICATION | ADVANCED_REPLICATION",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "tenantId": {
            "type": "string",
            "description": "Workspace or tenant identifier"
          },
          "status": {
            "$ref": "#/components/schemas/Status",
            "description": "Contains exactly one status branch, selected by projectType"
          }
        }
      },
      "ProjectFileListingResponse": {
        "type": "object",
        "description": "Project file listing",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project",
            "example": "project-123"
          },
          "projectType": {
            "type": "string",
            "description": "Type of the listed project",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ]
          },
          "view": {
            "type": "string",
            "description": "File-tree view represented by this listing",
            "enum": [
              "CURRENT",
              "COMMITTED"
            ]
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Revision number represented by this listing, when view is COMMITTED"
          },
          "latestRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Latest available committed revision number for the project"
          },
          "files": {
            "type": "array",
            "description": "Files in the listed view",
            "items": {
              "$ref": "#/components/schemas/ProjectFileSummaryResponse"
            }
          }
        }
      },
      "ProjectFileDetailResponse": {
        "type": "object",
        "description": "Project file metadata with optional Base64-encoded content",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Unique identifier of the file",
            "example": "file-002"
          },
          "dataFlowId": {
            "type": "string",
            "description": "Advanced Replication dataflow identifier owning this file, when applicable"
          },
          "fileName": {
            "type": "string",
            "description": "File name derived from the flattened path",
            "example": "customers.dis.yaml"
          },
          "flattenedPath": {
            "type": "string",
            "description": "Path of the file within the project's flattened file tree",
            "example": "sources/customers.dis.yaml"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "Current version number of the file",
            "example": 1
          },
          "phase": {
            "type": "string",
            "description": "Lifecycle phase of the file",
            "enum": [
              "DRAFT",
              "APPROVED",
              "PENDING_DELETION"
            ]
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type of the file content",
            "example": "application/yaml"
          },
          "encoding": {
            "type": "string",
            "description": "Encoding of the file content",
            "example": "utf-8"
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Size of the file content in bytes",
            "example": 512
          },
          "contentHash": {
            "type": "string",
            "description": "Hash of the file content, used for change detection"
          },
          "entryFile": {
            "type": "boolean",
            "description": "Whether this file is the project's designated entry file"
          },
          "content": {
            "type": "string",
            "description": "Base64-encoded file content, present only when requested",
            "example": "c291cmNlOlxuICBjb25uZWN0aW9uOiBvcmFjbGVfc291cmNlXG4="
          }
        }
      },
      "PageResponse": {
        "type": "object",
        "description": "Generic pagination response wrapper for any paginated resource",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of content items in the current page",
            "items": {}
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based page number",
            "example": 0
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "Number of items per page (requested size)",
            "example": 20
          },
          "numberOfElements": {
            "type": "integer",
            "format": "int32",
            "description": "Actual number of items in the current page",
            "example": 15
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of items across all pages",
            "example": 157
          },
          "totalPages": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pages available",
            "example": 8
          },
          "first": {
            "type": "boolean",
            "description": "Indicates if this is the first page",
            "example": true
          },
          "last": {
            "type": "boolean",
            "description": "Indicates if this is the last page",
            "example": false
          }
        }
      },
      "ConnectionUsageResponse": {
        "type": "object",
        "description": "One usage site a resolved connection plays a role at",
        "properties": {
          "pipelineName": {
            "type": "string",
            "description": "Name of the pipeline this usage site belongs to"
          },
          "pipelineId": {
            "type": "string",
            "description": "Id of the pipeline this usage site belongs to"
          },
          "role": {
            "type": "string",
            "description": "Role the connection plays at this usage site",
            "enum": [
              "SOURCE",
              "TARGET",
              "LOOKUP",
              "SCHEMA_REGISTRY",
              "STAGING",
              "UNREFERENCED"
            ]
          }
        }
      },
      "ResolvedConnectionResponse": {
        "type": "object",
        "description": "A DSL-declared connection resolved to its real Catalog connection asset",
        "properties": {
          "dslConnectionId": {
            "type": "string",
            "description": "Connection id as declared in the project's DSL"
          },
          "catalogRef": {
            "type": "string",
            "description": "Catalog reference the DSL connection resolved from"
          },
          "connectionId": {
            "type": "string",
            "description": "Catalog connection id the DSL connection resolved to"
          },
          "connectionType": {
            "type": "string",
            "description": "Connection type of the resolved Catalog connection"
          },
          "usages": {
            "type": "array",
            "description": "Every usage site this connection plays a role at",
            "items": {
              "$ref": "#/components/schemas/ConnectionUsageResponse"
            }
          }
        }
      },
      "ResolvedConnectionsResponse": {
        "type": "object",
        "description": "Every connection a project (or one of its pipelines) resolves to in the Catalog",
        "properties": {
          "pipelineId": {
            "type": "string",
            "description": "Pipeline id this resolution is scoped to; omitted when resolved for the whole project"
          },
          "connections": {
            "type": "array",
            "description": "Every connection resolved for the requested scope",
            "items": {
              "$ref": "#/components/schemas/ResolvedConnectionResponse"
            }
          }
        }
      },
      "ProjectPageResponse": {
        "type": "object",
        "description": "Paginated response containing a list of projects with navigation metadata",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of projects in the current page",
            "items": {
              "$ref": "#/components/schemas/ProjectResponse"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based page number",
            "example": 0
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "Number of items per page (requested size)",
            "example": 20
          },
          "numberOfElements": {
            "type": "integer",
            "format": "int32",
            "description": "Actual number of projects in the current page",
            "example": 15
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of projects across all pages",
            "example": 157
          },
          "totalPages": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pages available",
            "example": 8
          },
          "first": {
            "type": "boolean",
            "description": "Indicates if this is the first page",
            "example": true
          },
          "last": {
            "type": "boolean",
            "description": "Indicates if this is the last page",
            "example": false
          }
        }
      },
      "MainframePipelinePageResponse": {
        "type": "object",
        "description": "Paginated response containing a list of pipelines with navigation metadata",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of pipelines in the current page",
            "items": {
              "$ref": "#/components/schemas/MainframePipelineResponse"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based page number",
            "example": 0
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "Number of items per page (requested size)",
            "example": 20
          },
          "numberOfElements": {
            "type": "integer",
            "format": "int32",
            "description": "Actual number of pipelines in the current page",
            "example": 15
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pipelines across all pages",
            "example": 157
          },
          "totalPages": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pages available",
            "example": 8
          },
          "first": {
            "type": "boolean",
            "description": "Indicates if this is the first page",
            "example": true
          },
          "last": {
            "type": "boolean",
            "description": "Indicates if this is the last page",
            "example": false
          }
        }
      },
      "MainframePushStatusResponse": {
        "type": "object",
        "description": "Preflight push-status response indicating whether push can proceed without remote drift.",
        "properties": {
          "canPush": {
            "type": "boolean",
            "description": "Whether push can proceed with the provided proposed fingerprint.",
            "example": true
          },
          "remoteSnapshotFingerprint": {
            "type": "string",
            "description": "Adapter-computed canonical fingerprint of the current remote snapshot.",
            "example": "4f3dfafda2ddf9753f6d9b7cf5f97f2c81f668f756ad0d6a4c930f725f4f3c8e"
          }
        }
      },
      "MainframePullStatusResponse": {
        "type": "object",
        "description": "Pull readiness and estimate for selected hydration",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Project ID",
            "example": "project-123"
          },
          "pipelineId": {
            "type": "string",
            "description": "Pipeline ID",
            "example": "pipeline-456"
          },
          "requestedFileCount": {
            "type": "integer",
            "format": "int32",
            "description": "Selected file count",
            "example": 2
          },
          "availableFileCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of selected files available for hydration",
            "example": 2
          },
          "totalSizeBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Total payload size in bytes (real count, not estimated)",
            "example": 8192
          },
          "unavailableFileIds": {
            "type": "array",
            "description": "IDs that are missing from current remote snapshot",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string",
            "description": "Pull readiness status",
            "enum": [
              "ready",
              "nothing_to_fetch",
              "unavailable"
            ],
            "example": "ready"
          }
        }
      },
      "MainframePipelineParameterResponse": {
        "type": "object",
        "description": "Represents the response containing mainframe pipeline parameter details.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the parameter",
            "example": "absc1234-5678-def0-1234-56789abcdef0"
          },
          "name": {
            "type": "string",
            "description": "Name of the parameter",
            "example": "user"
          },
          "value": {
            "type": "string",
            "description": "Value of the parameter",
            "example": "USER123"
          },
          "type": {
            "type": "string",
            "description": "Data type of the parameter",
            "enum": [
              "PARAMETER_DATA_TYPE_STRING",
              "PARAMETER_DATA_TYPE_ENCRYPTED_STRING"
            ],
            "example": "STRING"
          },
          "description": {
            "type": "string",
            "description": "Description of the parameter",
            "example": "Mainframe user ID"
          },
          "lastModifiedBy": {
            "type": "string",
            "description": "Username of the last person who modified the parameter",
            "example": "john.doe@example.com"
          },
          "lastUpdatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the parameter was last updated",
            "example": "2025-11-04T09:37:52.638Z"
          }
        }
      },
      "MainframeFileResponse": {
        "type": "object",
        "description": "Represents the response containing mainframe file metadata and content.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the mainframe file.",
            "example": "123e4567-e89b-12d3-a456-426614174000"
          },
          "fileName": {
            "type": "string",
            "description": "Name of the mainframe file.",
            "example": "DATAFILE01"
          },
          "fileContent": {
            "type": "string",
            "description": "Base64-encoded content of the mainframe file.",
            "example": "SGVsbG8sIFdvcmxkIQ=="
          },
          "contentHash": {
            "type": "string",
            "description": "SHA-256 content hash of the decoded file bytes.",
            "example": "d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2"
          },
          "size": {
            "type": "integer",
            "format": "int64",
            "description": "File size in bytes.",
            "example": 1024
          },
          "uploadedDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the file was uploaded.",
            "example": "2024-01-01T12:00:00Z"
          },
          "modifiedDate": {
            "type": "string",
            "format": "date-time",
            "description": "Date when the file was last modified.",
            "example": "2024-01-02T15:30:00Z"
          },
          "lastModifiedBy": {
            "type": "string",
            "description": "Username of the last person who modified the file.",
            "example": "jane.smith@example.com"
          },
          "fileApplicationType": {
            "type": "string",
            "description": "Application type of the file, e.g., ENGINE_SCRIPT or CONFIGURATION.",
            "enum": [
              "ENGINE_SCRIPT",
              "CONFIGURATION"
            ],
            "example": "ENGINE_SCRIPT"
          }
        }
      },
      "Latency": {
        "type": "object",
        "description": "Latency metrics for mainframe pipelines",
        "properties": {
          "current": {
            "$ref": "#/components/schemas/LatencyDetails",
            "description": "Current latency information"
          },
          "average": {
            "$ref": "#/components/schemas/LatencyDetails",
            "description": "Average latency information"
          }
        }
      },
      "LatencyDetails": {
        "type": "object",
        "description": "Latency details",
        "properties": {
          "capture": {
            "type": "integer",
            "format": "int64",
            "description": "Capture latency in milliseconds"
          },
          "backlog": {
            "type": "integer",
            "format": "int64",
            "description": "Backlog latency in milliseconds"
          },
          "apply": {
            "type": "integer",
            "format": "int64",
            "description": "Apply latency in milliseconds"
          },
          "total": {
            "type": "integer",
            "format": "int64",
            "description": "Total latency in milliseconds"
          },
          "estimationWindow": {
            "type": "integer",
            "format": "int32",
            "description": "Estimation window in hours"
          },
          "reportedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Reported at time"
          }
        }
      },
      "MainframePipelineStatus": {
        "type": "object",
        "description": "Mainframe pipeline status information",
        "properties": {
          "pipelineId": {
            "type": "string",
            "description": "Unique pipeline identifier"
          },
          "name": {
            "type": "string",
            "description": "Name of the pipeline"
          },
          "runtimeServers": {
            "type": "array",
            "description": "Runtime servers for the pipeline",
            "items": {
              "type": "string"
            },
            "uniqueItems": true
          },
          "status": {
            "type": "string",
            "description": "Current status of the pipeline",
            "enum": [
              "NOT_MOUNTED",
              "MOUNTED",
              "STARTED",
              "RUNNING",
              "STOPPED",
              "PAUSED",
              "OUT_OF_SPACE",
              "STALLED",
              "DEADLOCKED",
              "STOPPING",
              "STARTING",
              "STOPPED_OK",
              "STOPPED_ABEND",
              "STOPPED_ERROR",
              "UNKNOWN"
            ]
          },
          "startedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Time when the pipeline started"
          },
          "stats": {
            "$ref": "#/components/schemas/Stats",
            "description": "Statistics for the pipeline"
          },
          "latency": {
            "$ref": "#/components/schemas/Latency",
            "description": "Latency metrics for the pipeline"
          }
        }
      },
      "MainframeProjectStatusResponse": {
        "type": "object",
        "description": "Mainframe project status response containing project and pipelines details",
        "properties": {
          "tenantId": {
            "type": "string",
            "description": "Unique identifier of the workspace/tenant"
          },
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project"
          },
          "reportedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Time when the status was reported"
          },
          "pipelines": {
            "type": "array",
            "description": "List of pipelines with status information",
            "items": {
              "$ref": "#/components/schemas/MainframePipelineStatus"
            }
          }
        }
      },
      "Stats": {
        "type": "object",
        "description": "Statistics for mainframe pipelines",
        "properties": {
          "captured": {
            "$ref": "#/components/schemas/StatsDetails",
            "description": "Captured statistics"
          },
          "applied": {
            "$ref": "#/components/schemas/StatsDetails",
            "description": "Applied statistics"
          }
        }
      },
      "StatsDetails": {
        "type": "object",
        "description": "Statistics details",
        "properties": {
          "rows": {
            "type": "integer",
            "format": "int64",
            "description": "Rows count"
          },
          "bytes": {
            "type": "integer",
            "format": "int64",
            "description": "Bytes count"
          },
          "transactions": {
            "type": "integer",
            "format": "int64",
            "description": "Transactions count"
          },
          "reportedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Reported at time"
          }
        }
      },
      "MainframePipelineReportResponse": {
        "type": "object",
        "description": "Response model containing mainframe pipeline reports",
        "properties": {
          "agentType": {
            "type": "string",
            "description": "Type of the agent",
            "enum": [
              "APPLY_ENGINE",
              "STREAM_PUBLISHER",
              "REPLICATOR"
            ],
            "example": "APPLY_ENGINE"
          },
          "report": {
            "type": "array",
            "description": "List of report messages",
            "example": [
              "Report entry 1",
              "Report entry 2"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Log": {
        "type": "object",
        "description": "Log entry with pagination metadata",
        "properties": {
          "logs": {
            "type": "array",
            "description": "List of log messages",
            "example": [
              "Log entry 1",
              "Log entry 2"
            ],
            "items": {
              "type": "string"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Current page number for pagination",
            "example": 1
          },
          "totalPages": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of pages available",
            "example": 5
          }
        }
      },
      "MainframePipelineLogResponse": {
        "type": "object",
        "description": "Response model containing mainframe pipeline and daemon logs with pagination",
        "properties": {
          "pipelineLogs": {
            "$ref": "#/components/schemas/Log",
            "description": "Pipeline execution logs with pagination information"
          },
          "daemonLogs": {
            "$ref": "#/components/schemas/Log",
            "description": "Daemon execution logs with pagination information"
          }
        }
      },
      "ConnectionCompatibilityMatrixResponse": {
        "type": "object",
        "description": "Connection compatibility matrix response containing source-target compatibility mappings",
        "properties": {
          "compatibilityMatrix": {
            "type": "array",
            "description": "List of source connection types with their compatible target connection types",
            "example": [
              {
                "source": "DB2",
                "supportedTargets": [
                  "Kafka",
                  "Mssql",
                  "Bigquery"
                ]
              }
            ],
            "items": {
              "$ref": "#/components/schemas/SourceCompatibility"
            }
          }
        }
      },
      "SourceCompatibility": {
        "type": "object",
        "description": "Source connection type with its list of compatible target connection types",
        "properties": {
          "source": {
            "type": "string",
            "description": "Source connection type",
            "enum": [
              "DB2",
              "DB2I",
              "DB2ZOS",
              "VSAM",
              "IMS",
              "Oracle",
              "Mssql",
              "Kafka",
              "Snowflake",
              "Bigquery",
              "SAPODP",
              "Postgres",
              "SchemaRegistry",
              "NONE"
            ],
            "example": "DB2"
          },
          "supportedTargets": {
            "type": "array",
            "description": "List of target connection types compatible with this source",
            "example": [
              "Kafka",
              "Mssql",
              "Bigquery",
              "Snowflake"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ProjectStagingStatusResponse": {
        "type": "object",
        "description": "Response object representing the staging and validation status of a project.",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project for which the status is retrieved."
          },
          "validation": {
            "$ref": "#/components/schemas/ValidationStatus",
            "description": "Validation status details of the project."
          },
          "staging": {
            "$ref": "#/components/schemas/StagingStatus",
            "description": "Staging status details of the project."
          }
        }
      },
      "StagingStatus": {
        "type": "object",
        "description": "Details about the staging status of the project.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Current status of the staging process.",
            "enum": [
              "OPEN",
              "INPROGRESS",
              "SUCCESS",
              "COMPLETED",
              "TIMEOUT",
              "ERROR"
            ]
          },
          "committed": {
            "type": "boolean",
            "description": "Indicates whether the project has been committed."
          },
          "message": {
            "type": "string",
            "description": "Message providing additional details about the staging status."
          },
          "result": {
            "$ref": "#/components/schemas/ValidationResult",
            "description": "Detailed results of the staging process."
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the last update to the staging status.",
            "example": "2025-10-01T12:00:00Z"
          }
        }
      },
      "ValidationResult": {
        "type": "object",
        "description": "Detailed results of the validation or staging process.",
        "properties": {
          "severityLevel": {
            "type": "string",
            "description": "Severity level of the validation result.",
            "enum": [
              "VALID",
              "S4",
              "S4-Warning",
              "S3-Incomplete",
              "S2-ERROR",
              "S1-FATAL",
              "INFO"
            ]
          },
          "message": {
            "type": "string",
            "description": "Validation message providing additional details."
          },
          "warning": {
            "type": "integer",
            "format": "int32",
            "description": "Number of warnings encountered during validation."
          },
          "incomplete": {
            "type": "integer",
            "format": "int32",
            "description": "Number of incomplete validations."
          },
          "error": {
            "type": "integer",
            "format": "int32",
            "description": "Number of errors encountered during validation."
          },
          "fatal": {
            "type": "integer",
            "format": "int32",
            "description": "Number of fatal errors encountered during validation."
          },
          "total": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of validation issues encountered."
          }
        }
      },
      "ValidationStatus": {
        "type": "object",
        "description": "Details about the validation status of the project.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Current status of the validation process.",
            "enum": [
              "OPEN",
              "INPROGRESS",
              "SUCCESS",
              "COMPLETED",
              "TIMEOUT",
              "ERROR"
            ]
          },
          "message": {
            "type": "string",
            "description": "Message providing additional details about the validation status."
          },
          "completePercentage": {
            "type": "integer",
            "format": "int32",
            "description": "Percentage of validation process completed."
          },
          "result": {
            "$ref": "#/components/schemas/ValidationResult",
            "description": "Detailed results of the validation process."
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp of the last update to the validation status.",
            "example": "2025-10-01T12:00:00Z"
          }
        }
      },
      "ProjectSnapshotResponse": {
        "type": "object",
        "description": "Response model containing project snapshot details",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the project this snapshot is associated with",
            "example": "project-123"
          },
          "projectName": {
            "type": "string",
            "description": "Name of the project this snapshot is associated with",
            "example": "Customer Data Integration Project"
          },
          "projectDescription": {
            "type": "string",
            "description": "Description of the project this snapshot is associated with",
            "example": "Integration project for customer data synchronization"
          },
          "projectType": {
            "type": "string",
            "description": "Type of the project this snapshot is associated with (e.g. COPY, REPLICATION, MAINFRAME_REPLICATION)",
            "enum": [
              "REPLICATION",
              "MAINFRAME_REPLICATION",
              "ADVANCED_REPLICATION"
            ],
            "example": "REPLICATION"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project associated with the snapshot was created",
            "example": "2025-08-24T14:15:22Z"
          },
          "createdBy": {
            "type": "string",
            "description": "Username of the project owner",
            "example": "john.doe@example.com"
          },
          "modifiedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project associated with the snapshot was last modified",
            "example": "2025-08-25T10:30:15Z"
          },
          "modifiedBy": {
            "type": "string",
            "description": "Username of the person who last modified the project associated with the snapshot",
            "example": "jane.smith@example.com"
          },
          "committedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project associated with the snapshot was last committed",
            "example": "2025-08-25T11:45:30Z"
          },
          "committedBy": {
            "type": "string",
            "description": "Username of the person who committed the project associated with the snapshot",
            "example": "jane.smith@example.com"
          },
          "activatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the project associated with the snapshot was last activated",
            "example": "2025-08-25T12:00:00Z"
          },
          "activatedBy": {
            "type": "string",
            "description": "Username of the person who activated the project associated with the snapshot",
            "example": "admin@precisely.com"
          },
          "activated": {
            "type": "boolean",
            "description": "True if the project associated with the snapshot was activated",
            "example": true
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "Snapshot version number",
            "example": 5
          },
          "pipelines": {
            "type": "array",
            "description": "List of continuous pipelines captured in this snapshot",
            "items": {
              "$ref": "#/components/schemas/ContinuousPipelineResponse"
            }
          },
          "parameters": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional configuration parameters for the project associated with the snapshot"
          }
        }
      },
      "ContinuousPipelinePageResponse": {
        "type": "object",
        "description": "Paginated response containing a list of pipelines with navigation metadata",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of pipelines in the current page",
            "items": {
              "$ref": "#/components/schemas/ContinuousPipelineResponse"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based page number",
            "example": 0
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "Number of items per page (requested size)",
            "example": 20
          },
          "numberOfElements": {
            "type": "integer",
            "format": "int32",
            "description": "Actual number of pipelines in the current page",
            "example": 15
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pipelines across all pages",
            "example": 157
          },
          "totalPages": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pages available",
            "example": 8
          },
          "first": {
            "type": "boolean",
            "description": "Indicates if this is the first page",
            "example": true
          },
          "last": {
            "type": "boolean",
            "description": "Indicates if this is the last page",
            "example": false
          }
        }
      },
      "PipelineDeletionStatusResponse": {
        "type": "object",
        "description": "Response representing the status of a pipeline deletion operation.",
        "properties": {
          "pipelineName": {
            "type": "string",
            "description": "Name of the pipeline being deleted",
            "example": "test-pipeline"
          },
          "status": {
            "type": "string",
            "description": "Current status of the pipeline deletion operation",
            "enum": [
              "PENDING",
              "IN_PROGRESS",
              "COMPLETED",
              "FAILED"
            ],
            "example": "IN_PROGRESS"
          },
          "stages": {
            "type": "array",
            "description": "Detailed stages of the pipeline deletion process",
            "items": {
              "$ref": "#/components/schemas/StageDetails"
            }
          }
        }
      },
      "StageDetails": {
        "type": "object",
        "description": "Details of each stage in the deletion process",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the deletion stage",
            "enum": [
              "PIPELINE_DELETION",
              "STOP_RUNTIME_ENGINE",
              "METABASE_DELETION",
              "LOG_READER_DELETION",
              "PROJECT_DELETION"
            ],
            "example": "PIPELINE_DELETION"
          },
          "status": {
            "type": "string",
            "description": "Status of the deletion stage",
            "enum": [
              "PENDING",
              "IN_PROGRESS",
              "COMPLETED",
              "FAILED"
            ],
            "example": "IN_PROGRESS"
          },
          "pipelineDeletionStatuses": {
            "type": "array",
            "description": "Detailed statuses of individual pipeline deletions for the PIPELINE_DELETION stage",
            "items": {
              "$ref": "#/components/schemas/PipelineDeletionStatusResponse"
            }
          },
          "metabaseDeletionStatuses": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ComponentDeletionStatus"
            },
            "description": "Detailed statuses of individual metabase deletions for the METABASE_DELETION stage"
          },
          "logReaderDeletionStatuses": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ComponentDeletionStatus"
            },
            "description": "Detailed statuses of individual log reader deletions for the LOG_READER_DELETION stage"
          },
          "error": {
            "type": "string",
            "description": "Error message if the stage failed",
            "example": "Failed to delete pipeline due to ..."
          }
        }
      },
      "DatasetCreationStatusResponse": {
        "type": "object",
        "description": "Response indicating the status of dataset creation.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Overall status of the dataset creation process.",
            "enum": [
              "SUCCESS",
              "PENDING",
              "IN_PROGRESS",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "schemaDetails": {
            "type": "array",
            "description": "Details of the target schema where tables are being created. for type TABLE.",
            "items": {
              "$ref": "#/components/schemas/SchemaDetails"
            }
          }
        }
      },
      "SchemaDetails": {
        "type": "object",
        "description": "Details of the schema where tables are being created.",
        "properties": {
          "schemaName": {
            "type": "string",
            "description": "Name of the target schema where tables are created."
          },
          "status": {
            "type": "string",
            "description": "Status of the dataset creation process.",
            "enum": [
              "SUCCESS",
              "PENDING",
              "IN_PROGRESS",
              "FAILED"
            ],
            "example": "SUCCESS"
          },
          "totalCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of tables to be created.",
            "example": 10
          },
          "successCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of tables successfully created.",
            "example": 7
          },
          "inProgressCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of tables currently in progress of being created.",
            "example": 2
          },
          "failedCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of tables that failed to be created.",
            "example": 1
          },
          "errors": {
            "type": "array",
            "description": "List of error messages if any tables failed to be created.",
            "items": {
              "$ref": "#/components/schemas/TableCreationError"
            }
          }
        }
      },
      "TableCreationError": {
        "type": "object",
        "description": "Details of an error encountered during table creation.",
        "properties": {
          "tableName": {
            "type": "string",
            "description": "Name of the table that failed to be created."
          },
          "message": {
            "type": "string",
            "description": "Error message associated with the table creation failure."
          }
        }
      },
      "ComponentDeletionStatus": {
        "type": "object",
        "description": "Status details for individual component deletions",
        "properties": {
          "status": {
            "type": "string",
            "description": "Status of the component deletion",
            "enum": [
              "PENDING",
              "IN_PROGRESS",
              "COMPLETED",
              "FAILED"
            ],
            "example": "COMPLETED"
          },
          "error": {
            "type": "string",
            "description": "Error message if the component deletion failed",
            "example": "Connection timeout"
          }
        }
      },
      "ProjectDeletionStatusResponse": {
        "type": "object",
        "description": "Response representing the status of a project deletion operation.",
        "properties": {
          "projectName": {
            "type": "string",
            "description": "Name of the project being deleted",
            "example": "test-project"
          },
          "status": {
            "type": "string",
            "description": "Current status of the project deletion operation",
            "enum": [
              "PENDING",
              "IN_PROGRESS",
              "COMPLETED",
              "FAILED"
            ],
            "example": "IN_PROGRESS"
          },
          "stages": {
            "type": "array",
            "description": "Detailed stages of the project deletion process",
            "items": {
              "$ref": "#/components/schemas/StageDetails"
            }
          },
          "pipelineIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ConversionAnalysisFile": {
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string"
          },
          "fileName": {
            "type": "string"
          },
          "relativePath": {
            "type": "string"
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ConversionAnalysisMetadata": {
        "type": "object",
        "properties": {
          "sourceProjectId": {
            "type": "string"
          },
          "files": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConversionAnalysisFile"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConversionWarning"
            }
          }
        }
      },
      "ConversionWarning": {
        "type": "object",
        "properties": {
          "elementPath": {
            "type": "string"
          },
          "warningCode": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "INFO",
              "WARNING",
              "ERROR"
            ]
          },
          "message": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          },
          "fileName": {
            "type": "string"
          },
          "line": {
            "type": "integer",
            "format": "int32"
          },
          "column": {
            "type": "integer",
            "format": "int32"
          }
        }
      },
      "ConversionAnalysisFileContent": {
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string"
          },
          "fileName": {
            "type": "string"
          },
          "relativePath": {
            "type": "string"
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64"
          },
          "encoding": {
            "type": "string"
          },
          "content": {
            "type": "string",
            "format": "byte"
          }
        }
      },
      "JournalResponse": {
        "type": "object",
        "description": "Response model containing Journal details",
        "properties": {
          "name": {
            "type": "string",
            "description": "Journal name",
            "example": "JRN001"
          }
        }
      },
      "DiagnosticBundleStatusResponse": {
        "type": "object",
        "description": "Response containing diagnostic bundle status and log files metadata",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the diagnostic bundle",
            "example": "bundle-uuid-123"
          },
          "bundleName": {
            "type": "string",
            "description": "Name of the diagnostic bundle",
            "example": "Diagnostic Bundle 2023-10-01"
          },
          "status": {
            "type": "string",
            "description": "Current processing status of the diagnostic bundle",
            "enum": [
              "UNKNOWN",
              "COMPLETED",
              "IN_PROGRESS",
              "QUEUED",
              "STOPPED",
              "ERROR"
            ],
            "example": "COMPLETED"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the bundle was created in ISO format",
            "example": "2023-10-01T10:00:00Z"
          },
          "sizeInMB": {
            "type": "number",
            "format": "double",
            "description": "Total size of the bundle in megabytes",
            "example": 117.74
          },
          "projectId": {
            "type": "string",
            "description": "Unique identifier of the associated project",
            "example": "project-uuid-456"
          },
          "projectName": {
            "type": "string",
            "description": "Name of the project",
            "example": "My Project"
          },
          "agentId": {
            "type": "string",
            "description": "Unique identifier of the agent that generated the bundle",
            "example": "agent-uuid-789"
          },
          "agentName": {
            "type": "string",
            "description": "Name of the agent",
            "example": "Agent 1"
          },
          "description": {
            "type": "string",
            "description": "Description of the bundle's purpose and contents",
            "example": "Logs for debugging pipeline issues"
          },
          "createdBy": {
            "type": "string",
            "description": "Email of the bundle creator",
            "example": "user@example.com"
          },
          "tenantId": {
            "type": "string",
            "description": "Unique identifier of the tenant/organization",
            "example": "tenant-uuid-000"
          },
          "location": {
            "type": "string",
            "description": "File system path or storage location of the bundle",
            "example": "path/to/bundle"
          },
          "processName": {
            "type": "string",
            "description": "Name of the associated process or pipeline",
            "example": "pipeline-process-1"
          },
          "logMetadata": {
            "$ref": "#/components/schemas/DiagnosticLogMetadata",
            "description": "Structured metadata containing categorized log files information"
          }
        }
      },
      "DiagnosticLogCategory": {
        "type": "object",
        "description": "Represents a category of log files with aggregated information",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the log files category (e.g., 'Agent logs', 'Runtime engine Server-1')",
            "example": "Agent logs"
          },
          "sizeInMB": {
            "type": "number",
            "format": "double",
            "description": "Total size of all log files in this category in MB",
            "example": 48.87
          },
          "status": {
            "type": "string",
            "description": "Overall processing status of the category",
            "enum": [
              "UNKNOWN",
              "COMPLETED",
              "IN_PROGRESS",
              "QUEUED",
              "STOPPED",
              "ERROR"
            ],
            "example": "COMPLETED"
          },
          "server": {
            "$ref": "#/components/schemas/DiagnosticRuntimeServer",
            "description": "Server details for runtime engine categories"
          },
          "items": {
            "type": "array",
            "description": "List of individual log files in this category",
            "items": {
              "$ref": "#/components/schemas/DiagnosticLogItem"
            }
          }
        }
      },
      "DiagnosticLogItem": {
        "type": "object",
        "description": "Individual log file with size and status information",
        "properties": {
          "label": {
            "type": "string",
            "description": "Label for the log file type",
            "example": "Gateway logs"
          },
          "sizeInMB": {
            "type": "number",
            "format": "double",
            "description": "Size of the log file in MB",
            "example": 5.67
          },
          "status": {
            "type": "string",
            "description": "Processing status of the log file",
            "enum": [
              "UNKNOWN",
              "COMPLETED",
              "IN_PROGRESS",
              "QUEUED",
              "STOPPED",
              "ERROR"
            ],
            "example": "COMPLETED"
          }
        }
      },
      "DiagnosticLogMetadata": {
        "type": "object",
        "description": "Container for organized log files categories",
        "properties": {
          "categories": {
            "type": "array",
            "description": "Collection of log files categories by source type",
            "items": {
              "$ref": "#/components/schemas/DiagnosticLogCategory"
            }
          }
        }
      },
      "DiagnosticRuntimeServer": {
        "type": "object",
        "description": "Connection details for a runtime engine server",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the server",
            "example": "Dixit-Mac-Engine"
          },
          "host": {
            "type": "string",
            "description": "Hostname or IP address",
            "example": "server.example.com"
          },
          "port": {
            "type": "integer",
            "format": "int32",
            "description": "Port number",
            "example": 8080
          },
          "type": {
            "type": "string",
            "description": "Server type",
            "example": "ENGINE"
          },
          "altIP": {
            "type": "string",
            "description": "Alternative IP address",
            "example": "x.x.x.x"
          },
          "useSSLA": {
            "type": "boolean",
            "description": "Whether to use SSL for agent connections",
            "example": true
          },
          "useSSLE": {
            "type": "boolean",
            "description": "Whether to use SSL for engine connections",
            "example": false
          }
        }
      },
      "ProjectAlertResponse": {
        "type": "object",
        "description": "Response representing an alert related to a project.",
        "properties": {
          "runtimeServer": {
            "type": "string",
            "description": "Name of the runtime server where the alert originated",
            "example": "server-1"
          },
          "pipeline": {
            "type": "string",
            "description": "Name of the pipeline associated with the alert",
            "example": "my-db2i-to-kafka"
          },
          "level": {
            "type": "string",
            "description": "Severity level of the alert",
            "enum": [
              "OFF",
              "FATAL",
              "ERROR",
              "WARN",
              "INFO",
              "DEBUG",
              "TRACE",
              "ALL"
            ],
            "example": "INFO"
          },
          "message": {
            "type": "string",
            "description": "Alert message detailing the issue or information",
            "example": "Replication Kernel is shutting down"
          },
          "generatedAt": {
            "type": "string",
            "description": "Time indicating when the alert was generated in UTC (RFC3339 format)",
            "example": "2023-10-05T14:48:00Z"
          }
        }
      },
      "RevisionPageResponse": {
        "type": "object",
        "description": "Paginated response containing a list of DSL project revisions with navigation metadata",
        "properties": {
          "content": {
            "type": "array",
            "description": "List of revision records in the current page",
            "items": {
              "$ref": "#/components/schemas/RevisionRecord"
            }
          },
          "pageNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Zero-based page number",
            "example": 0
          },
          "pageSize": {
            "type": "integer",
            "format": "int32",
            "description": "Number of items per page (requested size)",
            "example": 25
          },
          "numberOfElements": {
            "type": "integer",
            "format": "int32",
            "description": "Actual number of revisions in the current page",
            "example": 2
          },
          "totalElements": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of revisions across all pages",
            "example": 3
          },
          "totalPages": {
            "type": "integer",
            "format": "int64",
            "description": "Total number of pages available",
            "example": 1
          },
          "first": {
            "type": "boolean",
            "description": "Indicates if this is the first page",
            "example": true
          },
          "last": {
            "type": "boolean",
            "description": "Indicates if this is the last page",
            "example": false
          }
        }
      },
      "RevisionRecord": {
        "type": "object",
        "description": "A single revision entry in the project history",
        "properties": {
          "revisionId": {
            "type": "string",
            "description": "Unique identifier of the revision",
            "example": "rev-abc123"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "Sequential revision number",
            "example": 3
          },
          "baseRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The base revision number this revision was based on (null for initial revision)"
          },
          "fileCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files included in this revision",
            "example": 12
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when this revision was created",
            "example": "2026-05-17T10:00:00Z"
          },
          "createdBy": {
            "type": "string",
            "description": "User who created this revision",
            "example": "john.doe@example.com"
          },
          "description": {
            "type": "string",
            "description": "Optional description or commit message for this revision",
            "example": "Updated customer-sync pipeline with new target schema"
          }
        }
      },
      "PushStatusResponse": {
        "type": "object",
        "description": "Push readiness and concurrency status for a project (informational — no lock acquired)",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "The project ID (catalog asset ID)",
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
          },
          "proposedRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The proposed revision number provided by the caller",
            "example": 4
          },
          "latestRevisionId": {
            "type": "string",
            "description": "Catalog asset ID of the latest DISDSLRevision, or null if none",
            "example": "rev-latest-xyz"
          },
          "latestRevisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The latest revision number on the server",
            "example": 3
          },
          "canPush": {
            "type": "boolean",
            "description": "Whether the caller can proceed with a push at this moment",
            "example": true
          },
          "reason": {
            "type": "string",
            "description": "Reason for the readiness state",
            "enum": [
              "ready",
              "revision_conflict",
              "push_in_progress"
            ],
            "example": "ready"
          },
          "reservation": {
            "$ref": "#/components/schemas/ReservationStatus",
            "description": "Current reservation snapshot if a push is in-progress (null otherwise)"
          }
        }
      },
      "ReservationStatus": {
        "type": "object",
        "description": "Snapshot of the in-flight push reservation",
        "properties": {
          "reservationId": {
            "type": "string",
            "description": "Reservation ID of the in-flight push",
            "example": "res-uuid-12345"
          },
          "state": {
            "type": "string",
            "description": "State of the reservation",
            "enum": [
              "in_progress",
              "completed",
              "failed",
              "expired"
            ],
            "example": "in_progress"
          },
          "owner": {
            "type": "string",
            "description": "Owner of the reservation (request/client identifier)",
            "example": "jane.doe@example.com"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "ISO 8601 timestamp when the reservation (lock) expires",
            "example": "2026-05-18T12:05:00Z"
          },
          "retryAfterSeconds": {
            "type": "integer",
            "format": "int32",
            "description": "Suggested seconds to wait before retrying",
            "example": 30,
            "minimum": 1
          },
          "ownedByRequester": {
            "type": "boolean",
            "description": "True when the requesting user's principal matches the lock owner.\nClients can use this to show a context-aware message:\ntrue  → 'You already have a push in progress (possibly from another window or a previous session that did not complete).'\nfalse → 'Another user is pushing to this project. Please wait.'\n"
          }
        }
      },
      "ProjectFileRecord": {
        "type": "object",
        "description": "A single file within a DSL project revision",
        "properties": {
          "catalogAssetId": {
            "type": "string",
            "description": "The catalog asset ID for this file",
            "example": "asset-file-001"
          },
          "flattenedPath": {
            "type": "string",
            "description": "The flattened path of the file within the project",
            "example": "pipelines/customer-sync.dis.yaml"
          },
          "name": {
            "type": "string",
            "description": "The file name",
            "example": "customer-sync.dis.yaml"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "The version number of this file asset",
            "example": 2
          },
          "phase": {
            "type": "string",
            "description": "The lifecycle phase of the file",
            "enum": [
              "draft",
              "approved",
              "pending_deletion"
            ],
            "example": "approved"
          },
          "content": {
            "type": "string",
            "description": "Base64-encoded file content (present only when includeContent=true)"
          },
          "contentHash": {
            "type": "string",
            "description": "SHA-256 hash of the file content",
            "example": "e3b0c44298fc1c149afbf4c8996fb924..."
          },
          "sizeBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Size of the file in bytes",
            "example": 2048
          },
          "mimeType": {
            "type": "string",
            "description": "MIME type of the file",
            "example": "application/x-yaml"
          },
          "encoding": {
            "type": "string",
            "description": "Logical file encoding format",
            "example": "utf-8"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the file was created",
            "example": "2026-05-10T08:30:00Z"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the file was last updated",
            "example": "2026-05-15T14:20:00Z"
          },
          "createdBy": {
            "type": "string",
            "description": "User who created the file",
            "example": "john.doe@example.com"
          },
          "updatedBy": {
            "type": "string",
            "description": "User who last updated the file",
            "example": "jane.smith@example.com"
          },
          "catalogLink": {
            "type": "string",
            "description": "Direct link to the asset in the Data Catalog UI",
            "example": "https://catalog.precisely.com/assets/asset-file-001"
          }
        }
      },
      "PullFilesResponse": {
        "type": "object",
        "description": "Response containing project files for a pull operation",
        "properties": {
          "revisionId": {
            "type": "string",
            "description": "The revision ID from which files are being pulled",
            "example": "rev-abc123"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The revision number from which files are being pulled",
            "example": 3
          },
          "files": {
            "type": "array",
            "description": "List of project files",
            "items": {
              "$ref": "#/components/schemas/ProjectFileRecord"
            }
          },
          "includeContent": {
            "type": "boolean",
            "description": "Whether file content is included in the response",
            "example": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32",
            "description": "Total number of files in the project",
            "example": 12
          }
        }
      },
      "PullStatusResponse": {
        "type": "object",
        "description": "Pull readiness status for a specific project revision",
        "properties": {
          "projectId": {
            "type": "string",
            "description": "The project ID (catalog asset ID)",
            "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
          },
          "revisionId": {
            "type": "string",
            "description": "The revision ID being checked",
            "example": "rev-abc123"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The revision number being checked",
            "example": 3
          },
          "fileCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of files in this revision",
            "example": 12
          },
          "totalSizeBytes": {
            "type": "integer",
            "format": "int64",
            "description": "Total size of all files in bytes",
            "example": 524288
          },
          "status": {
            "type": "string",
            "description": "Pull readiness status",
            "enum": [
              "ready",
              "unavailable"
            ],
            "example": "ready"
          }
        }
      },
      "DeleteProjectRequest": {
        "type": "object",
        "description": "Request payload for deleting a project. This includes flags for optional pre-requisite operations.",
        "properties": {
          "configOnly": {
            "type": "boolean",
            "description": "Flag to indicate whether to delete only the project configuration.\nWhen set to true, all other operations will be skipped.\n",
            "example": false
          },
          "operations": {
            "$ref": "#/components/schemas/DeletionOperations",
            "description": "Operations to perform during project deletion"
          }
        },
        "required": [
          "operations"
        ]
      },
      "DeletionOperations": {
        "type": "object",
        "description": "Operations to perform during project deletion",
        "properties": {
          "disableCaptures": {
            "type": "boolean",
            "description": "Flag to indicate whether to disable data capture for each pipeline",
            "example": false
          },
          "clearBacklogs": {
            "type": "boolean",
            "description": "Flag to indicate whether to clear any pending backlog for each pipeline",
            "example": false
          },
          "stopLogReaders": {
            "type": "boolean",
            "description": "Flag to indicate whether to stop log reader processes associated with each pipeline",
            "example": false
          },
          "deleteLogReaders": {
            "type": "boolean",
            "description": "Flag to indicate whether to delete log reader for each pipeline",
            "example": false
          },
          "deleteMetabases": {
            "$ref": "#/components/schemas/MetabaseDeletionOptions",
            "description": "Options for deleting metabases"
          }
        },
        "required": [
          "deleteMetabases"
        ]
      },
      "MetabaseDeletionDetails": {
        "type": "object",
        "description": "Details for deleting a specific metabase associated with the project",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the metabase",
            "example": "Test Metabase"
          },
          "adminUser": {
            "type": "string",
            "description": "Admin user for the metabase",
            "example": "admin"
          },
          "adminPassword": {
            "type": "string",
            "description": "Admin user password for the metabase",
            "example": "password"
          },
          "vaultConnectionId": {
            "type": "string",
            "description": "Vault connection ID for the metabase",
            "example": "string"
          }
        },
        "required": [
          "adminUser",
          "name"
        ]
      },
      "MetabaseDeletionOptions": {
        "type": "object",
        "description": "Options for deleting metabases",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Flag to indicate whether to delete metabases",
            "example": false
          },
          "metabaseDetails": {
            "type": "array",
            "description": "List of metabase deletion details",
            "items": {
              "$ref": "#/components/schemas/MetabaseDeletionDetails"
            }
          }
        }
      },
      "DeletePipelineRequest": {
        "type": "object",
        "description": "Request payload for deleting a pipeline. This includes flags for optional pre-requisite operations.",
        "properties": {
          "disableCapture": {
            "type": "boolean",
            "description": "Flag to indicate whether to disable data capture for the pipeline",
            "example": false
          },
          "clearBacklog": {
            "type": "boolean",
            "description": "Flag to indicate whether to clear any pending backlog for the pipeline",
            "example": false
          },
          "stopLogReader": {
            "type": "boolean",
            "description": "Flag to indicate whether to stop log reader processes associated with the pipeline",
            "example": false
          }
        }
      },
      "DeleteDslRevisionResponse": {
        "type": "object",
        "description": "Response confirming the DSL revision was deleted successfully",
        "properties": {
          "revisionId": {
            "type": "string",
            "description": "Catalog asset ID of the deleted revision",
            "example": "rev-abc123"
          },
          "name": {
            "type": "string",
            "description": "The display name of the deleted revision",
            "example": "DSL-Rev-3"
          },
          "revisionNumber": {
            "type": "integer",
            "format": "int32",
            "description": "The revision number that was deleted",
            "example": 3
          },
          "filesPhysicallyDeleted": {
            "type": "array",
            "description": "Catalog asset IDs of file assets physically deleted from the catalog",
            "items": {
              "type": "string"
            }
          },
          "filesRelationshipDeleted": {
            "type": "array",
            "description": "Catalog asset IDs of file-to-revision relationship records deleted",
            "items": {
              "type": "string"
            }
          },
          "remainingRevisionsCount": {
            "type": "integer",
            "format": "int32",
            "description": "Number of revisions remaining for the project after this deletion",
            "example": 2
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Server timestamp when the deletion was processed",
            "example": "2026-05-17T10:00:00Z"
          }
        }
      },
      "DeleteDslFileResponse": {
        "type": "object",
        "description": "Response confirming the DSL file was deleted successfully",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "Catalog asset ID of the deleted file",
            "example": "file-abc123"
          },
          "name": {
            "type": "string",
            "description": "The display name of the deleted file",
            "example": "customer-sync.dis.yaml"
          },
          "flattenedPath": {
            "type": "string",
            "description": "The flattened path of the deleted file",
            "example": "pipelines/customer-sync.dis.yaml"
          },
          "physicallyDeleted": {
            "type": "boolean",
            "description": "True when the file asset was physically deleted; false when only the revision relationship was removed",
            "example": true
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "description": "The version of the file at the time of deletion",
            "example": 3
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "Server timestamp when the deletion was processed",
            "example": "2026-05-17T10:00:00Z"
          }
        }
      }
    },
    "securitySchemes": {
      "bearer_token": {
        "type": "http",
        "description": "JWT Authorization header using the Bearer scheme. Example: 'Bearer {token}'",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}
